diff --git a/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF b/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF index 06f0fb5951ecc075a1930ce048cf632f03a4a616..bdbe05db77371dded41167275e7276f89a01c6df 100644 --- a/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF +++ b/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF @@ -33,6 +33,9 @@ Export-Package: org.fortiss.tooling.base.ui, org.fortiss.tooling.base.ui.editpart.request, org.fortiss.tooling.base.ui.extension.base, org.fortiss.tooling.base.ui.fieldassist, + org.fortiss.tooling.base.ui.internal.command, + org.fortiss.tooling.base.ui.javafx.control.contentprovider, + org.fortiss.tooling.base.ui.javafx.control.treetableview, org.fortiss.tooling.base.ui.layout, org.fortiss.tooling.base.ui.layout.auto, org.fortiss.tooling.base.ui.library, diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/contentprovider/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/contentprovider/.ratings new file mode 100644 index 0000000000000000000000000000000000000000..3c8352c1875bb9e72dee65676123e23d8370524a --- /dev/null +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/contentprovider/.ratings @@ -0,0 +1,2 @@ +ChildrenContentProvider.java 01bc9b3232e4209f4e97355762b620c59eddc677 GREEN +SameTypeContentProvider.java f6c0381a3264dc62dd9b3d3a21e0b2cf5fb00dc1 GREEN diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/contentprovider/ChildrenContentProvider.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/contentprovider/ChildrenContentProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..01bc9b3232e4209f4e97355762b620c59eddc677 --- /dev/null +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/contentprovider/ChildrenContentProvider.java @@ -0,0 +1,43 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.tooling.base.ui.javafx.control.contentprovider; + +import static org.fortiss.tooling.common.util.LambdaUtils.filterType; + +import java.util.Collection; + +import org.fortiss.tooling.base.model.element.IHierarchicElement; +import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase; +import org.fortiss.tooling.kernel.model.INamedElement; + +/** + * Content provider that collects all children of the given type from an externally defined root + * node. + * + * @author diewald + */ +public class ChildrenContentProvider<T extends IHierarchicElement & INamedElement> extends + DynamicTreeContentProviderBase<T> { + + /** {@inheritDoc} */ + @SuppressWarnings("unchecked") + @Override + protected Collection<? extends T> getChildren(T current) { + // The cast is safe by the construction of the Parameter 'T'. + return (Collection<? extends T>)filterType(current.getContainedElements(), + INamedElement.class); + } +} diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/contentprovider/SameTypeContentProvider.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/contentprovider/SameTypeContentProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..f6c0381a3264dc62dd9b3d3a21e0b2cf5fb00dc1 --- /dev/null +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/contentprovider/SameTypeContentProvider.java @@ -0,0 +1,59 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.tooling.base.ui.javafx.control.contentprovider; + +import static org.fortiss.tooling.common.util.LambdaUtils.filterStream; + +import java.util.Collection; +import java.util.stream.Collectors; + +import org.eclipse.emf.ecore.EClass; +import org.fortiss.tooling.base.model.element.IHierarchicElement; +import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase; +import org.fortiss.tooling.kernel.model.INamedElement; + +/** + * Content provider that collects all children of the given type from an externally defined root + * node. Nodes that have a different type are not traversed further even if they have children of + * the given type. + * + * @author diewald + */ +public class SameTypeContentProvider<T extends IHierarchicElement & INamedElement> extends + DynamicTreeContentProviderBase<T> { + + /** EObject type to check against. */ + EClass type; + + /** Constructor. */ + public SameTypeContentProvider(EClass type) { + this.type = type; + } + + /** {@inheritDoc} */ + @SuppressWarnings("unchecked") + @Override + protected Collection<? extends T> getChildren(T current) { + // The cast is safe by the construction of the Parameter 'T'. + // @CodeFormatterOff + Collection<? extends T> children = (Collection<? extends T>) + filterStream(current.getContainedElements(), e -> e instanceof INamedElement) + .filter(e -> (e.getClass().equals(type)) || (type.isInstance(e))) + .collect(Collectors.toList()); + // @CodeFormatterOn + return children; + } +} diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings new file mode 100644 index 0000000000000000000000000000000000000000..74ecded403f0ef2a8aa97292c26a5a964c6c4788 --- /dev/null +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings @@ -0,0 +1 @@ +HierarchicModelElementTreeViewer.java 8662b201c3a459f3ebe3620970652f7a3f90270e GREEN diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/HierarchicModelElementTreeViewer.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/HierarchicModelElementTreeViewer.java new file mode 100644 index 0000000000000000000000000000000000000000..8662b201c3a459f3ebe3620970652f7a3f90270e --- /dev/null +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/HierarchicModelElementTreeViewer.java @@ -0,0 +1,101 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.tooling.base.ui.javafx.control.treetableview; + +import javafx.embed.swt.SWTFXUtils; +import javafx.scene.Node; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.TreeView; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +import org.fortiss.tooling.base.model.element.IHierarchicElement; +import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase; +import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeUIProviderBase; +import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeViewer; +import org.fortiss.tooling.kernel.model.INamedCommentedElement; +import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService; + +/** + * TreeViewer that constructs a DynamicTreeViewer whose UI provider uses the methods and kernel + * services for {@link IHierarchicElement}s and {@link INamedCommentedElement}s. + * The Viewer uses a composition principle where a client must provide {@link TreeView} (JavaFX), a + * root element (AF3), and a content provider that selects the elements to be displayed. + * + * @author diewald + */ +public class HierarchicModelElementTreeViewer<T extends IHierarchicElement & INamedCommentedElement> { + + /** References the constructed {@link DynamicTreeViewer} "controller". */ + protected DynamicTreeViewer<T> dynTreeViewer; + + /** Constructor. */ + public HierarchicModelElementTreeViewer(TreeView<T> treeView, T modelRoot, + DynamicTreeContentProviderBase<T> contentProvider) { + DynamicTreeUIProviderBase<T> uiProvider = createContentUIProvider(); + dynTreeViewer = + new DynamicTreeViewer<T>(treeView, modelRoot, true, 0, contentProvider, uiProvider); + } + + /** + * Creates a default UI provider for {@link DynamicTreeViewer}s that present + * {@link IHierarchicElement}s. It also uses the {@link IModelElementHandlerService} for a nicer + * visual appearance. + * <p> + * Externalize this method into a class when subclassing seems appropriate. + * + * @return The constructed UI Provider. + */ + protected DynamicTreeUIProviderBase<T> createContentUIProvider() { + return new DynamicTreeUIProviderBase<T>() { + + /** {@inheritDoc} */ + @Override + public String getLabel(T element) { + return element.getName(); + } + + /** {@inheritDoc} */ + @Override + public Node getIconNode(T element) { + org.eclipse.swt.graphics.Image icon = + IModelElementHandlerService.getInstance().getIcon(element); + if(icon != null) { + Image fxImage = SWTFXUtils.toFXImage(icon.getImageData(), null); + return new ImageView(fxImage); + } + return null; + } + + /** {@inheritDoc} */ + @Override + public ContextMenu createContextMenu(T element) { + ContextMenu menu = new ContextMenu(); + // TODO (3209): Add sensible default operations for AF3 elements, if they are + // needed. Otherwise, use a list provided by subclasses that defines the menu items + // and their order. The code below is taken from SystemFOCUS and shall serve as a + // reference. + // MenuItem item = new MenuItem("Delete '" + getLabel(element) + "'."); + // item.setOnAction(event -> { + // new DeleteOperation(element).delete(); + // viewer.update(); + // }); + // menu.getItems().add(item); + return menu; + } + }; + } +} diff --git a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/.ratings b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/.ratings index 2c43176d8d282288e059bb8598af63cd71fc0875..5a8e3c2f67fefbf495075ea019b15c71187b3940 100644 --- a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/.ratings +++ b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/.ratings @@ -1,5 +1,5 @@ AngleUtils.java 462551eae71738ff51f92c9906bff9a21a375d2b GREEN -AnnotationUtils.java 51072e0c39c83fc5695db76ffaaa430c2ce51508 GREEN +AnnotationUtils.java 8381bc9190df78f69add1164b974a6cbaae09678 GREEN BaseMathUtils.java d680e6f41a8986e5fb696fe303b16548108cf78b GREEN BaseModelElementUtils.java b8775b7a462efc168cf79a017aa3377a782d10f6 GREEN ConstraintsBaseUtils.java ef6a1178df614fc03bbdec64d4d15b1565ae8551 GREEN diff --git a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/AnnotationUtils.java b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/AnnotationUtils.java index 51072e0c39c83fc5695db76ffaaa430c2ce51508..8381bc9190df78f69add1164b974a6cbaae09678 100644 --- a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/AnnotationUtils.java +++ b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/AnnotationUtils.java @@ -34,6 +34,8 @@ import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.util.EcoreUtil; import org.fortiss.tooling.base.ToolingBaseActivator; +import org.fortiss.tooling.base.annotation.AnnotationEntry; +import org.fortiss.tooling.base.annotation.AnnotationValueService; import org.fortiss.tooling.base.annotation.IAnnotationValueService; import org.fortiss.tooling.base.annotation.valueprovider.AnnotationInstSpec; import org.fortiss.tooling.base.annotation.valueprovider.EStructuralFeatureDescriptor; @@ -138,6 +140,22 @@ public class AnnotationUtils { return getAnnotationInternal(modelElement, clazz); } + /** + * Returns the {@link IAnnotationValueProvider} of the given {@code annotationType}. + * + * @param element + * {@link IModelElement} to which an annotation of the given type is bound (required + * by the service). + * @param annotationType + * Annotation type. + * @return The corresponding value provider or {@code null} if none is found. + */ + public static IAnnotationValueProvider<IAnnotatedSpecification> getAnnotationValueProvider( + IModelElement element, Class<IAnnotatedSpecification> annotationType) { + AnnotationEntry annEntry = AnnotationValueService.getInstance().getAnnotationEntry(element); + return annEntry.getAnnotationValueProvider(annotationType); + } + /** * Returns all {@link IAnnotatedSpecification}s attached to the given {@link IModelElement}. * diff --git a/org.fortiss.tooling.common.ui/.classpath b/org.fortiss.tooling.common.ui/.classpath index e58bfccdaebc5166fa4d2bcae69af846839dbe77..60cbbc2bfe58e7595f319b6caf23fca6a28ff47a 100644 --- a/org.fortiss.tooling.common.ui/.classpath +++ b/org.fortiss.tooling.common.ui/.classpath @@ -4,6 +4,7 @@ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="src" path="external-src"/> + <classpathentry kind="src" path="res"/> <classpathentry exported="true" kind="lib" path="lib/org.conqat.ide.commons.gef.jar"/> <classpathentry exported="true" kind="lib" path="lib/org.conqat.ide.commons.ui.jar"/> <classpathentry exported="true" kind="lib" path="lib/jgrapht-jdk1.6_src.jar"/> diff --git a/org.fortiss.tooling.common.ui/META-INF/MANIFEST.MF b/org.fortiss.tooling.common.ui/META-INF/MANIFEST.MF index 0535ba0778b5aba6970966563898313ce897df2e..d2965d39dbc710933b81ad962eabc97332956865 100644 --- a/org.fortiss.tooling.common.ui/META-INF/MANIFEST.MF +++ b/org.fortiss.tooling.common.ui/META-INF/MANIFEST.MF @@ -18,7 +18,8 @@ Require-Bundle: org.fortiss.tooling.common;bundle-version="2.13.0";visibility:=r org.eclipse.ui.ide;bundle-version="3.7.0";visibility:=reexport, org.eclipse.jface.text;bundle-version="3.7.1";visibility:=reexport, org.eclipse.fx.ui.workbench3;bundle-version="0.9.0";visibility:=reexport, - org.eclipse.fx.javafx;bundle-version="2.2.0";resolution:=optional;visibility:=reexport + org.eclipse.fx.javafx;bundle-version="2.2.0";resolution:=optional;visibility:=reexport, + org.eclipse.fx.osgi.util;bundle-version="0.9.0";resolution:=optional Bundle-ClassPath: ., lib/org.conqat.ide.commons.gef.jar, lib/org.conqat.ide.commons.ui.jar, @@ -72,7 +73,9 @@ Export-Package: org.conqat.ide.commons.gef, org.eclipse.wb.swt, org.eclipse.wb.swt.layout.grouplayout, org.eclipse.wb.swt.widgets.baseline, + org.fortiss.tooling.common.ui, org.fortiss.tooling.common.ui.javafx, + org.fortiss.tooling.common.ui.javafx.control.treetableview, org.jgrapht, org.jgrapht.alg, org.jgrapht.alg.util, diff --git a/org.fortiss.tooling.common.ui/build.properties b/org.fortiss.tooling.common.ui/build.properties index cd7a139199e0563abe5130d672bac57672f6bb11..2a4968a8f7590df4c2ada9528e3154397826601d 100644 --- a/org.fortiss.tooling.common.ui/build.properties +++ b/org.fortiss.tooling.common.ui/build.properties @@ -5,9 +5,11 @@ bin.includes = .,\ lib/org.conqat.ide.commons.gef.jar,\ lib/org.conqat.ide.commons.ui.jar,\ lib/jgrapht-jdk1.6_src.jar,\ - lib/swt-grouplayout.jar + lib/swt-grouplayout.jar,\ + res/ jars.compile.order = . source.. = src/,\ + res/,\ external-src/ output.. = build/ src.includes = lib/ diff --git a/org.fortiss.tooling.common.ui/res/aerofx/License.txt b/org.fortiss.tooling.common.ui/res/aerofx/License.txt new file mode 100644 index 0000000000000000000000000000000000000000..9b0439486519cda591b3072847c49941c14da845 --- /dev/null +++ b/org.fortiss.tooling.common.ui/res/aerofx/License.txt @@ -0,0 +1,26 @@ +Copyright (c) 2014, Matthias Meidinger +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. \ No newline at end of file diff --git a/org.fortiss.tooling.common.ui/res/aerofx/win7.css b/org.fortiss.tooling.common.ui/res/aerofx/win7.css new file mode 100644 index 0000000000000000000000000000000000000000..801f91ff63fe0c14e42f3a0182590f5a17f73965 --- /dev/null +++ b/org.fortiss.tooling.common.ui/res/aerofx/win7.css @@ -0,0 +1,473 @@ +/* + * Copyright (c) 2014, Matthias Meidinger + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ + +.root{ + -fx-text-base-color: black; + -fx-text-fill: -fx-text-base-color; + + /* This is the default Windows-font */ + -fx-font-family: "Segoe UI Semibold"; + -fx-font-size: 10.5; + + /* For debugging purposes*/ + -fx-background-color: rgb(240,240,240); + + -fx-disabled-opacity: 0.6; +} + +.text{ + -fx-font-smoothing-type: lcd; +} + +/* disabled controls */ +.button:disabled, +.toggle-button:disabled, +.radio-button:disabled, +.check-box:disabled, +.hyperlink:disabled, +.menu-button:disabled, +.split-menu-button:disabled, +.slider:disabled, +.scroll-pane:disabled, +.progress-bar:disabled, +.progress-indicator:disabled, +.text-input:disabled, +.choice-box:disabled, +.combo-box-base:disabled, +.list-view:disabled, +.tree-view:disabled, +.table-view:disabled, +.tree-table-view:disabled, +.tab-pane:disabled, +.tab-pane > .tab-header-area > .headers-region > .tab:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +/* mnemonics */ +.button:show-mnemonics > .mnemonic-underline, +.toggle-button:show-mnemonics > .mnemonic-underline, +.radio-button:show-mnemonics > .mnemonic-underline, +.check-box:show-mnemonics > .mnemonic-underline, +.hyperlink:show-mnemonics > .mnemonic-underline, +.split-menu-button:show-mnemonics > .mnemonic-underline, +.menu-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + +.mnemonic-underline{ + -fx-stroke: transparent; +} + + + + +/******************************************** +* * +* Button & Default-Button * +* * +*********************************************/ +.button-focus-border{ + -fx-stroke: black; + -fx-stroke-dash-array: 1; + -fx-stroke-width: 1px; + -fx-stroke-line-cap: butt; + -fx-stroke-type: inside; +} + +.button, .toggle-button{ + -fx-alignment: center; + -fx-background-color: + rgb(112,112,112), + linear-gradient(rgb(252,252,252), rgb(252,252,252)), + linear-gradient(rgb(242,242,242) 0%, rgb(235,235,235) 49%, rgb(221,221,221) 50%, rgb(207,207,207) 100%); + -fx-background-insets: 0,1,2; + -fx-background-radius: 3,2,1; + -fx-padding: 4 4 3 3; + -fx-text-fill: -fx-text-base-color; +} + +.button:hover{ + -fx-background-color: + rgb(60,127,177), + linear-gradient(rgb(250,253,254),rgb(250,253,254)), + linear-gradient(rgb(234, 246, 253) 0%, rgb(217, 240, 252) 49%, rgb(190, 230, 253) 50%, rgb(167, 217, 245) 100%); +} + +.button:default{ + -fx-background-color: + rgb(60,127,177), + linear-gradient(rgb(47,212,255), rgb(47,212,255)), + linear-gradient(rgb(234,246,252) 0%, rgb(228,243,252) 49%, rgb(202,233,250) 50%, rgb(182,222,245) 100%); +} + +.button:armed, .toggle-button:armed{ + -fx-background-color: + rgb(44,98,139), + linear-gradient(rgb(158,176,186), rgb(158,176,186)), + linear-gradient(rgb(229,244,252) 0%, rgb(196,229,246) 49%, rgb(152,209,239) 50%, rgb(104,179,219) 100%); +} + + +/******************************************** +* * +* TextField * +* * +*********************************************/ +.text-field{ + /* If four values are used, the sides are top, right, bottom, left. */ + -fx-border-color: rgb(170,170,178) rgb(218,220,230) rgb(226,231.0,239) rgb(226,224,234); + -fx-background-color: rgb(255,255,255); + -fx-padding: 0.0em; + -fx-cursor: text; + -fx-effect: null; + -fx-pref-height: 20px; +} +.text-field:focused{ + -fx-border-color: rgb(61,123,173) rgb(164,201,227) rgb(183,217,237) rgb(181,207,231); + /* Remove the blue glow on focus */ + -fx-background-insets: 0, 0, 0, 0; + -fx-effect: null; +} + + +/******************************************** +* * +* CheckBox * +* * +*********************************************/ +.check-box-focus-border{ + -fx-stroke: black; + -fx-stroke-dash-array: 1; + -fx-stroke-width: 1px; + -fx-stroke-line-cap: butt; + -fx-stroke-type: inside; +} +/* TODO: Style the mark by using a fx-shape */ +.check-box{ + -fx-label-padding: 0.0em 0.0em 0.0em 0.05em; +} + +.check-box > .box{ + -fx-padding: 0.7em; + -fx-background-insets: 0, 2, 4; + -fx-border-color: rgb(140.0, 141.0, 141.0); + -fx-background-color: + rgb(244,244,244), + linear-gradient(to bottom right, rgb(174,179,185), rgb(233,233,234)), + linear-gradient(to bottom right, rgb(203,207,213), rgb(246,246,246)); + -fx-scale-x: 0.75; + -fx-scale-y: 0.75; +} + +.check-box:hover > .box { + -fx-border-color: rgb(85,134,163); + -fx-background-color: + rgb(222,249,250), + linear-gradient(to bottom right, rgb(121,198,249), rgb(207,236,253)), + linear-gradient(to bottom right, rgb(177,223,253), rgb(231,247,254)); +} + +.check-box:pressed > .box{ + -fx-border-color: rgb(44,98,139); + -fx-background-color: + rgb(194,228,246), + linear-gradient(to bottom right, rgb(94,182,247), rgb(194,228,246)), + linear-gradient(to bottom right, rgb(157,213,252), rgb(224,244,254)); +} + +.check-box:disabled > .box{ + -fx-background-color: + linear-gradient(rgb(239.0, 239.0, 239.0), rgb(250.0, 250.0, 250.0)); +} + +.check-box:selected > .box{ + -fx-padding: -0.208333em 0 0.208333em 0.23em; + -fx-padding: -0.208333em 0.083333em 0.208333em 0.23em; + -fx-padding: 0.166667em 0.166667em 0.25em 0.25em; +} + +.check-box:selected > .box > .mark{ + -fx-padding: 0.416667em 0.416667em 0.5em 0.5em; + -fx-shape: "M 5.1806931,9.0173267 7.5232674,12.170792 11.307426,4.4673266 10.091089,3.9717821 7.2980199,9.6029703 6.1267328,7.9361386 z"; + -fx-background-color: rgb(76,97,152); +} + +.check-box:selected:hover > .box > .mark{ + -fx-background-color: rgb(4,34,113); +} + +.check-box:selected:pressed > .box > .mark{ + -fx-background-color: rgb(44,83,148); +} + + +/******************************************** +* * +* RadioButton * +* * +*********************************************/ +.radio-button-focus-border{ + -fx-stroke: black; + -fx-stroke-dash-array: 1; + -fx-stroke-width: 1px; + -fx-stroke-line-cap: butt; + -fx-stroke-type: inside; +} + +.radio-button{ + -fx-label-padding: 0.0em 0.0em 0.0em 0.35em; +} + +.radio-button > .text{ + -fx-translate-y: 1px; +} + +.radio-button > .radio{ + -fx-pref-height: 12px; + -fx-pref-width: 12px; + -fx-background-color: + rgb(147,148,148), + rgb(239,239,239), + linear-gradient(to bottom right, rgb(179,184,189), rgb(235,235,235)), + linear-gradient(to bottom right, rgb(203,207,213), rgb(241,241,241)); + -fx-background-insets: 0,1,2,3; + -fx-background-radius: 1em; + -fx-padding: 0.333333em; +} + +.radio-button:hover > .radio{ + -fx-background-color: + rgb(93,140,167), + rgb(216,244,246), + linear-gradient(to bottom right, rgb(128,202,249), rgb(210,238,253)), + linear-gradient(to bottom right, rgb(177,223,253), rgb(223,243,254)); + -fx-background-insets: 0,1,2,3; +} + +.radio-button:pressed > .radio{ + -fx-background-color: + rgb(58,103,135), + rgb(198,239,241), + linear-gradient(to bottom right, rgb(90,179,246), rgb(190,230,252)), + linear-gradient(to bottom right, rgb(147,208,252), rgb(208,237,253)); + -fx-background-insets: 0,1,2,3; + -fx-background-radius: 1.0em; + -fx-padding: 0.333333em; +} + +.radio-button:selected > .radio > .dot{ + -fx-padding: 0.333333em; + -fx-pref-height: 4px; + -fx-pref-width: 4px; + -fx-background-color: + rgb(20,47,68), + rgb(11,130,199), + linear-gradient(to bottom right, rgb(255,255,255) 20%, rgb(11,130,199) 60%); + -fx-background-insets: 0,1,2; + -fx-background-radius: 1.0em; +} + +.radio-button:selected:hover > .radio > .dot{ + -fx-background-color: + rgb(20,47,68), + rgb(11,130,199), + linear-gradient(to bottom right, rgb(255,255,255) 20%, rgb(13,160,243) 60%); +} + +.radio-button:selected:pressed > .radio > .dot{ + -fx-background-color: + rgb(20,47,68), + rgb(11,130,199), + linear-gradient(to bottom right, rgb(255,255,255) 20%, rgb(7,84,131) 60%); +} + +.radio-button:show-mnemonics .mnemonic-underline{ + -fx-stroke: -fx-text-base-color; +} + +/******************************************** +* * +* TabPane * +* * +*********************************************/ +.tab-pane{ + -fx-tab-min-height: 1.8333em; /* 22 */ + -fx-tab-max-height: 1.8333em; /* 22 */ +} + +.tab-pane:top > .tab-content-area { + -fx-background-color: rgb(255,255,255); + -fx-border-color: transparent rgb(137,140,149) rgb(137,140,149) rgb(137,140,149); +} + +.tab-pane:top > .tab-header-area { + -fx-padding: 0.416667em 0.166667em 0.0em 0.416667em; /* 5 2 0 5 */ + -fx-padding: 0.416667em 5 0.0em 0.416667em; /* 5 2 0 5 */ +} + +.tab-pane > *.tab-header-area > .headers-region { + -fx-translate-x: -5px; +} + +.tab-pane > *.tab-header-area > *.tab-header-background{ + -fx-background-color: rgb(240,240,240); + -fx-border-color: transparent transparent rgb(137,140,149) transparent ; +} + +.tab-pane > .tab-header-area > .headers-region > .tab{ + -fx-padding: 0.083333em 0.5em 0.083333em 0.5em; + -fx-border-color: rgb(137,140,149); + -fx-background-color: + rgb(255,255,255), + linear-gradient(to bottom, rgb(242,242,242) 0%, rgb(235,235,235) 49%, rgb(221,221,221) 50%, rgb(207,207,207) 100%); + -fx-background-insets: 0,2 2 0 2; +} + +.tab-pane > .tab-header-area > .headers-region > .tab:top{ + -fx-border-color: rgb(244,0,0), rgb(137,140,149), rgb(137,140,149), rgb(137,140,149); + -fx-border-width: 1 1 1 1; + -fx-pref-height: 1.8em; +} + +.tab-pane > .tab-header-area > .headers-region > .tab:hover{ + -fx-border-color: rgb(60,127,177); + -fx-background-color: + rgb(255,255,255), + linear-gradient(to bottom, rgb(234,246,253) 0%, rgb(217,240,252) 49%, rgb(190,230,253) 50%, rgb(167,217,245) 100%); + -fx-background-insets: 0,2 2 0 2; +} + +.tab-pane > .tab-header-area > .headers-region > .tab:selected{ + -fx-border-color: rgb(137,140,149); + -fx-border-width: 1 1 0 1; + -fx-background-color: rgb(255,255,255); + -fx-pref-height: 2em; +} + +.tab-pane > .tab-header-area > .headers-region > .tab:selected .focus-indicator{ + -fx-border-width: 0; + -fx-border-color: transparent; +} + +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-alignment: CENTER; + -fx-text-fill: -fx-text-base-color; +} + +.tab-pane.floating > .tab-content-area { + -fx-background-color: -fx-outer-border, -fx-background; + -fx-background-insets: 0, 1; + -fx-background-radius: 3, 2; + -fx-padding: 2; +} + +/******************************************** +* * +* Hyperlink * +* * +*********************************************/ +.hyperlink{ + -fx-text-fill: rgb(0,102,204); +} + +.hyperlink:focused{ + -fx-border-color: black; + -fx-border-style: dotted; +} + + +/******************************************** +* * +* GroupBox * +* * +*********************************************/ +.group-box-border{ + -fx-stroke: rgb(213,223,229); + -fx-stroke-dash-array: 1 0; + -fx-stroke-width: 1px; + -fx-stroke-line-cap: butt; + -fx-stroke-type: inside; + -fx-arc-height: 6px; + -fx-arc-width: 6px; +} + + +/******************************************** +* * +* TableView * +* * +*********************************************/ +.table-view{ + -fx-border-color: rgb(130,135,144); + -fx-background-color: white; +} + +.table-view > column-header-background > nested-column-header > .arrow{ + -fx-shape:null; +} + +.table-view > .column-header-background > .nested-column-header > .column-header{ + -fx-pref-height: 23px; + -fx-border-color: rgb(213,213,213); + -fx-border-width: 0 1 1 0; + -fx-background-color: + linear-gradient(to bottom, rgb(255,255,255) 0%, rgb(255,255,255) 40%, rgb(247,248,250) 41%, rgb(241,242,244) 100%); +} + +.table-view > .column-header-background > .nested-column-header > .column-header:hover{ + -fx-border-color: transparent rgb(136,203,235) rgb(147,201,227) rgb(105,187,227); + -fx-border-width: 0 1 1 1; + -fx-background-color: + linear-gradient(to bottom, rgb(227,247,255) 0%, rgb(227,247,255) 40%, rgb(189,237,255) 41%, rgb(183,231,251) 100%); +} + +.table-view > .column-header-background > .nested-column-header > .column-header:pressed{ + -fx-translate-x: 1px; + -fx-translate-y: 1px; + -fx-border-color: rgb(134,163,178) rgb(79,144,174) rgb(147,201,227) rgb(80,145,175); + -fx-border-width: 1; + -fx-background-color: + linear-gradient(to bottom, rgb(188,228,249) 0%, rgb(188,228,249) 40%, rgb(141,214,247) 41%, rgb(138,209,245) 100%); +} + +.table-view > .column-header-background > .nested-column-header > .column-header > .label{ + -fx-translate-x: 4px; + -fx-alignment: center-left; +} + + +/******************************************** +* * +* Separator * +* * +*********************************************/ +.separator:horizontal{ + -fx-border-color:rgb(160,160,160); + -fx-border-width: 0.5; +} \ No newline at end of file diff --git a/org.fortiss.tooling.common.ui/res/aquafx/License.txt b/org.fortiss.tooling.common.ui/res/aquafx/License.txt new file mode 100644 index 0000000000000000000000000000000000000000..0def22f5fd8bea7b46040cf44a66be549660f1d6 --- /dev/null +++ b/org.fortiss.tooling.common.ui/res/aquafx/License.txt @@ -0,0 +1,21 @@ +Copyright (c) 2013, Claudine Zillmann All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +* Redistributions of source code must retain the above copyright notice, this list of conditions + and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions + and the following disclaimer in the documentation and/or other materials provided with the + distribution. +* Neither the name of AquaFX, the website aquafx-project.com, nor the names of its contributors may + be used to endorse or promote products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CLAUDINE ZILLMANN BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/org.fortiss.tooling.common.ui/res/aquafx/aquafx-air.css b/org.fortiss.tooling.common.ui/res/aquafx/aquafx-air.css new file mode 100644 index 0000000000000000000000000000000000000000..ab8bdfc2453f42a9edb16df82030ac1ef7144b43 --- /dev/null +++ b/org.fortiss.tooling.common.ui/res/aquafx/aquafx-air.css @@ -0,0 +1,160 @@ +.root{ + -dark-wind: rgb(248.0, 248.0, 248.0); + -dark-wind-transparent: rgb(255.0, 255.0, 255.0, 0.8); + -dark-wind-armed: rgb(200.0, 200.0, 200.0); + -light-wind: rgb(255.0, 255.0, 255.0); + -light-wind-armed: rgb(248.0, 248.0, 248.0 ); + -white-wind: rgb(250.0, 250.0, 250.0); + -light-white-wind: rgb(255.0, 255.0, 255.0); + -light-white-wind-armed: rgb(248.0, 248.0, 248.0); + -lighter-wind: rgb(255.0, 255.0, 255.0); + -lighter-white-wind: rgb(255.0, 255.0, 255.0); + + -fx-selected-row: -dark-wind-armed; + + -main-gradient-armed: linear-gradient(-light-wind-armed 15.0%, -dark-wind-armed 50.0%, + -dark-wind-armed 50.0%, -light-white-wind-armed 100.0%); + + -main-gradient: linear-gradient(-light-wind 15.0%, -dark-wind 50.0%, + -dark-wind 50.0%, -light-white-wind 100.0%); + + -fx-cell-hover-color: -light-wind; +} + +.hyperlink { + -fx-text-fill: -dark-wind; +} + +.button, +.toggle-button, +.radio-button, +.choice-box, +.slider, +.text-field, +.password-field, +.text-area, +.menu-button, +.split-menu-button, +.combo-box, +.color-picker, +.check-box { + -fx-aqua-inner-focus-color: -dark-wind-transparent; + -fx-aqua-outer-focus-color: -dark-wind; +} + +.button{ + -fx-aqua-start-color-1: -light-wind; + -fx-aqua-start-color-2: -dark-wind; + -fx-aqua-start-color-3: -dark-wind; + -fx-aqua-start-color-4: -light-white-wind; + -fx-aqua-end-color-1: -lighter-wind; + -fx-aqua-end-color-2: -light-white-wind; + -fx-aqua-end-color-3: -light-white-wind; + -fx-aqua-end-color-4: -lighter-white-wind; + -fx-aqua-armed-style:"linear-gradient(-light-wind 0.0%, -dark-wind-armed 100.0% ), + -main-gradient, + radial-gradient(focus-angle 180.0deg, focus-distance 95.0%, center 1.0% 50.0%, + radius 50.0%, -dark-wind, transparent), + radial-gradient(focus-angle 0.0deg, focus-distance 95.0%, center 100.0% 50.0%, + radius 50.0%, -dark-wind, transparent)"; +} + +.button:armed, .button:default:armed, .toggle-button:armed, .toggle-button:selected:armed{ + -fx-background-color: + linear-gradient(-light-wind 0.0%, -dark-wind-armed 100.0% ), + -main-gradient, + radial-gradient(focus-angle 180.0deg, focus-distance 95.0%, center 1.0% 50.0%, + radius 50.0%, -dark-wind, transparent), + radial-gradient(focus-angle 0.0deg, focus-distance 95.0%, center 100.0% 50.0%, + radius 50.0%, -dark-wind, transparent); +} + +.check-box:selected > .box, +.check-box:indeterminate > .box, +.radio-button:selected > .radio { + -fx-background-color: -main-gradient; +} + +.check-box:selected:armed > .box, +.radio-button:selected:armed > .radio { + -fx-background-color: -main-gradient-armed; +} + +.titled-pane:focused > .title > .arrow-button > .arrow { + -fx-effect: dropshadow(one-pass-box , -dark-wind, 6.5, 0.8 , 0.0, 0.0); +} + + +/* Draws focus border around tableview */ +.table-view:focused, +.tree-table-view:focused, +.tree-view:focused, +.list-view:focused { + -fx-effect: dropshadow(one-pass-box , -dark-wind-transparent, 8.0, 0.8 , 0.0, 0.0); +} + +.table-row-cell:odd, +.tree-table-row-cell:odd { + -fx-background-color: -dark-wind; +} + +.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, +.table-view:row-selection:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:focused:selected:hover, +.tree-table-view:row-selection:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:focused:selected:hover, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:focused:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected:hover, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:focused:selected:hover { + -fx-background-color: -fx-selected-row; +} + +/* When the list-cell is selected and focused */ +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:focused:selected, +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient( -light-white-wind, -dark-wind-armed), + linear-gradient(-light-white-wind, -dark-wind); + -fx-text-fill: black; +} + +/* When the ListView is _not_ focused, we show alternate selection colors */ +.list-cell:filled:selected:focused, +.list-cell:filled:selected { + -fx-background-color: linear-gradient(-light-white-wind-armed, -dark-wind-armed), + linear-gradient(-light-white-wind-armed, -dark-wind-armed); + -fx-text-fill: black; +} + +.list-view:horizontal:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient(to right, -light-white-wind, -dark-wind-armed), + linear-gradient(to right, -light-white-wind, -dark-wind); + -fx-text-fill: black; +} + +.list-view:horizontal > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient(to right, -light-white-wind-armed, -dark-wind-armed), + linear-gradient(to right, -light-white-wind-armed, -dark-wind-armed); + -fx-text-fill: black; +} + +.pagination > .pagination-control > .control-box > .bullet-button:selected { + -fx-background-color: -main-gradient; +} + +.progress-indicator > .determinate-indicator > .progress { + -fx-background-color: + rgb(208.0, 208.0, 208.0), + radial-gradient(center 50.0% 50.0%, radius 50.0%, -dark-wind, -white-wind); +} + +.progress-indicator > .determinate-indicator > .tick { + -fx-background-color: rgb(208.0, 208.0, 208.0), black; +} + +.progress-bar { + -fx-aqua-determinate-image: "progress_wind.png"; +} + +.progress-bar:indeterminate { + -fx-aqua-indeterminate-color:-dark-wind; +} diff --git a/org.fortiss.tooling.common.ui/res/aquafx/aquafx-earth.css b/org.fortiss.tooling.common.ui/res/aquafx/aquafx-earth.css new file mode 100644 index 0000000000000000000000000000000000000000..b5b8a6868bd0b02973ed68fdc5d838b0836dcba7 --- /dev/null +++ b/org.fortiss.tooling.common.ui/res/aquafx/aquafx-earth.css @@ -0,0 +1,147 @@ +.root{ + -dark-green: rgb(69.0, 199.0, 73.0); + -dark-green-transparent: rgb(69.0, 199.0, 73.0, 0.8); + -dark-green-armed: rgb(69.0, 154.0, 73.0); + -light-green: rgb(180.0, 235.0, 145.0); + -light-green-armed: rgb(160.0, 196.0, 139.0 ); + -white-green: rgb(148.0, 212.0, 112.0); + -light-white-green: rgb(184.0, 233.0, 154.0); + -light-white-green-armed: rgb(163.0, 196.0, 143.0); + -lighter-green: rgb(219, 255, 190); + -lighter-white-green: rgb(206, 231, 190); + + -fx-selected-row: -dark-green; + + -main-gradient-armed: linear-gradient(-light-green-armed 15.0%, -dark-green-armed 50.0%, + -dark-green-armed 50.0%, -light-white-green-armed 100.0%); + + -main-gradient: linear-gradient(-light-green 15.0%, -dark-green 50.0%, + -dark-green 50.0%, -light-white-green 100.0%); + + -fx-cell-hover-color: -light-green; +} + +.hyperlink { + -fx-text-fill: -dark-green; +} + +.button, +.toggle-button, +.radio-button, +.choice-box, +.slider, +.text-field, +.password-field, +.text-area, +.menu-button, +.split-menu-button, +.combo-box, +.color-picker, +.check-box { + -fx-aqua-inner-focus-color: -dark-green-transparent; + -fx-aqua-outer-focus-color: -dark-green; +} + +.button{ + -fx-aqua-start-color-1: -light-green; + -fx-aqua-start-color-2: -dark-green; + -fx-aqua-start-color-3: -dark-green; + -fx-aqua-start-color-4: -light-white-green; + -fx-aqua-end-color-1: -lighter-green; + -fx-aqua-end-color-2: -light-white-green; + -fx-aqua-end-color-3: -light-white-green; + -fx-aqua-end-color-4: -lighter-white-green; + -fx-aqua-armed-style:"linear-gradient(-light-green 0.0%, -dark-green-armed 100.0% ), + -main-gradient, + radial-gradient(focus-angle 180.0deg, focus-distance 95.0%, center 1.0% 50.0%, + radius 50.0%, -dark-green, transparent), + radial-gradient(focus-angle 0.0deg, focus-distance 95.0%, center 100.0% 50.0%, + radius 50.0%, -dark-green, transparent)"; +} + +.button:armed, .button:default:armed, .toggle-button:armed, .toggle-button:selected:armed{ + -fx-background-color: + linear-gradient(-light-green 0.0%, -dark-green-armed 100.0% ), + -main-gradient, + radial-gradient(focus-angle 180.0deg, focus-distance 95.0%, center 1.0% 50.0%, + radius 50.0%, -dark-green, transparent), + radial-gradient(focus-angle 0.0deg, focus-distance 95.0%, center 100.0% 50.0%, + radius 50.0%, -dark-green, transparent); +} + +.check-box:selected > .box, +.check-box:indeterminate > .box, +.radio-button:selected > .radio { + -fx-background-color: -main-gradient; +} + +.check-box:selected:armed > .box, +.radio-button:selected:armed > .radio { + -fx-background-color: -main-gradient-armed; +} + +.titled-pane:focused > .title > .arrow-button > .arrow { + -fx-effect: dropshadow(one-pass-box , -dark-green, 6.5, 0.8 , 0.0, 0.0); +} + + +/* Draws focus border around tableview */ +.table-view:focused, +.tree-table-view:focused, +.tree-view:focused, +.list-view:focused { + -fx-effect: dropshadow(one-pass-box , -dark-green-transparent, 8.0, 0.8 , 0.0, 0.0); +} + +.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, +.table-view:row-selection:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:focused:selected:hover, +.tree-table-view:row-selection:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:focused:selected:hover, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:focused:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected:hover, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:focused:selected:hover { + -fx-background-color: -fx-selected-row; +} + +/* When the list-cell is selected and focused */ +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:focused:selected, +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient( -light-white-green, -dark-green-armed), + linear-gradient(-light-white-green, -dark-green); +} + +/* When the ListView is _not_ focused, we show alternate selection colors */ +.list-cell:filled:selected:focused, +.list-cell:filled:selected { + -fx-background-color: linear-gradient(-light-white-green-armed, -dark-green-armed), + linear-gradient(-light-white-green-armed, -dark-green-armed); +} + +.list-view:horizontal:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient(to right, -light-white-green, -dark-green-armed), + linear-gradient(to right, -light-white-green, -dark-green); +} + +.list-view:horizontal > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient(to right, -light-white-green-armed, -dark-green-armed), + linear-gradient(to right, -light-white-green-armed, -dark-green-armed); +} + +.pagination > .pagination-control > .control-box > .bullet-button:selected { + -fx-background-color: -main-gradient; +} + +.progress-indicator > .determinate-indicator > .progress { + -fx-background-color: + rgb(208.0, 208.0, 208.0), + radial-gradient(center 50.0% 50.0%, radius 50.0%, -dark-green, -white-green); +} + +.progress-bar { + -fx-aqua-determinate-image: "progress_earth.png"; +} + +.progress-bar:indeterminate { + -fx-aqua-indeterminate-color:-dark-green; +} diff --git a/org.fortiss.tooling.common.ui/res/aquafx/aquafx-fire.css b/org.fortiss.tooling.common.ui/res/aquafx/aquafx-fire.css new file mode 100644 index 0000000000000000000000000000000000000000..a845927c2f3b88d7c1bf8b5937a84e9a106a78d2 --- /dev/null +++ b/org.fortiss.tooling.common.ui/res/aquafx/aquafx-fire.css @@ -0,0 +1,147 @@ +.root{ + -dark-red: rgb(226.0, 61.0, 56.0); + -dark-red-transparent: rgb(226.0, 61.0, 56.0, 0.8); + -dark-red-armed: rgb(165.0, 64.0, 59.0); + -light-red: rgb(251.0, 207.0, 202.0); + -light-red-armed: rgb(187.0, 156.0, 152.0 ); + -orange-red: rgb(226.0, 90.0, 56.0); + -light-orange-red: rgb(251.0, 177.0, 175.0); + -light-orange-red-armed: rgb(222.0, 175.0, 174.0); + -lighter-red: rgb(251, 231, 228); + -lighter-orange-red: rgb(250, 216, 216); + + -fx-selected-row: -dark-red; + + -main-gradient-armed: linear-gradient(-light-red-armed 15.0%, -dark-red-armed 50.0%, + -dark-red-armed 50.0%, -light-orange-red-armed 100.0%); + + -main-gradient: linear-gradient(-light-red 15.0%, -dark-red 50.0%, + -dark-red 50.0%, -light-orange-red 100.0%); + + -fx-cell-hover-color: -light-red; +} + +.hyperlink { + -fx-text-fill: -dark-red; +} + +.button, +.toggle-button, +.radio-button, +.choice-box, +.slider, +.text-field, +.password-field, +.text-area, +.menu-button, +.split-menu-button, +.combo-box, +.color-picker, +.check-box { + -fx-aqua-inner-focus-color: -dark-red-transparent; + -fx-aqua-outer-focus-color: -dark-red; +} + +.button{ + -fx-aqua-start-color-1: -light-red; + -fx-aqua-start-color-2: -dark-red; + -fx-aqua-start-color-3: -dark-red; + -fx-aqua-start-color-4: -light-orange-red; + -fx-aqua-end-color-1: -lighter-red; + -fx-aqua-end-color-2: -light-orange-red; + -fx-aqua-end-color-3: -light-orange-red; + -fx-aqua-end-color-4: -lighter-orange-red; + -fx-aqua-armed-style:"linear-gradient(-light-red 0.0%, -dark-red-armed 100.0% ), + -main-gradient, + radial-gradient(focus-angle 180.0deg, focus-distance 95.0%, center 1.0% 50.0%, + radius 50.0%, -dark-red, transparent), + radial-gradient(focus-angle 0.0deg, focus-distance 95.0%, center 100.0% 50.0%, + radius 50.0%, -dark-red, transparent)"; +} + +.button:armed, .button:default:armed, .toggle-button:armed, .toggle-button:selected:armed{ + -fx-background-color: + linear-gradient(-light-red 0.0%, -dark-red-armed 100.0% ), + -main-gradient, + radial-gradient(focus-angle 180.0deg, focus-distance 95.0%, center 1.0% 50.0%, + radius 50.0%, -dark-red, transparent), + radial-gradient(focus-angle 0.0deg, focus-distance 95.0%, center 100.0% 50.0%, + radius 50.0%, -dark-red, transparent); +} + +.check-box:selected > .box, +.check-box:indeterminate > .box, +.radio-button:selected > .radio { + -fx-background-color: -main-gradient; +} + +.check-box:selected:armed > .box, +.radio-button:selected:armed > .radio { + -fx-background-color: -main-gradient-armed; +} + +.titled-pane:focused > .title > .arrow-button > .arrow { + -fx-effect: dropshadow(one-pass-box , -dark-red, 6.5, 0.8 , 0.0, 0.0); +} + + +/* Draws focus border around tableview */ +.table-view:focused, +.tree-table-view:focused, +.tree-view:focused, +.list-view:focused { + -fx-effect: dropshadow(one-pass-box , -dark-red-transparent, 8.0, 0.8 , 0.0, 0.0); +} + +.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, +.table-view:row-selection:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:focused:selected:hover, +.tree-table-view:row-selection:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:focused:selected:hover, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:focused:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected:hover, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:focused:selected:hover { + -fx-background-color: -fx-selected-row; +} + +/* When the list-cell is selected and focused */ +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:focused:selected, +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient( -light-orange-red, -dark-red-armed), + linear-gradient(-light-orange-red, -dark-red); +} + +/* When the ListView is _not_ focused, we show alternate selection colors */ +.list-cell:filled:selected:focused, +.list-cell:filled:selected { + -fx-background-color: linear-gradient(-light-orange-red-armed, -dark-red-armed), + linear-gradient(-light-orange-red-armed, -dark-red-armed); +} + +.list-view:horizontal:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient(to right, -light-orange-red, -dark-red-armed), + linear-gradient(to right, -light-orange-red, -dark-red); +} + +.list-view:horizontal > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient(to right, -light-orange-red-armed, -dark-red-armed), + linear-gradient(to right, -light-orange-red-armed, -dark-red-armed); +} + +.pagination > .pagination-control > .control-box > .bullet-button:selected { + -fx-background-color: -main-gradient; +} + +.progress-indicator > .determinate-indicator > .progress { + -fx-background-color: + rgb(208.0, 208.0, 208.0), + radial-gradient(center 50.0% 50.0%, radius 50.0%, -dark-red, -orange-red); +} + +.progress-bar { + -fx-aqua-determinate-image: "progress_fire.png"; +} + +.progress-bar:indeterminate { + -fx-aqua-indeterminate-color:-dark-red; +} diff --git a/org.fortiss.tooling.common.ui/res/aquafx/aquafx.css b/org.fortiss.tooling.common.ui/res/aquafx/aquafx.css new file mode 100644 index 0000000000000000000000000000000000000000..3c88b254955118403ccc785cd4abcc6e85957f64 --- /dev/null +++ b/org.fortiss.tooling.common.ui/res/aquafx/aquafx.css @@ -0,0 +1,3592 @@ + +.root { + + /* These are needed for Popup */ + -fx-background-color: inherit; + -fx-background-radius: inherit; + -fx-background-insets: inherit; + -fx-padding: inherit; + + + + /**************** + * * + * AQUA STUFF * + * * + ****************/ + -fx-text-base-color: black; + -fx-text-fill: -fx-text-base-color; + + /* background color for dialogs */ + -fx-background-color: rgb(237.0, 237.0, 237.0); + /* default font */ + -fx-font-family: 'lucida-grande'; + -fx-font-size: 13.0; + -fx-disabled-opacity: 0.6; + + /* The color to use in ListView/TreeView/TableView to indicate hover. */ + -fx-cell-hover-color: rgb(182.0, 214.0, 253.0); + + -toggle-selected-base:linear-gradient(rgb(94.0, 94.0, 94.0) 0.0%, rgb(120.0, 120.0, 120.0) 10.0%, + rgb(150.0, 150.0, 150.0) 85.0%, rgb(177.0, 177.0, 177.0) 98.0%, rgb(97.0, 97.0, 97.0) 100.0%); + + -toggle-armed-base:linear-gradient(rgb(87.0, 87.0, 87.0) 0.0%, rgb(113.0, 113.0, 113.0) 12.0%, + rgb(125.0, 125.0, 125.0) 87.0%, rgb(129.0, 129.0, 129.0) 87.1%, rgb(155.0, 155.0, 155.0) 100.0%); + + -toggle-shadow-armed: linear-gradient(to right, rgb(87.0, 87.0, 87.0, 0.5) 0.0%, transparent 3.0%, transparent 97.0%, rgb(87.0, 87.0, 87.0, 0.5) 100.0%); + -toggle-shadow: linear-gradient(to right, rgb(87.0, 87.0, 87.0, 0.3) 0.0%, transparent 3.0%, transparent 97.0%, rgb(87.0, 87.0, 87.0, 0.3) 100.0%); + + -choice-base: linear-gradient(rgb(255.0, 255.0, 255.0) 25.0%, rgb(243.0, 243.0, 243.0) 50.0%, rgb(236.0, 236.0, 236.0) 50.0%, rgb(243.0, 243.0, 243.0) 100.0% ); +} + + +.mnemonic-underline { + -fx-stroke: transparent; +} + +.text { + -fx-font-smoothing-type: lcd; +} + +/******************************************************************************* + * * + * Mac OS X Icons for AquaFX * + * * + ******************************************************************************/ + +.aqua-icon-left { + -fx-shape: "m 21.476623,22.412699 15.438495,-7.462538 0.01821,16.024043 -15.521311,-7.981785 z"; + -fx-background-color: rgb(66.0, 66.0, 66.0), linear-gradient(rgb(111.0, 111.0, 111.0), rgb(136.0, 136.0, 136.0)); + -fx-background-insets: 4.0 0.0 3.0 0.0, 4.0 0.0 3.0 0.0; + -fx-padding: 0.3em; + -fx-effect: innershadow( two-pass-box , rgba(0.0,0.0,0.0,0.6) , 1.5, 0.0 , 0.0 , 1.0 ); +} + +.aqua-icon-right { + -fx-shape: "M 36.862955,22.344745 21.42446,14.882207 21.40625,30.90625 36.927561,22.924465 z"; + -fx-background-color: rgb(66.0, 66.0, 66.0), linear-gradient(rgb(111.0, 111.0, 111.0), rgb(136.0, 136.0, 136.0)); + -fx-background-insets: 4.0 0.0 3.0 0.0, 4.0 0.0 3.0 0.0; + -fx-padding: 0.3em; + -fx-effect: innershadow( two-pass-box , rgba(0.0,0.0,0.0,0.6) , 1.5, 0.0 , 0.0 , 1.0 ); +} + +.icon-share-square { + -fx-shape: "m 69.611802,39.995004 -12.790177,-0.03535 c -0.374468,0.09213 -0.851422,-0.09846 -0.916102,0.84819 l 0.09397,19.084778 c 0.0038,0.294514 0.171796,0.58903 0.751643,0.883545 l 24.922598,0.03535 c 0.60304,0.01989 1.125882,-0.121103 1.233244,-1.095593 l 0,-6.231906 -2.842191,2.615281 -0.07049,2.026307 -21.035173,0.117794 0.04702,-15.326815 5.931191,-0.01181 c 0.676927,-1.728175 3.055251,-2.126767 4.674468,-2.90977 z"; + -fx-padding: 0.05em 0.5em 0.05em 0.5em; + -fx-background-color: rgb(141.0, 141.0, 141.0), rgb(141.0, 141.0, 141.0); + -fx-background-insets: 2.5 0.0 3.0 -1.0, 3.0 0.5 2.5 -0.5; + -fx-effect: innershadow( two-pass-box , rgba(0.0,0.0,0.0,0.2) , 1.5, 0.0 , 0.0 , 1.0 ); +} + +.icon-share-arrow { + -fx-shape: "m 77.952815,36.659844 0,5.466211 c -1.042987,-0.15108 -2.227346,-0.16083 -3.770872,0.188486 -7.625243,1.625677 -9.11216,5.851797 -10.275626,11.497892 2.499753,-3.261409 3.94321,-5.366894 10.46417,-6.691396 0.92597,-0.165446 1.527565,-0.493035 3.393784,-0.18849 l 0.188544,5.27772 8.673006,-7.256866 c 0.503982,-0.401547 0.217032,-0.715237 0,-1.036695 z"; + -fx-padding: 0.03em 0.5em 0.03em 0.3em; + -fx-background-color: rgb(114.0, 114.0, 114.0); + -fx-background-insets: 0.5 -2.0 5.5 3.0; + -fx-effect: innershadow(one-pass-box, rgba(0.0,0.0,0.0,0.8), 1.5, 0.0, -0.5, 1.0); +} + +.button:armed > .icon-left, +.button:armed > .icon-right { + -fx-background-color: rgb(66.0, 66.0, 66.0), linear-gradient(rgb(50.0, 50.0, 50.0), rgb(107.0, 107.0, 107.0)); +} + +.button.button-type-help { + -fx-border-radius: 1.0em; + -fx-background-radius: 1.0em, 1.0em; + -fx-padding: 0.0em 0.307692em -0.076923em 0.307692em; + -fx-font-weight: bold; + -fx-font-size: 16.0; +} + +.button.button-type-help:armed { + -fx-background-color: rgb(255.0, 255.0, 255.0), + linear-gradient(rgb(224.0, 224.0, 224.0) 25.0%, rgb(213.0, 213.0, 213.0) 50.0%, rgb(207.0, 207.0, 207.0) 50.0%, rgb(210.0, 210.0, 210.0) 100.0% ); +} + +.button.button-type-round-rect { + -fx-border-radius: 1.0em; + -fx-background-radius: 1.0em, 1.0em; +} + +/** + * SearchField (TextField) specials + */ +.text-field.textfield-type-search, +.text-field.textfield-type-round-rect { + -fx-background-radius: 0.8em, 0.8em, 0.8em, 0.8em, 0.8em; + -fx-border-radius: 0.8em, 0.8em; + -fx-padding: 0.166667em 1.5em 0.166667em 1.5em; + -fx-background-insets: 0.0 0.5 3.5 0.5, 0.5 1.0 4.0 1.0, 0.5 1.0 4.5 1.0, 0.5 1.0 4.0 1.0; +} + +.text-field.textfield-type-search{ + -fx-show-search-icon: true; +} + +.text-field.textfield-type-round-rect { + -fx-padding: 0.166667em 0.5em 0.166667em 0.5em; +} + +.icon-search{ + -fx-shape: "m 347.69086,521.53432 c -5.66845,0 -9.46303,3.70311 -9.40904,9.34654 0.0462,4.83336 2.77728,9.09947 9.36356,9.36942 1.89611,0.0777 3.71636,-0.61031 5.21024,-1.48298 l 5.84627,6.2327 3.07686,-2.95744 -5.90318,-6.0367 c 1.63819,-2.63376 1.49391,-5.24942 1.31808,-6.58272 -0.73998,-5.61127 -5.42829,-8.03363 -9.50279,-7.88877 z m -0.17048,3.30413 c 4.04899,0.0153 6.11399,3.03614 6.28683,5.56794 0,2.76781 -2.00027,6.12608 -6.17885,6.18457 -3.07717,0.0431 -5.8923,-2.66304 -5.9089,-5.80664 -0.0166,-3.14754 2.30739,-5.67592 5.80092,-5.94587 z"; + -fx-background-color: rgb(116.0, 116.0, 116.0); + -fx-scale-shape: true; + -fx-background-insets: 4.5 6.0 8.0 6.0; +} + +.icon-delete{ + -fx-shape: "m 310.73434,226.07989 c -7.6712,0 -13.90445,6.23325 -13.90445,13.90445 0,7.67119 6.23325,13.87327 13.90445,13.87327 7.67119,0 13.87327,-6.20208 13.87327,-13.87327 l 0,-0.0935 c -0.0471,-7.63764 -6.23552,-13.81097 -13.87327,-13.81097 z m -4.67638,7.17045 4.86344,4.89462 4.86344,-4.89462 1.83937,1.83938 -4.86344,4.89462 4.86344,4.86344 -1.83937,1.83938 -4.86344,-4.89462 -4.86344,4.89462 -1.80821,-1.83938 4.86344,-4.86344 -4.86344,-4.89462 1.80821,-1.83938 z"; + -fx-background-color: rgb(185.0, 185.0, 185.0); + -fx-scale-shape: true; + -fx-backgronud-insets: 0.0; +} + +/******************************************************************************* + * * + * GroupBox * + * This is not a Control. The class should be applied to Layouts, * + * to achieve the GroupBox-Effect, which is used in Mac OS X. * + * (See TabPane) * + * * + ******************************************************************************/ +.aqua-group-box { + -fx-padding: 5.0; + -fx-border-width: 0.5; + -fx-border-radius: 6.0; + -fx-border-insets: 0.0; + -fx-background-insets: 0.0; + -fx-background-radius: 6.0; + -fx-border-color: rgb(193.0, 193.0, 193.0); + -fx-background-color: rgb(227.0, 227.0, 227.0), + linear-gradient(to right, rgb(168.0, 168.0, 168.0, 0.5) 0.0%, transparent 0.4%, transparent 99.6%, rgb(168.0, 168.0, 168.0, 0.5)); + -fx-effect: innershadow(one-pass-box, rgb(168.0, 168.0, 168.0, 0.6), 4.0, 0.6, 0.0, 2.0); +} + +/******************************************************************************* + * * + * Size variants of Controls * + * see https://developer.apple.com/library/mac/#technotes/tn2007/tn2196.html * + * * + ******************************************************************************/ +.size-variant-small { + -fx-font-size: 11.0; +} + +.size-variant-mini { + -fx-font-size: 9.0; +} + +.button.size-variant-small, +.toggle-button.size-variant-small { + -fx-border-radius: 3.0; + -fx-background-radius: 3.0, 3.0; + -fx-padding: 0.12em 0.85em 0.05em 0.85em; +} + +.button.size-variant-mini, +.toggle-button.size-variant-mini { + -fx-border-radius: 2.0; + -fx-padding: 0.12em 0.85em 0.05em 0.85em; +} + +.check-box.size-variant-small > .box { + -fx-padding: 5.0; + -fx-border-radius: 3.0; + -fx-background-radius: 3.0, 3.0; +} + +.check-box.size-variant-small > .box > .mark{ + -fx-background-insets: -3.0 -1.5 3.0 1.5; +} + +.check-box:indeterminate.size-variant-small > .box > .mark { + -fx-background-insets: -0.5 1.5 0.5 0.5; +} + +.check-box.size-variant-mini > .box { + -fx-padding: 4.0; + -fx-border-radius: 2.0; + -fx-background-radius: 2.0, 2.0; +} + +.check-box.size-variant-mini > .box > .mark{ + -fx-background-insets: -1.5 0.0 4.0 2.5; +} + +.check-box:indeterminate.size-variant-mini > .box > .mark { + -fx-background-insets: -0.25 2.0 0.75 1.0; +} + +.radio-button.size-variant-small > .radio { + -fx-padding: 2.5; +} + +.radio-button.size-variant-mini > .radio { + -fx-padding: 1.5; +} + +.combo-box.size-variant-small > .list-cell { + -fx-border-radius: 3.0 0.0 0.0 3.0; + -fx-background-radius: 3.0 0.0 0.0 3.0, 3.0 0.0 0.0 3.0; +} + +.combo-box-base.size-variant-small > .arrow-button { + -fx-background-radius: 0.0 3.0 3.0 0.0, 0.0 2.5 2.5 0.0, 0.0 2.5 2.5 0.0; + -fx-border-radius: 0.0 3.0 3.0 0.0; +} + +.combo-box.size-variant-mini > .list-cell { + -fx-border-radius: 2.0 0.0 0.0 2.0; + -fx-background-radius: 2.0 0.0 0.0 2.0, 2.0 0.0 0.0 2.0; +} + +.combo-box-base.size-variant-mini > .arrow-button { + -fx-background-radius: 0.0 2.0 2.0 0.0, 0.0 1.5 1.5 0.0, 0.0 1.5 1.5 0.0; + -fx-border-radius: 0.0 2.0 2.0 0.0; +} + +.choice-box.size-variant-small { + -fx-border-radius: 3.0; + -fx-background-radius: 3.0, 3.0; +} + + +.choice-box.size-variant-mini { + -fx-border-radius: 2.0; + -fx-background-radius: 2.0, 2.0; +} + +.slider.alternative-thumb.size-variant-small > .thumb, +.slider.alternative-thumb.size-variant-mini > .thumb { + -fx-background-insets: 0.5 0.0 -1.5 0.0; + -fx-border-insets: 0.5 0.0 -1.5 0.0; + -fx-scale-shape: true; +} + +/******************************************************************************* + * * + * Label * + * * + ******************************************************************************/ + +.label { + -fx-text-fill: -fx-text-base-color; +} + +.label:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.label:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + + + +/******************************************************************************* + * * + * Button & ToggleButton * + * * + ******************************************************************************/ + +.button{ + -fx-aqua-start-color-1: rgb(183.0, 206.0, 238.0); + -fx-aqua-start-color-2: rgb(142.0, 188.0, 237.0); + -fx-aqua-start-color-3: rgb(114.0, 174.0, 236.0); + -fx-aqua-start-color-4: rgb(178, 218.0, 242.0); + -fx-aqua-end-color-1: rgb(203.0, 243.0, 254.0); + -fx-aqua-end-color-2: rgb(166.0, 211.0, 248.0); + -fx-aqua-end-color-3: rgb(137.0, 198.0, 248.0); + -fx-aqua-end-color-4: rgb(203.0, 243.0, 254.0); + -fx-aqua-armed-style:"-fx-background-color: linear-gradient(rgb(190, 214, 237) 0%, rgb(178, 213, 237) 100% ), linear-gradient(rgb(165, 193, 238) 0%, rgb(108, 161, 231) 50%, rgb(74, 138, 217) 50%, rgb(105, 167, 236) 75%, rgb(152, 201, 238) 100%), radial-gradient(focus-angle 180deg, focus-distance 95%, center 1% 50%, radius 50%, #78b0ee, transparent), radial-gradient(focus-angle 0deg, focus-distance 95%, center 100% 50%, radius 50%, #78b0ee, transparent); -fx-background-insets: 0, 0, 1 1 1 2, 1 2 1 1; -fx-background-radius: 4, 4, 4, 4; -fx-border-color: rgb(100, 103, 124);"; +} + +.button, .toggle-button{ + /* gradients for glossy-aqua-effect */ + -fx-background-color: rgb(255.0, 255.0, 255.0), + linear-gradient(rgb(255.0, 255.0, 255.0) 25.0%, rgb(243.0, 243.0, 243.0) 50.0%, rgb(236.0, 236.0, 236.0) 50.0%, rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-background-insets: 0.0, 1.0; + -fx-background-radius: 4.0, 4.0; + -fx-border-radius: 4.0; + -fx-border-width: 0.5; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0); + -fx-padding: 0.08em 0.85em 0.09em 0.85em; + + -fx-text-fill: -fx-text-base-color; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +.button:armed, .button:default:armed{ + -fx-background-color: + linear-gradient(rgb(190.0, 214.0, 237.0) 0.0%, rgb(178.0, 213.0, 237.0) 100.0% ), + linear-gradient(rgb(165.0, 193.0, 238.0) 0.0%, rgb(108.0, 161.0, 231.0) 50.0%, + rgb(74.0, 138.0, 217.0) 50.0%, rgb(105.0, 167.0, 236.0) 75.0%, rgb(152.0, 201.0, 238.0) 100.0% + ), + radial-gradient(focus-angle 180.0deg, focus-distance 95.0%, center 1.0% 50.0%, + radius 50.0%, #78b0ee, transparent), + radial-gradient(focus-angle 0.0deg, focus-distance 95.0%, center 100.0% 50.0%, + radius 50.0%, #78b0ee, transparent); + -fx-background-insets: 0.0, 0.0, 1.0 1.0 1.0 2.0, 1.0 2.0 1.0 1.0; + -fx-background-radius: 4.0, 4.0, 4.0, 4.0; + -fx-border-color: rgb(100.0, 103.0, 124.0); +} + + +.toggle-button:selected{ + -fx-background-color: rgb(97.0, 97.0, 97.0), -toggle-selected-base, -toggle-shadow; + -fx-background-insets:0.0, 1.0 1.0 0.5 1.0, 1.0; + -fx-text-fill: white; + -fx-effect:innershadow(one-pass-box, rgb(94.0, 94.0, 94.0, 0.5), 5.5, 0.7, 0.0, 2.0); +} + +.toggle-button:armed, .toggle-button:selected:armed{ + -fx-background-color: rgb(87.0, 87.0, 87.0), -toggle-armed-base, -toggle-shadow-armed; + -fx-background-insets:0.0, 1.0 1.0 0.0 1.0, 1.0; + -fx-text-fill: white; +} + + +.button:default { + -fx-border-color: rgb(100.0, 103.0, 124.0); +} + +.button:disabled, .toggle-button:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.button:show-mnemonics > .mnemonic-underline, .toggle-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + +/*********** PILL BUTTONS *****************************************************/ + +.button.left-pill, +.toggle-button.left-pill { + -fx-background-radius: 4.0 0.0 0.0 4.0, 4.0 0.0 0.0 4.0; + -fx-background-insets: 0.0, 1.0 0.0 0.0 1.0; + -fx-border-radius: 4.0 0.0 0.0 4.0; + -fx-border-width:0.5 0.0 0.5 0.5; +} + +.button.center-pill, +.toggle-button.center-pill { + -fx-background-radius: 0.0, 0.0; + -fx-background-insets: 0.0, 1.0 0.0 0.0 0.0; + -fx-border-radius: 0.0; + -fx-border-width:0.5 0.0 0.5 1.0; + -fx-border-style: solid solid solid segments(15.0, 2.5) phase 15.0 ; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) + rgb(203.0, 203.0, 203.0); +} + +.button.right-pill, +.toggle-button.right-pill { + -fx-background-radius: 0.0 4.0 4.0 0.0, 0.0 4.0 4.0 0.0; + -fx-background-insets: 0.0, 1.0 1.0 0.0 0.0; + -fx-border-radius: 0.0 4.0 4.0 0.0; + -fx-border-width:0.5 0.5 0.5 1.0; + -fx-border-style: solid solid solid segments(15.0, 2.25) phase 15.0 centered; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) + rgb(203.0, 203.0, 203.0); +} + +.button.center-pill.neighbor, +.toggle-button.center-pill.neighbor{ + -fx-border-style: solid solid solid solid; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) + rgb(74.0, 74.0, 74.0); +} + +.button.right-pill.neighbor, +.toggle-button.right-pill.neighbor { + -fx-border-style: solid solid solid solid centered; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) + rgb(74.0, 74.0, 74.0); +} + +.button.center-pill:armed, +.toggle-button.center-pill:selected, .toggle-button.center-pill:selected:armed { + -fx-border-width:0.5 0.0 0.5 1.0; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(74.0, 74.0, 74.0) rgb(129.0, 129.0, 129.0) + rgb(74.0, 74.0, 74.0); + -fx-border-style: solid solid solid solid; +} + +.button.right-pill:armed, +.toggle-button.right-pill:selected, .toggle-button.right-pill:selected:armed { + -fx-border-width:0.5 0.5 0.5 1.0; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) + rgb(74.0, 74.0, 74.0); + -fx-border-style: solid solid solid solid centered; +} + +/******************************************************************************* + * * + * RadioButton * + * * + ******************************************************************************/ + +.radio-button { + -fx-label-padding: 0.0em 0.0em 0.0em 0.384615em; + -fx-text-fill: -fx-text-base-color; + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +.radio-button > .radio, +.radio-button > .radio.unfocused { + -fx-border-width: 0.5; + -fx-border-insets: 0.0 0.0 1.0 0.0; + -fx-border-color: rgb(129.0, 129.0, 129.0); + -fx-border-radius: 1.0em; + -fx-background-color: rgb(250.0, 250.0, 250.0), + linear-gradient( + rgb(255.0, 255.0, 255.0) 0.0%, rgb(253.0,253.0,253.0) 25.0%, + rgb(244.0, 244.0, 244.0) 50.0%, rgb(236.0, 236.0, 236.0) 51.0%, + rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-background-insets: 0.0 0.0 1.0 0.0, 1.0 0.0 2.0 0.0; + -fx-background-radius: 1.0em; + -fx-padding: 0.269231em; +} + +.radio-button:armed > .radio { + -fx-background-color: rgb(250.0, 250.0, 250.0), + linear-gradient( + rgb(224.0, 224.0, 224.0) 0.0%, rgb(214.0, 214.0, 214.0) 50.0%, + rgb(207.0, 207.0, 207.0) 51.0%, rgb(208.0, 208.0, 208.0) 100.0% ); + -fx-background-radius: 1.0em, 1.0em; +} + +.radio-button:selected > .radio { + -fx-border-color: linear-gradient( + rgb(100.0, 103.0, 124.0) 0.0%, rgb(92.0, 94.0, 116.0) 100.0%); + -fx-background-color: + linear-gradient( + rgb(228.0, 250.0, 255.0) 0.0%, #91bdee 50.0%, + #78b0ee 51.0%, rgb(228.0, 250.0, 255.0) 100.0% ); + -fx-background-insets: 0.0 0.0 1.0 0.0; + -fx-background-radius: 1.0em; +} + +.radio-button:selected:disabled > .radio { + -fx-background-color: linear-gradient( + rgb(255.0, 255.0, 255.0) 0.0%, rgb(253.0,253.0,253.0) 25.0%, + rgb(244.0, 244.0, 244.0) 50.0%, rgb(236.0, 236.0, 236.0) 51.0%, + rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-background-insets: 0.0 0.0 1.0 0.0; + -fx-background-radius: 1.0em; +} + +.radio-button:selected:armed > .radio{ + -fx-background-color: + linear-gradient( + rgb(151.0, 199.0, 225.0) 0.0%, rgb(103.0, 159.0, 222.0) 50.0%, + rgb(70.0, 144.0, 227.0) 50.0%, rgb(119.0, 178.0, 233.0) 82.0%, rgb(165.0, 205.0, 237.0) 100.0% ); + -fx-background-insets: 0.0 0.0 1.0 0.0; + -fx-background-radius: 1.0em; +} + +.radio-button > .radio > .dot { + -fx-background-color: transparent; + -fx-background-insets: 1.0; + -fx-background-radius: 1.0em; + -fx-padding: 0.25em; +} + +.radio-button:selected > .radio > .dot { + -fx-background-color: black; + -fx-effect: dropshadow(one-pass-box, rgb(255.0, 255.0, 255.0, 0.8), 1.0, 0.0 , 0.0 , 1.0); +} + +.radio-button:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.radio-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + +/******************************************************************************* + * * + * CheckBox * + * * + ******************************************************************************/ + +.check-box { + -fx-label-padding: 0.0em 0.0em 0.0em 0.384615em; + -fx-text-fill: -fx-text-base-color; + + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +.check-box > .box, +.check-box > .box.unfocused, +.check-box:disabled > .box { + -fx-border-radius: 2.5; + -fx-border-width: 0.5; + -fx-border-insets: -0.5 0.0 0.5 0.0; + -fx-border-color: rgb(129.0, 129.0, 129.0); + -fx-background-color: rgb(250.0, 250.0, 250.0), + linear-gradient( + rgb(255.0, 255.0, 255.0) 0.0%, rgb(253.0,253.0,253.0) 25.0%, + rgb(244.0, 244.0, 244.0) 50.0%, rgb(236.0, 236.0, 236.0) 51.0%, + rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-background-insets: -0.5 0.0 0.5 0.0, 0.5 1.0 1.5 1.0; + -fx-background-radius: 2.5, 2.5; + -fx-padding: 0.461538em; +} + +.check-box:focused > .box { + -fx-border-color: rgb(104.0, 155.0, 201.0); +} + +.check-box:selected > .box, +.check-box:indeterminate > .box { + -fx-border-color: linear-gradient(rgb(100.0, 103.0, 124.0) 0.0%, rgb(92.0, 94.0, 116.0) 100.0%); + -fx-background-color: + linear-gradient( + rgb(228.0, 250.0, 255.0) 0.0%, #91bdee 50.0%, #78b0ee 51.0%, + rgb(228.0, 250.0, 255.0) 100.0% ); + -fx-background-insets: -0.5 0.0 0.5 0.0; +} + +.check-box:selected:disabled > .box, +.check-box:indeterminate:disabled > .box { + -fx-border-color: rgb(129.0, 129.0, 129.0); + -fx-background-color: + linear-gradient( + rgb(255.0, 255.0, 255.0) 0.0%, rgb(253.0,253.0,253.0) 25.0%, + rgb(244.0, 244.0, 244.0) 50.0%, rgb(236.0, 236.0, 236.0) 51.0%, + rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-background-insets: -0.5 0.0 0.5 0.0; +} + +.check-box:armed > .box { + -fx-background-color: rgb(250.0, 250.0, 250.0), + linear-gradient( + rgb(224.0, 224.0, 224.0) 0.0%, rgb(214.0, 214.0, 214.0) 50.0%, + rgb(207.0, 207.0, 207.0) 51.0%, rgb(208.0, 208.0, 208.0) 100.0% ); + -fx-background-insets: -0.5 0.0 0.5 0.0, 0.5 1.0 1.5 1.0; + -fx-background-radius: 2.5, 2.5; +} + +.check-box:selected:armed > .box { + -fx-background-color: + linear-gradient( + rgb(151.0, 199.0, 225.0) 0.0%, rgb(103.0, 159.0, 222.0) 50.0%, + rgb(70.0, 144.0, 227.0) 50.0%, rgb(119.0, 178.0, 233.0) 82.0%, rgb(165.0, 205.0, 237.0) 100.0% ); + -fx-background-insets: -0.5 0.0 0.5 0.0; + -fx-background-radius: 2.5; +} + + +.check-box > .box > .mark, +.check-box:disabled > .box > .mark { + -fx-effect: dropshadow(one-pass-box, rgb(255.0, 255.0, 255.0, 0.8), 0.0, 0.0 , -1.0 , 1.0); + -fx-background-color: transparent; + -fx-background-insets: -3.5 -2.5 2.5 1.0; + -fx-shape: "m 18.174523,1027.137 c -0.18077,-0.4575 -0.184364,-0.8913 0.115901,-1.1721 0.300265,-0.2809 0.836622,-0.3601 1.288422,-0.041 0.4518,0.3191 2.020453,2.9316 2.020453,2.9316 l 5.41194,-8.0232 c -4e-6,0 0.516257,-0.6671 1.248682,-0.3099 0.648831,0.3165 0.559153,1.0373 0.559153,1.0373 0,0 -5.940433,9.3556 -6.15501,9.6287 -0.214577,0.273 -1.595078,0.2481 -1.817995,-0.027 -0.222917,-0.2751 -2.490777,-3.567 -2.671546,-4.0244 z"; + -fx-scale-shape: false; +} + +.check-box:indeterminate > .box > .mark { + -fx-effect: dropshadow(one-pass-box, rgb(255.0, 255.0, 255.0, 0.8), 1.0, 0.0 , 0.0 , 1.5); + -fx-background-color: -fx-text-base-color; + -fx-background-insets: 0.0 0.5 0.0 -0.5; + -fx-shape: "M0,0H8V2H0Z"; + -fx-scale-shape: false; +} + +.check-box:selected > .box > .mark { + -fx-background-color: -fx-text-base-color; +} + +.check-box:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.check-box:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + +/******************************************************************************* + * * + * Hyperlink * + * * + ******************************************************************************/ + +.hyperlink { + -fx-cursor: hand; + -fx-content-display: LEFT; + -fx-text-fill: rgb(94.0, 162.0, 218.0); +} + +.hyperlink:focused, .hyperlink:hover { + -fx-underline: true; +} + +.hyperlink:disabled { + -fx-text-fill: -fx-text-base-color; + -fx-opacity: -fx-disabled-opacity; +} + +.hyperlink:show-mnemonics > .mnemonic-underline { + -fx-text-fill: -fx-text-base-color; +} + + +/******************************************************************************* + * * + * PopupMenu * + * * + ******************************************************************************/ + +.context-menu { + -fx-border-color: rgb(209.0, 209.0, 209.0, 0.4); + -fx-border-width: 0.5; + -fx-border-radius: 6.0; + -fx-background-color: rgb(255.0, 255.0, 255.0, 0.95); + -fx-background-insets: 0.0; + -fx-background-radius: 6.0; + -fx-padding: 0.25em 0.0em 0.25em 0.0em; + -fx-effect: dropshadow(three-pass-box, rgba(0.0,0.0,0.0,0.6), 8.0, 0.0, 0.0, 0.0 ); +} + +.context-menu .button, +.context-menu .toggle-button, +.context-menu .toggle-button:selected{ + -fx-background-color: transparent; + -fx-border-color: transparent; + -fx-text-fill: -fx-text-base-color; + -fx-effect: null; +} + +.context-menu > .separator { + -fx-padding: 0.0em 0.333333em 0.0em 0.0em; +} + +.context-menu > .scroll-arrow { + -fx-padding: 0.416667em 0.416667em 0.416667em 0.416667em; + -fx-background-color: transparent; +} + +.context-menu:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + + +/******************************************************************************* + * * + * Menu * + * * + ******************************************************************************/ + +.menu { + -fx-background-color: transparent; + -fx-padding: 0.333333em 0.666667em 0.333333em 0.666667em; +} + +.menu:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.menu:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + +/* This hides the down arrow that would show on a menu placed in a menubar */ +.menu-bar > .container > .menu > .arrow-button > .arrow { + -fx-padding: 0.0; + -fx-background-color: transparent; + -fx-shape: null; +} + +.menu-bar > .container > .menu > .arrow-button { + -fx-padding: 0.0; +} + +.menu > .arrow { + -fx-background-color: -fx-text-base-color; + -fx-shape: "M0,-4L4,0L0,4Z"; + -fx-scale-shape: false; +} + +.menu:focused:showing > .arrow, .menu:hover:showing > .arrow, .menu:focused > .arrow, .menu:showing > .arrow { + -fx-background-color: white; +} + +.menu-up-arrow { + -fx-padding: 0.666667em 0.416667em 0.0em 0.416667em; + -fx-background-color: rgb(71.0, 71.0, 71.0); + -fx-shape: "M0 1 L1 1 L.5 0 Z"; + -fx-effect: innershadow( two-pass-box , rgba(0.0,0.0,0.0,0.6) , 4.0, 0.0 , 0.0 , 1.0 ); +} + +.menu-down-arrow { + -fx-background-color: rgb(71.0, 71.0, 71.0); + -fx-padding: 0.666667em 0.416667em 0.0em 0.416667em; + -fx-shape: "M0 0 L1 0 L.5 1 Z"; + -fx-effect: innershadow( two-pass-box , rgba(0.0,0.0,0.0,0.6) , 4.0, 0.0 , 0.0 , 1.0 ); +} + + +/******************************************************************************* + * * + * MenuBar * + * * + ******************************************************************************/ + +.menu-bar { + -fx-padding: 0.0em 0.666667em 0.0em 0.666667em; /* 0 8 0 8 */ + -fx-spacing: 0.166667em; + -fx-background-color: + linear-gradient(rgb(245.0, 245.0, 245.0), rgb(185.0, 185.0, 185.0)); + -fx-background-insets:0.0; + -fx-border-width: 0.5; + -fx-border-insets:-0.5, 0.0 ; + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); + + /* Nothing more needed for Mac OS X than the following property! + * All other definitions kept from caspian, to ensure, that MenuBar + * is shown properly on non-mac systems. + */ + -fx-use-system-menu-bar: true; +} + +.menu-bar > .container > .menu-button { + -fx-background-radius: 0.0; + -fx-background-color: transparent; + -fx-background-insets: 0.0; +} + +.menu-bar > .container > .menu-button > .label { + -fx-padding: 0.333em 0.5em 0.333em 0.5em; +} + +.menu-bar > .container > .menu-button:hover, .menu-bar > .container > .menu-button:focused, .menu-bar > .container > .menu-button:showing { + -fx-background: #0093ff; + -fx-background-color: linear-gradient(to right, rgb(233.0, 233.0, 233.0), rgb(173.0, 173.0, 173.0) 99.0%, rgb(233.0, 233.0, 233.0)); + -fx-text-fill: -fx-text-base-color; +} + +.menu-bar > .container > .menu-button:hover { + -fx-background: #0093ff; + -fx-background-color: linear-gradient(to right, rgb(233.0, 233.0, 233.0), rgb(173.0, 173.0, 173.0) 99.0%, rgb(233.0, 233.0, 233.0)); + -fx-text-fill: -fx-text-base-color; +} + +.menu-bar:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + +/******************************************************************************* + * * + * MenuItem * + * * + ******************************************************************************/ + +.menu-item { + -fx-background-color: transparent; + -fx-background-insets:0.0; + -fx-padding:0.0em 0.0em 0.333333em 0.0em; + -fx-border-width: 1.0 0.0 1.0 0.0; + -fx-border-color:transparent; +} + +.menu-item > .left-container { + -fx-padding: 0.0em 0.0em 0.0em 0.4em; +} + +.menu-item > .graphic-container { + -fx-background-color: blue; + -fx-padding: 0.0em 0.833em 0.0em 0.0em; +} + +.menu-item >.label { + -fx-background-color: transparent; + -fx-padding: -0.073333em 2.0em 0.0em 0.33333em ; + -fx-text-fill: -fx-text-base-color; +} + +.menu-item:disabled > .label { + -fx-opacity: -fx-disabled-opacity; +} + +.menu-item:focused { + -fx-border-width: 1.0 0.0 1.0 0.0; + -fx-border-color: rgb(90.0, 130.0, 235.0) transparent rgb(23.0, 89.0, 231.0) transparent; + -fx-background-color: linear-gradient(rgb(101.0, 140.0, 245.0) 0.0%, rgb(41.0, 103.0, 243.0) 100.0%); +} + +.menu-item:focused:disabled { + -fx-border-color: transparent; + -fx-background-color:transparent; + -fx-text-fill: -fx-text-base-color; + } + +.menu-item:focused > .label { + -fx-text-fill: white; +} + +.menu-item:focused:disabled > .label { + -fx-text-fill: -fx-text-base-color; +} + +.menu-item > .right-container { + -fx-padding: 0.0em 0.833333em 0.0em 0.0em; +} + +.radio-menu-item:checked > .left-container > .radio, +.check-menu-item:checked > .left-container > .check { + -fx-background-color: -fx-text-base-color; + -fx-shape: "m 269.9,233.66286 c 0.15,-0.12 1.97,1.7 2.54,3.1 2.3,-7.33 4.09,-9.1 6.79,-12.1 1.5,-0.25 2.4,-0.27 4.36,0.11 -7.1,5.8 -8.8,16.7 -9.9,17.8 l -0.75,0.02 c 0,0 -2.36,-5.24 -5.6,-7.38 -0.27,-0.17 0.02,-1.5 -0.2,-1.6 z"; + -fx-padding: 0.68em 0.68em 0.0em 0.0em; +} + +.radio-menu-item > .left-container > .radio, +.check-menu-item > .left-container > .check { + -fx-background-color: transparent; + -fx-shape: "m 269.9,233.66286 c 0.15,-0.12 1.97,1.7 2.54,3.1 2.3,-7.33 4.09,-9.1 6.79,-12.1 1.5,-0.25 2.4,-0.27 4.36,0.11 -7.1,5.8 -8.8,16.7 -9.9,17.8 l -0.75,0.02 c 0,0 -2.36,-5.24 -5.6,-7.38 -0.27,-0.17 0.02,-1.5 -0.2,-1.6 z"; + -fx-padding: 0.68em 0.68em 0.0em 0.0em; +} + +.radio-menu-item:focused:checked > .left-container > .radio, +.check-menu-item:focused:checked > .left-container > .check { + -fx-background-color: white; +} + +.menu > .right-container > .arrow { + -fx-padding: 0.38em 0.3em 0.38em 0.267em; + -fx-background-color: rgb(64.0, 64.0, 64.0); + -fx-shape: "M0,-4L4,0L0,4Z"; +} + +.menu:selected > .right-container > .arrow { + -fx-background-color: white; +} + +.menu-item:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + +/******************************************************************************* + * * + * ChoiceBox * + * * + ******************************************************************************/ + +.choice-box { + -fx-border-radius: 4.0; + -fx-border-width: 0.5; + -fx-border-insets: 0.5; + -fx-border-color: rgb(207.0, 207.0, 207.0); + + -fx-background-color: linear-gradient(rgb(147.0, 147.0, 147.0) 0.0%, rgb(127.0, 127.0, 127.0) 100.0%), -choice-base; + -fx-background-insets: 1.0, 1.5; + -fx-background-radius: 3.5, 3.5; + -fx-padding: 0.12em 0.0em 0.12em 0.0em; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +.choice-box > .label { + -fx-padding: 0.0em 0.333333em 0.0em 0.666667em; + -fx-text-fill: -fx-text-base-color; +} + +.choice-box > .open-button { + -fx-background-color: null; + -fx-padding: 0.0em 0.5em 0.0em 0.5em; +} + +.choice-box > .open-button > .arrow { + -fx-background-color: rgb(110.0, 110.0, 110.0, 0.5), rgb(71.0, 71.0, 71.0); + -fx-background-insets: -0.5 0.0 0.5 0.0, 0.0; + -fx-padding: 0.4em 0.166667em 0.4em 0.166667em; + -fx-shape: "m 4.5,3.03125 -3.5,5.5 7,0 z m -3.5,10.875 3.5,5.5 3.5,-5.5 z"; +} + +.choice-box:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.choice-box .label:disabled{ + -fx-opacity: 1.0; +} + + +/******************************************************************************* + * * + * Slider * + * * + ******************************************************************************/ +.slider{ + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +.slider > .thumb { + -fx-border-width: 0.5; + -fx-border-color: rgb(87.0, 87.0, 87.0, 0.8); + -fx-border-radius: 1.0em; + -fx-background-color: rgb(250.0, 250.0, 250.0), + linear-gradient( + rgb(255.0, 255.0, 255.0) 0.0%, rgb(253.0,253.0,253.0) 25.0%, + rgb(244.0, 244.0, 244.0) 50.0%, rgb(236.0, 236.0, 236.0) 51.0%, + rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-background-insets: 0.0, 1.0; + -fx-background-radius: 1.0em, 1.0em; + -fx-padding: 0.566667em; + -fx-effect: dropshadow(one-pass-box, rgb(192.0, 192.0, 198.0), 2.0, 0.1 , 0.0, 0.0); +} + +.slider.alternative-thumb > .thumb { + -fx-shape: "M 9.1891716,18.913113 C 14.774865,12.498835 16.85604,11.01737 16.85604,9.11662 l 0,-6.093377 C 16.761936,1.8707681 16.193692,0.7655617 14.833202,0.54472254 13.971391,0.50911 2.5515364,0.50911 2.5515364,0.50911 1.0462919,0.75839775 0.54832274,1.9760737 0.5127102,3.023243 l 0,6.093377 c 0,1.975806 2.313591,3.725456 7.8990521,9.829757 0.055726,0.0609 0.6485114,0.11986 0.7774093,-0.03326 z"; + -fx-background-insets: 4.0 0.0 -2.5 0.0; + -fx-border-insets: 4.0 0.0 -2.5 0.0; + -fx-scale-shape: false; + -fx-background-color: rgb(250.0, 250.0, 250.0), + linear-gradient( + rgb(255.0, 255.0, 255.0) 0.0%, rgb(253.0,253.0,253.0) 15.0%, + rgb(244.0, 244.0, 244.0) 34.0%, rgb(236.0, 236.0, 236.0) 35.0%, + rgb(243.0, 243.0, 243.0) 100.0% ); +} + +.slider.alternative-thumb:vertical > .thumb { + -fx-rotate: 270.0; + -fx-background-insets: 4.0 0.0 -2.5 0.0; + -fx-border-insets: 4.0 0.0 -2.5 0.0; + -fx-background-color: rgb(250.0, 250.0, 250.0), + linear-gradient(to left, + rgb(255.0, 255.0, 255.0) 0.0%, rgb(253.0,253.0,253.0) 25.0%, + rgb(244.0, 244.0, 244.0) 50.0%, rgb(236.0, 236.0, 236.0) 51.0%, + rgb(243.0, 243.0, 243.0) 100.0% ); +} + +.slider.alternative-thumb .thumb:pressed { + -fx-background-color: linear-gradient( + rgb(224.0, 224.0, 224.0) 0.0%, rgb(214.0, 214.0, 214.0) 50.0%, + rgb(207.0, 207.0, 207.0) 51.0%, rgb(208.0, 208.0, 208.0) 95.0%, + rgb(220.0, 220.0, 220.0) 97.5%, rgb(208.0, 208.0, 208.0) 100.0%); +} + +/*.slider:focused > .thumb { +TODO: effect-chaining!!! +} */ + +.slider .thumb:pressed { + -fx-background-color: linear-gradient( + rgb(224.0, 224.0, 224.0) 0.0%, rgb(214.0, 214.0, 214.0) 50.0%, + rgb(207.0, 207.0, 207.0) 51.0%, rgb(208.0, 208.0, 208.0) 95.0%, + rgb(220.0, 220.0, 220.0) 97.5%, rgb(208.0, 208.0, 208.0) 100.0%); + -fx-background-insets: 0.0; + -fx-background-radius: 1.0em; +} + +.slider > .track { + -fx-background-color: + linear-gradient(to bottom, rgb(147.0, 147.0, 147.0), rgb(217.0, 217.0, 217.0)); + -fx-background-radius: 2.5; + -fx-padding: 0.15em; + + -fx-border-color: linear-gradient(to bottom, rgb(111.0, 111.0, 111.0), rgb(171.0, 171.0, 171.0)); + -fx-border-width: 0.5; + -fx-border-radius: 2.5; +} + +.slider:vertical > .track { + -fx-background-color: + linear-gradient(to right, rgb(147.0, 147.0, 147.0), rgb(217.0, 217.0, 217.0)); + -fx-border-color: linear-gradient(to right, rgb(111.0, 111.0, 111.0), rgb(171.0, 171.0, 171.0)); +} + +.slider > .axis { + -fx-tick-label-gap: 4.0px; + -fx-tick-label-fill: -fx-text-base-color; + -fx-tick-length: 4.0px; + -fx-minor-tick-length: 5.0px; + -fx-border-color: null; +} + +.slider > .axis { + -fx-translate-y: 0.461538em; + -fx-translate-x: 0.0em; +} + +.slider:vertical > .axis { + -fx-translate-x: 0.461538em; + -fx-translate-y: 0.0em; +} + +.slider > .axis > .axis-tick-mark { + /*same gap to track for major- and minor tickmarks */ + -fx-translate-y: 0.076923em; + -fx-translate-x: 0.0em; +} +.slider:vertical > .axis > .axis-tick-mark { + /*same gap to track for major- and minor tickmarks */ + -fx-translate-x: 0.076923em; + -fx-translate-y: 0.0em; +} + +.slider > .axis > .axis-minor-tick-mark, +.slider > .axis > .axis-tick-mark { + -fx-stroke : rgb(146.0, 146.0, 146.0); +} + +.slider:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +/******************************************************************************* + * * + * ScrollBar * + * * + ******************************************************************************/ + +.scroll-bar:horizontal, .scroll-bar:horizontal:focused, +.scroll-bar:horizontal > .track-background { + -fx-background-color:transparent; + -fx-background-insets: 0.0; + -fx-padding: 0.0 0.0 2.0 0.0; +} + +.scroll-bar:horizontal:hover, .scroll-bar:horizontal:focused:hover, +.scroll-bar:horizontal:hover > .track-background { + -fx-background-color:transparent; + -fx-background-insets: 0.0; + -fx-padding: 0.0 0.0 0.0 0.0; +} + +.scroll-bar:vertical{ + -fx-background-color:transparent; + -fx-background-insets: 0.0; + -fx-padding: -1.0 2.0 -1.0 0.0; +} + +.scroll-bar:vertical > .track-background, +.scroll-bar:vertical:hover > .track-background, +.scroll-bar:vertical:hover, .scroll-bar:vertical:focused:hover { + -fx-background-color:transparent; + -fx-background-insets: 0.0; + -fx-padding: -1.0 0.0 -1.0 0.0; +} + +.scroll-bar:horizontal > .thumb, .scroll-bar:vertical > .thumb { + -fx-background-color: rgb(0.0, 0.0, 0.0, 0.5); + -fx-background-insets: 0.0; + -fx-background-radius: 4.0; +} + +.scroll-bar:horizontal:hover > .thumb, .scroll-bar:vertical:hover > .thumb { + -fx-background-color: rgb(0.0, 0.0, 0.0, 0.5); + -fx-background-radius: 6.0; +} + +.scroll-bar:vertical:hover > .thumb { + -fx-background-insets: 0.0 2.0 0.0 2.0; +} + +.scroll-bar:horizontal:hover > .thumb { + -fx-background-insets: 2.0 0.0 2.0 0.0; +} + +.scroll-bar:horizontal > .track, +.scroll-bar:vertical > .track { + -fx-background-color: transparent; + -fx-background-radius: 0.0; + -fx-background-insets: 0.0; +} + +.scroll-bar:horizontal:hover > .track, +.scroll-bar:vertical:hover > .track { + -fx-border-color: rgb(198.0, 198.0, 198.0); +} + +.scroll-bar:vertical:hover > .track { + -fx-background-color: linear-gradient(rgb(238.0, 238.0, 238.0, 0.7) 0.0%, rgb(255.0, 255.0, 255.0, 0.7) 100.0%); + -fx-border-width: 0.0 0.0 0.0 1.0; + -fx-border-insets: 0.0 0.0 0.0 -1.0; +} + +.scroll-bar:horizontal:hover > .track { + -fx-background-color: linear-gradient(rgb(238.0, 238.0, 238.0, 0.8) 0.0%, rgb(255.0, 255.0, 255.0, 0.8) 100.0%); + -fx-border-width: 1.0 0.0 0.0 0.0; + -fx-border-insets: -1.0 0.0 0.0 0.0; +} + +.scroll-bar > .increment-button, +.scroll-bar > .decrement-button { + -fx-background-color: transparent; + -fx-background-insets: 0.0; + -fx-padding: 0.0em; +} + +.scroll-bar:vertical:hover > .increment-button, +.scroll-bar:vertical:hover > .decrement-button { + -fx-background-color: transparent; + -fx-background-insets: 0.0; + -fx-padding: 0.0em 6.0pt 0.0em 0.0em; +} + +.scroll-bar:horizontal:hover > .increment-button, +.scroll-bar:horizontal:hover > .decrement-button { + -fx-background-color: transparent; + -fx-background-insets: 0.0; + -fx-padding: 6.0pt 0.0em 0.0em 0.0em; +} + +.scroll-bar:horizontal > .increment-button > .increment-arrow, +.scroll-bar:horizontal > .decrement-button > .decrement-arrow { + -fx-background-color: transparent; + -fx-background-insets: 0.0; + -fx-padding: 4.0pt 0.0em 0.0em 0.0em; +} + +.scroll-bar:vertical > .increment-button > .increment-arrow, +.scroll-bar:vertical > .decrement-button > .decrement-arrow { + -fx-background-color: transparent; + -fx-background-insets: 0.0; + -fx-padding: 0.0em 4.0pt 0.0em 0.0em; +} + +.scroll-bar:disabled { + -fx-opacity: -fx-disabled-opacity; +} + + + +/******************************************************************************* + * * + * ScrollPane * + * * + ******************************************************************************/ + +.scroll-pane > * > .scroll-bar:horizontal { + -fx-background-insets: 0.0, 0.0 0.0 0.0 0.0; + -fx-padding: 0.0 0.0 0.0 0.0; +} + +.scroll-pane > * > .scroll-bar:vertical { + -fx-background-insets: 0.0, 0.0 0.0 0.0 0.0; + -fx-padding: 0.0 0.0 0.0 0.0; +} + +.scroll-pane > .corner { + -fx-background-color: transparent; + -fx-background-insets: 0.0, 0.0 0.0 0.0 0.0; +} + +.scroll-pane:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +/******************************************************************************* + * * + * Separator * + * * + ******************************************************************************/ + +.separator > .line { + -fx-border-width: 0.5px; +} + +.separator:horizontal > .line { + -fx-background-color: rgb(132.0, 132.0, 132.0); + -fx-padding: 0.1 0.0 0.0 0.0; + -fx-border-color: transparent; +} + +.separator:vertical > .line { + -fx-background-color: rgb(132.0, 132.0, 132.0); + -fx-padding: 0.0 0.1 0.0 0.0; + -fx-border-color: transparent; +} + +/******************************************************************************* + * * + * TextField * + * * + ******************************************************************************/ + +.text-field { + -fx-border-color: linear-gradient(rgb(184.0, 184.0, 184.0) 0.0%, rgb(205.0, 205.0, 205.0) 100.0%); + -fx-border-width: 0.5; + -fx-border-insets: -0.5 0.0 3.0 0.0; + -fx-background-color: linear-gradient(rgb(155.0, 155.0, 155.0) 0.0%, rgb(172.0, 172.0, 172.0) 100.0%), + rgb(255.0, 255.0, 255.0), + linear-gradient(rgb(224.0, 224.0, 224.0) 0.0%, rgb(255.0, 255.0, 255.0) 10.0%), + linear-gradient(to right, rgb(224.0, 224.0, 224.0) 0.0%, transparent 1.0%), + linear-gradient(to left, rgb(224.0, 224.0, 224.0) 0.0%, transparent 1.0%); + -fx-background-insets: 0.0 0.5 3.5 0.5, 0.5 1.0 4.0 1.0, 0.5 1.0 4.0 1.0, 0.5 1.0 4.0 1.0; + -fx-background-radius: 0.0, 0.0; + + -fx-padding: 0.166667em; + -fx-text-fill: black; + -fx-highlight-fill: rgb(182.0, 214.0, 253.0); + -fx-prompt-text-fill: rgb(128.0, 128.0, 128.0); + -fx-cursor: text; + + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +.text-field:focused { + -fx-highlight-fill: rgb(182.0, 214.0, 253.0); + -fx-highlight-text-fill: -fx-text-base-color; +} + +.text-field:disabled { + -fx-opacity: 1.0; + -fx-background-color: linear-gradient(rgb(155.0, 155.0, 155.0, 0.4) 0.0%, rgb(172.0, 172.0, 172.0, 0.4) 100.0%), + rgb(255.0, 255.0, 255.0), + linear-gradient(rgb(224.0, 224.0, 224.0, 0.4) 0.0%, rgb(255.0, 255.0, 255.0, 0.4) 10.0%), + linear-gradient(to right, rgb(224.0, 224.0, 224.0) 0.0%, transparent 1.0%), + linear-gradient(to left, rgb(224.0, 224.0, 224.0) 0.0%, transparent 1.0%); + -fx-border-color: linear-gradient(rgb(184.0, 184.0, 184.0, 0.4) 0.0%, rgb(205.0, 205.0, 205.0, 0.4) 100.0%); + -fx-text-fill: rgb(127.0, 127.0, 127.0); +} + +/******************************************************************************* + * * + * PasswordField * + * * + ******************************************************************************/ + +.password-field { + -fx-text-fill: -fx-text-base-color; + + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +/******************************************************************************* + * * + * TextArea * + * * + ******************************************************************************/ + +.text-area { + -fx-padding: 1.0; + -fx-font-family: 'helvetica'; + -fx-border-color: rgb(142.0, 142.0, 142.0) rgb(190.0, 190.0, 190.0) rgb(190.0, 190.0, 190.0) rgb(190.0, 190.0, 190.0); + -fx-border-width: 1.0; + -fx-background-color: white; + -fx-background-insets: 1.0; + -fx-background-radius: 0.0; + -fx-text-fill: -fx-text-base-color; + -fx-prompt-text-fill: rgb(128.0, 128.0, 128.0); + -fx-highlight-fill: transparent; + + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +.text-area > .scroll-pane { + -fx-background-color: transparent; +} + +.text-area .content { + -fx-padding: 1.2 3.0 2.0 1.0; + -fx-cursor: text; +} + +.text-area:focused { + -fx-prompt-text-fill: transparent; + -fx-highlight-fill: rgb(182.0, 214.0, 253.0); + -fx-highlight-text-fill: -fx-text-base-color; +} + +.text-area:disabled { + -fx-opacity: 1.0; + -fx-background-color: white; + -fx-border-color: rgb(142.0, 142.0, 142.0) rgb(190.0, 190.0, 190.0) rgb(190.0, 190.0, 190.0) rgb(190.0, 190.0, 190.0); + -fx-text-fill: rgb(127.0, 127.0, 127.0); +} + +/******************************************************************************* + * * + * Customised CSS for controls placed directly within cells * + * * + ******************************************************************************/ + +.cell > .choice-box { + -fx-background-color: transparent; + -fx-background-insets: 0.0; + -fx-background-radius: 0.0; + -fx-padding: 0.0em 0.5em 0.0em 0.0em; + -fx-alignment: CENTER_LEFT; + -fx-content-display: LEFT; +} + +.cell > .choice-box > .label { + -fx-padding: 0.0em 0.333333em 0.0em 0.333333; +} + +.cell:focused:selected > .choice-box > .label { + -fx-text-fill: white; +} + + +/******************************************************************************* + * * + * ListView and ListCell * + * * + ******************************************************************************/ + +.list-view { + -fx-background-color: white; + -fx-background-insets: 0.5; + -fx-border-color: rgb(156.0, 156.0, 156.0) rgb(190.0, 190.0, 190.0) rgb(190.0, 190.0, 190.0) rgb(190.0, 190.0, 190.0); + -fx-border-width: 1.0; + -fx-border-insets: 0.0; +} + +.list-cell { + -fx-background-color: white; + -fx-padding: 0.2em 0.25em 0.2em 0.25em; + -fx-text-fill: -fx-text-base-color; +} + +/* ListView Cells do not have a even/odd highlighting +.list-cell:odd { + -fx-background-color: rgb(243.0, 246.0, 250.0); +} */ + +/* When the list-cell is selected and focused */ +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:focused:selected, +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient(rgb(95.0, 165.0, 221.0), rgb(54.0, 124.0, 192.0)), + linear-gradient(rgb(116.0, 186.0, 232.0), rgb(116.0, 186.0, 232.0) 1.0%, rgb(109.0, 178.0, 227.0) 1.0%, rgb(59.0, 136.0, 208.0) 100.0%); + -fx-background-insets: 0.0, 1.0 0.0 1.0 0.0; + -fx-text-fill: white; +} + +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:focused:selected > .text, +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected > .text { + -fx-effect: dropshadow(one-pass-box , rgba(0.0,0.0,0.0,0.4) , 1.0, 0.1 , 0.0 , 1.0 ); +} + +/* When the ListView is _not_ focused, we show alternate selection colors */ +.list-cell:filled:selected:focused, +.list-cell:filled:selected { + -fx-background-color: linear-gradient(rgb(187.0, 197.0, 214.0), rgb(147.0, 160.0, 185.0)), + linear-gradient(rgb(195.0, 204.0, 223.0), rgb(195.0, 204.0, 223.0) 1.0%, rgb(189.0, 199.0, 220.0) 1.0%, rgb(155.0, 169.0, 196.0) 100.0%); + -fx-background-insets: 0.0, 1.0 0.0 1.0 0.0; + -fx-text-fill: white; +} + +.list-view:horizontal:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient(to right, rgb(95.0, 165.0, 221.0), rgb(54.0, 124.0, 192.0)), + linear-gradient(to right, rgb(116.0, 186.0, 232.0), rgb(116.0, 186.0, 232.0) 1.0%, rgb(109.0, 178.0, 227.0) 1.0%, rgb(59.0, 136.0, 208.0) 100.0%); + -fx-background-insets: 0.0, 0.0 1.0 0.0 1.0; + -fx-text-fill: white; +} + +.list-view:horizontal > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background-color: linear-gradient(to right, rgb(187.0, 197.0, 214.0), rgb(147.0, 160.0, 185.0)), + linear-gradient(to right, rgb(195.0, 204.0, 223.0), rgb(195.0, 204.0, 223.0) 1.0%, rgb(189.0, 199.0, 220.0) 1.0%, rgb(155.0, 169.0, 196.0) 100.0%); + -fx-background-insets: 0.0, 0.0 1.0 0.0 1.0; + -fx-text-fill: white; +} + +.list-view:horizontal > .virtual-flow > .clipped-container > .sheet > .list-cell:odd { + -fx-background-color: rgb(243.0, 246.0, 250.0); +} + +/******************************************************************************* + * * + * MenuButton * + * * + ******************************************************************************/ +.menu-button { + -fx-background-color: + linear-gradient(rgb(245.0, 245.0, 245.0), rgb(185.0, 185.0, 185.0)); + -fx-background-insets:0.0; + -fx-background-radius: 3.5, 3.5; + -fx-border-radius: 4.0; + -fx-border-width: 0.5; + -fx-border-insets:-0.5, 0.0 ; + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); + -fx-padding: 0.1em 0.0em 0.153846em 0.0em; + + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +.menu-button > .label { + -fx-text-fill: -fx-text-base-color; + -fx-padding: 0.0em 0.667em 0.0em 0.833333em; +} + +.menu-button:armed { + -fx-background-color: linear-gradient(rgb(160.0, 160.0, 160.0), rgb(215.0, 215.0, 215.0)); + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); +} +.split-menu-button > .arrow-button { + -fx-background-insets: 0.0; + -fx-background-radius: 0.0; + -fx-padding: 0.0em 0.333333em 0.0em 0.2em; +} + +.menu-button > .arrow-button { + -fx-background-insets: 0.0; + -fx-background-radius: 0.0; + -fx-padding: 0.0em 0.333333em 0.0em 0.0em; +} + +.menu-button > .arrow-button > .arrow { + -fx-background-insets: 1.0 0.0 -1.0 0.0, 0.5 0.0 -0.5 0.0; + -fx-background-color: rgb(255.0, 255.0, 255.0), rgb(71.0, 71.0, 71.0); + -fx-padding: 0.166667em 0.25em 0.166667em 0.25em; + -fx-shape: "M 0 -3.5 v 7 l 4 -3.5 z"; +} + +.menu-button:openvertically > .arrow-button > .arrow { + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} + +.menu-button:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.menu-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + + + +/******************************************************************************* + * * + * SplitMenuButton * + * * + ******************************************************************************/ + +.split-menu-button { + -fx-padding: 0.0em; + -fx-text-fill: -fx-text-base-color; + + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +.split-menu-button > .label { + -fx-background-color: + linear-gradient(rgb(245.0, 245.0, 245.0), rgb(185.0, 185.0, 185.0)); + -fx-background-insets:0.0; + -fx-background-radius: 4.0 0.0 0.0 4.0; + -fx-border-radius: 3.5 0.0 0.0 3.5, 3.5 0.0 0.0 3.5; + -fx-border-width: 0.5, 0.5; + -fx-border-insets:-0.5, 0.0 ; + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); + -fx-padding: 0.1em 0.667em 0.153846em 0.833333em; +} + +.split-menu-button > .arrow-button { + -fx-background-color: + linear-gradient(rgb(245.0, 245.0, 245.0), rgb(185.0, 185.0, 185.0)); + -fx-background-insets:0.0; + -fx-background-radius: 0.0 4.0 4.0 0.0; + -fx-border-width: 0.5 0.5 0.5 0.5, 0.5 0.5 0.5 0.5; + -fx-border-insets:-0.5, 0.0 ; + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); + -fx-border-radius: 0.0 3.5 3.5 0.0, 0.0 3.5 3.5 0.0; + -fx-padding: 0.0em 0.5em 0.0em 0.5em; +} + +.split-menu-button:showing > .arrow-button { + -fx-background-color: linear-gradient(rgb(160.0, 160.0, 160.0), rgb(215.0, 215.0, 215.0)); + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); +} + +.split-menu-button > .arrow-button > .arrow { + -fx-background-insets: 1.0 0.0 -1.0 0.0, 0.5 0.0 -0.5 0.0; + -fx-background-color: rgb(255.0, 255.0, 255.0), rgb(71.0, 71.0, 71.0); + -fx-padding: 0.166667em 0.25em 0.166667em 0.25em; + -fx-shape: "M 0 -3.5 v 7 l 4 -3.5 z"; +} + +.split-menu-button:openvertically > .arrow-button > .arrow { + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} + +.split-menu-button:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.split-menu-button:show-mnemonics > .mnemonic-underline { + -fx-stroke: -fx-text-base-color; +} + + + +/******************************************************************************* + * * + * Tooltip * + * * + ******************************************************************************/ + +.tooltip { + -fx-background-color: + rgb(251.0, 250.0, 205.0, 0.95); + -fx-background-insets: 0.5; + -fx-border-color: rgb(125.0, 125.0, 125.0, 0.4); + -fx-border-width: 0.5; + -fx-padding: 0.1em 0.35em 0.25em 0.196666em; + -fx-effect: dropshadow( three-pass-box , rgba(0.0,0.0,0.0,0.4) , 8.0, 0.0 , 0.0 , 3.0 ); +} + +/******************************************************************************* + * * + * Toolbar * * + * * + ******************************************************************************/ + +.tool-bar:vertical { + -fx-background-color: + linear-gradient(to right, rgb(222.0, 222.0, 222.0), rgb(173.0, 173.0, 173.0) 99.0%, rgb(233.0, 233.0, 233.0)); + -fx-border-color: rgb(103.0, 103.0, 103.0); + -fx-border-width: 0.0 1.0 0.0 0.0; + -fx-border-insets: 0.0; + -fx-padding: 0.833em 0.416667em 0.833em 0.416667em; + -fx-spacing: 0.333em; + -fx-alignment: TOP_LEFT; +} + +.tool-bar:vertical.inactive { + -fx-background-color: linear-gradient(to right, rgb(244.0, 244.0, 244.0), rgb(224.0, 224.0, 224.0) 99.0%, rgb(227.0, 227.0, 227.0)); + -fx-border-color: rgb(166.0, 166.0, 166.0); +} + +.tool-bar:horizontal { + -fx-background-color: linear-gradient(to bottom, rgb(222.0, 222.0, 222.0), rgb(173.0, 173.0, 173.0) 99.0%, rgb(233.0, 233.0, 233.0)); + -fx-padding: 0.230769em 0.833em 0.666667em 0.833em; + -fx-border-color: rgb(103.0, 103.0, 103.0); + -fx-border-width: 0.0 0.0 1.0 0.0; + -fx-border-insets: 0.0; + -fx-alignment: CENTER_LEFT; +} + +.tool-bar:horizontal.inactive { + -fx-background-color: linear-gradient(to bottom, rgb(244.0, 244.0, 244.0), rgb(224.0, 224.0, 224.0) 99.0%, rgb(227.0, 227.0, 227.0)); + -fx-border-color: rgb(166.0, 166.0, 166.0); +} + +.tool-bar > .container > .separator:vertical > .line { + -fx-border-style: solid; + -fx-background-color: null; + -fx-border-color: transparent rgb(129.0, 129.0, 129.0) transparent transparent; +} + +.tool-bar.inactive > .container > .separator:vertical > .line { + -fx-border-color: transparent rgb(177.0, 177.0, 177.0) transparent transparent; +} + +.tool-bar > .container > .separator:horizontal > .line { + -fx-border-style: solid; + -fx-background-color: null; + -fx-border-color: transparent transparent rgb(129.0, 129.0, 129.0) transparent; +} + +.tool-bar.inactive > .container > .separator:horizontal > .line { + -fx-border-color: transparent transparent rgb(177.0, 177.0, 177.0) transparent; +} + +.tool-bar:vertical > .container > .separator { + -fx-orientation: horizontal; + -fx-padding: 0.083333em 0.0em 0.083333em 0.0em; +} + +.tool-bar:horizontal > .container > .separator { + -fx-orientation: vertical; + -fx-padding: 0.0em 0.083333em 0.0em 0.083333em; +} + +.tool-bar-overflow-button { + -fx-background-color: transparent; +} + +.tool-bar-overflow-button > .arrow { + -fx-background-color: rgb(127.0, 127.0, 127.0); + -fx-background-insets: 0.0; + -fx-padding: 0.666667em 0.916667em 0.0em 0.0em; + -fx-shape: "m -4.1094335,2.2064997 -2.8103114,0 4.1861081,3.5669889 -4.1861081,3.6832295 2.7950633,0 4.3381035,-3.6948229 z m -6.1415245,0 -3.020299,0 4.3219166,3.5553955 -4.3219166,3.6948229 3.020299,0 4.4263398,-3.6948229 z"; + -fx-effect: innershadow(one-pass-box, rgb(28.0, 28.0, 28.0), 1.5, 0.6, -0.5, 1.0); +} + +.inactive .tool-bar-overflow-button > .arrow { + -fx-background-color: rgb(177.0, 177.0, 177.0); + -fx-effect: innershadow(one-pass-box, rgb(28.0, 28.0, 28.0, 0.5), 1.5, 0.6, -0.5, 1.0); +} + +.tool-bar-overflow-button:pressed > .arrow { + -fx-effect: innershadow(one-pass-box, rgb(28.0, 28.0, 28.0), 2.5, 0.6, -0.5, 1.0); +} + +.tool-bar .toggle-button, +.tool-bar .button, +.tool-bar .color-picker, +.tool-bar .choice-box, +.tool-bar .combo-box > .list-cell, +.tool-bar .combo-box > .arrow-button { + -fx-background-color: + linear-gradient(rgb(245.0, 245.0, 245.0), rgb(185.0, 185.0, 185.0)); + -fx-background-insets:0.0; + -fx-border-width: 0.5; + -fx-border-insets:-0.5, 0.0 ; + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); +} + +.tool-bar.inactive .toggle-button, +.tool-bar.inactive .button, +.tool-bar.inactive .color-picker, +.tool-bar.inactive .choice-box, +.tool-bar.inactive .combo-box > .list-cell, +.tool-bar.inactive .menu-button, +.tool-bar.inactive .split-menu-button > .label, +.tool-bar.inactive .split-menu-button > .arrow-button, +.tool-bar.inactive .combo-box > .arrow-button { + -fx-background-color: + linear-gradient(rgb(241.0, 241.0, 241.0), rgb(229.0, 229.0, 229.0)); + -fx-border-color: + linear-gradient(rgb(201.0, 201.0, 201.0), rgb(193.0, 193.0, 193.0)), linear-gradient(rgb(184.0, 184.0, 184.0), rgb(177.0, 177.0, 177.0)); +} + +.tool-bar .button.button-icon-left, +.tool-bar .toggle-button.button-icon-left { + -fx-padding: 0.1em 0.692398em 0.153846em 0.66em; +} + +.tool-bar .button.button-icon-right, +.tool-bar .toggle-button.button-icon-right { + -fx-padding: 0.1em 0.692398em 0.153846em 0.538462em; +} + +.tool-bar .toggle-button:selected:armed, +.tool-bar .toggle-button:selected, +.tool-bar .toggle-button:armed{ + -fx-background-color: -toggle-selected-base, -toggle-shadow; +} + +.tool-bar.inactive .toggle-button:selected { + -fx-background-color: linear-gradient(rgb(147.0, 147.0, 147.0) 0.0%, rgb(164.0, 164.0, 164.0) 10.0%, + rgb(190.0, 190.0, 190.0) 85.0%, rgb(195.0, 195.0, 195.0) 98.0%, rgb(198.0, 198.0, 198.0) 100.0%), + -toggle-shadow; +} + +.tool-bar.inactive .combo-box-base:editable > .text-field { + -fx-border-color: + linear-gradient(rgb(201.0, 201.0, 201.0), rgb(193.0, 193.0, 193.0)); +} + +.tool-bar .combo-box-base:editable > .text-field { + -fx-padding: 0.1em 0.0em 0.153846em 0.0em; + -fx-background-insets:0.0, 0.5, 0.5; + -fx-border-width: 1.0 0.0 1.0 1.0; + -fx-border-insets: -0.5; + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)); +} + +.tool-bar .toggle-button, +.tool-bar .button, +.tool-bar .color-picker{ + -fx-padding: 0.1em 0.9em 0.153846em 0.9em; +} + +.tool-bar .choice-box { + -fx-padding: 0.1em 0.0em 0.153846em 0.0em; +} + +.tool-bar .color-picker { + -fx-padding:-0.02em 1.2 -0.06em 0.0; +} + +.tool-bar .button:armed, +.tool-bar .color-picker:showing, +.tool-bar .choice-box:showing, +.tool-bar .combo-box:showing > .arrow-button { + -fx-background-color: linear-gradient(rgb(160.0, 160.0, 160.0), rgb(215.0, 215.0, 215.0)); + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); + -fx-text-fill: -fx-text-base-color; +} + +.tool-bar .toggle-button.right-pill, +.tool-bar .button.right-pill { + -fx-border-width: 0.5 0.5 0.5 0.5; + -fx-border-style: solid solid solid segments(15.0, 2.75) phase 14.5 centered, + solid solid solid segments(15.0, 2.75) phase 15.0 centered; +} + +.tool-bar .toggle-button.center-pill, +.tool-bar .button.center-pill { + -fx-border-width: 0.5 0.0 0.5 0.5; + -fx-border-style: solid solid solid segments(15.0, 2.75) phase 14.5 centered, + solid solid solid segments(15.0, 2.75) phase 15.0 centered; +} + +.tool-bar .toggle-button.center-pill, +.tool-bar .toggle-button.left-pill, +.tool-bar .button.center-pill, +.tool-bar .button.left-pill { + -fx-border-width: 0.5 0.0 0.5 0.5; +} + +.tool-bar .toggle-button.center-pill:selected, +.tool-bar .toggle-button.center-pill:selected:armed, +.tool-bar .button.center-pill:armed { + -fx-border-width:0.5 0.5 0.5 0.5, 0.5 0.0 0.5 0.5; + -fx-border-style: solid solid solid solid centered, solid solid solid solid centered; +} + +.tool-bar .toggle-button.right-pill:selected, +.tool-bar .toggle-button.right-pill:selected:armed, +.tool-bar .button.right-pill:armed { + -fx-border-width:0.5 0.5 0.5 0.5; + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); + -fx-border-style: solid solid solid solid centered; +} + +.tool-bar.inactive .toggle-button.right-pill:selected { + -fx-border-color: rgb(172.0, 172.0, 172.0, 0.7), + linear-gradient(rgb(151.0, 151.0, 151.0), rgb(173.0, 173.0, 173.0)); +} + +.tool-bar .toggle-button.right-pill.neighbor, +.tool-bar .button.right-pill.neighbor { + -fx-border-style: solid solid solid solid centered; + -fx-border-insets:-0.5, 0.0 ; + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); +} + + +.tool-bar.inactive .toggle-button.right-pill.neighbor, +.tool-bar.inactive .button.right-pill.neighbor, +.tool-bar.inactive .toggle-button.center-pill.neighbor, +.tool-bar.inactive .button.center-pill.neighbor { + -fx-border-color: + linear-gradient(rgb(201.0, 201.0, 201.0), rgb(193.0, 193.0, 193.0)), linear-gradient(rgb(184.0, 184.0, 184.0), rgb(177.0, 177.0, 177.0)); +} + +.tool-bar .toggle-button.center-pill.neighbor, +.tool-bar .button.center-pill.neighbor { + -fx-border-style: solid solid solid solid centered; + -fx-border-insets:-0.5, 0.0 ; + -fx-border-color: linear-gradient(rgb(147.0, 147.0, 147.0), rgb(131.0, 131.0, 131.0)), + linear-gradient(rgb(116.0, 116.0, 116.0), rgb(105.0, 105.0, 105.0)); +} + +.tool-bar .button:disabled, +.tool-bar .toggle-button:disabled, +.tool-bar .color-picker:disabled, +.tool-bar .combo-box:disabled, +.tool-bar .menu-button:disabled, +.tool-bar .split-menu-button:disabled, +.tool-bar .choice-box:disabled { + -fx-opacity: 1.0; +} + +.tool-bar .button > *:disabled, +.tool-bar .toggle-button > *:disabled, +.tool-bar .color-picker > *:disabled, +.tool-bar .combo-box > *:disabled, +.tool-bar .choice-box > *:disabled, +.tool-bar .menu-button > *:disabled, +.tool-bar .split-menu-button > *:disabled, +.tool-bar .combo-box:editable > *:disabled, +.tool-bar.inactive .aquaicon, +.tool-bar.inactive .combo-box > .text-field > * > .text, +.tool-bar.inactive .button > .text, +.tool-bar.inactive .color-picker > .label, +.tool-bar.inactive .color-picker > .arrow-button > .arrow, +.tool-bar.inactive .choice-box > .label, +.tool-bar.inactive .choice-box > .open-button > .arrow, +.tool-bar.inactive .toggle-button > .text, +.tool-bar.inactive .menu-button > * > .text, +.tool-bar.inactive .menu-button > .arrow-button > .arrow, +.tool-bar.inactive .split-menu-button > * > .text, +.tool-bar.inactive .split-menu-button > .arrow-button > .arrow, +.tool-bar.inactive .combo-box > .list-cell > .text, +.tool-bar.inactive .combo-box > .arrow-button > .arrow { + -fx-opacity: -fx-disabled-opacity; +} + +.tool-bar.inactive *:disabled > .aquaicon, +.tool-bar.inactive .button:disabled > .text, +.tool-bar.inactive .toggle-button:disabled > .text, +.tool-bar.inactive .color-picker:disabled > .label, +.tool-bar.inactive .color-picker:disabled > .arrow-button > .arrow, +.tool-bar.inactive .choice-box:disabled > .label, +.tool-bar.inactive .choice-box:disabled > .open-button > .arrow, +.tool-bar.inactive .combo-box:disabled > .list-cell > .text, +.tool-bar.inactive .combo-box:disabled > .arrow-button > .arrow, +.tool-bar.inactive .combo-box-base:editable:disabled > .text-field > * > .text, +.tool-bar.inactive .menu-button:disabled > .label, +.tool-bar.inactive .menu-button:disabled > .arrow-button > .arrow, +.tool-bar.inactive .split-menu-button:disabled > .label, +.tool-bar.inactive .split-menu-button:disabled > .arrow-button, +.tool-bar.inactive .button.button-icon-left > .icon-left:disabled, +.tool-bar.inactive .toggle-button.button-icon-left > .icon-left:disabled, +.tool-bar.inactive .button.button-icon-right > .icon-right:disabled, +.tool-bar.inactive .toggle-button.button-icon-right > .icon-right:disabled { + -fx-opacity: 0.2 +} + + +/******************************************************************************* + * * + * ProgressBar * + * * + ******************************************************************************/ + +.progress-bar { + -fx-border-color: rgb(146.0, 146.0, 146.0); + -fx-border-width: 0.5; + -fx-border-radius: 2.5; + -fx-background-color: + linear-gradient(rgb(176.0, 176.0, 176.0), rgb(207.0, 207.0, 207.0)), + linear-gradient(rgb(190.0, 190.0, 190.0) 0.0%, rgb(213.0, 213.0, 213.0) 15.0%, rgb(230.0, 230.0, 230.0) 50.0%, rgb(235.0, 235.0, 235.0) 100.0%), + linear-gradient(to left, rgb(196.0, 196.0, 196.0, 0.5) 0.0%, rgb(220.0, 220.0, 220.0, 0.2) 2.0% , transparent); + -fx-background-insets: 0.5, 1.0, 1.0; + -fx-background-radius: 2.0, 2.0, 2.0; + -fx-indeterminate-bar-length:-1.0; + -fx-indeterminate-bar-escape: false; + -fx-indeterminate-bar-flip: false; + -fx-indeterminate-bar-animation-time: 0.0; + + -fx-aqua-determinate-image: "progress.png"; +} + +.progress-bar:indeterminate { + -fx-background-color: + linear-gradient(rgb(176.0, 176.0, 176.0), rgb(207.0, 207.0, 207.0)), + linear-gradient(from 5.0% 45.0% to 10.0% 0.0%, reflect, rgb(84.0, 169.0, 239.0) 50.0%, rgb(236.0, 236.0, 236.0) 47.0%), + linear-gradient(rgb(255.0, 255.0, 255.0, 0.7) 5.0%, rgb(255.0, 255.0, 255.0, 0.5) 5.0%, + rgb(255.0, 255.0, 255.0, 0.1) 50.0%, rgb(255.0, 255.0, 255.0, 0.0) 50.0%, rgb(255.0, 255.0, 255.0, 0.0) 60.0%, + rgb(255.0, 255.0, 255.0, 0.4) 85.0%, rgb(245.0, 245.0, 245.0, 0.7) 100.0%); + + -fx-aqua-indeterminate-color:rgb(84.0, 169.0, 239.0); +} + +.progress-bar:indeterminate > .bar { + -fx-background-color: transparent; +} + +.progress-bar > .bar { + -fx-border-color:linear-gradient(to bottom, rgb(161.0, 161.0, 161.0), rgb(208.0, 208.0, 208.0)); + -fx-border-width: 0.0 0.5 0.0 0.0; + -fx-background-color: + radial-gradient(center 50.0% 50.0%, radius 50.0%, rgb(84.0, 170.0, 240.0), rgb(90.0, 192.0, 246.0)); + -fx-background-insets: 0.0; + -fx-padding: 0.416667em; +} + +.progress-bar:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +/******************************************************************************* + * * + * ProgressIndicator * + * * + ******************************************************************************/ + +.progress-indicator { + -fx-indeterminate-segment-count: 12.0; +} + +.progress-indicator > .determinate-indicator > .indicator { + -fx-background-color: + rgb(208.0, 208.0, 208.0), + linear-gradient(rgb(176.0, 176.0, 176.0), rgb(207.0, 207.0, 207.0)), + linear-gradient(rgb(190.0, 190.0, 190.0) 0.0%, rgb(213.0, 213.0, 213.0) 15.0%, rgb(230.0, 230.0, 230.0) 50.0%, rgb(235.0, 235.0, 235.0) 100.0%), + linear-gradient(to left, rgb(196.0, 196.0, 196.0, 0.5) 0.0%, rgb(220.0, 220.0, 220.0, 0.2) 2.0% , transparent); + -fx-background-insets: 0.5 0.0 -0.5 0.0, 0.0, 0.5, 1.0; + -fx-padding: 0.083333em; +} + +.progress-indicator > .determinate-indicator > .progress { + -fx-background-color: + rgb(208.0, 208.0, 208.0), + radial-gradient(center 50.0% 50.0%, radius 50.0%, rgb(84.0, 170.0, 240.0), rgb(90.0, 192.0, 246.0)); + -fx-background-insets: 0.0, 0.5; + -fx-padding: 0.166667em; +} + +.progress-indicator > .determinate-indicator > .tick { + -fx-background-color: rgb(208.0, 208.0, 208.0), white; + -fx-background-insets: 1.0 0.0 -1.0 0.0, 0.0; + -fx-padding: 0.416667em; + -fx-shape: "m 18.174523,1027.137 c -0.18077,-0.4575 -0.184364,-0.8913 0.115901,-1.1721 0.300265,-0.2809 0.836622,-0.3601 1.288422,-0.041 0.4518,0.3191 2.020453,2.9316 2.020453,2.9316 l 5.41194,-8.0232 c -4e-6,0 0.516257,-0.6671 1.248682,-0.3099 0.648831,0.3165 0.559153,1.0373 0.559153,1.0373 0,0 -5.940433,9.3556 -6.15501,9.6287 -0.214577,0.273 -1.595078,0.2481 -1.817995,-0.027 -0.222917,-0.2751 -2.490777,-3.567 -2.671546,-4.0244 z"; + -fx-scale-shape: false; +} + +.progress-indicator > .percentage { + -fx-font-size: 0.916667em; +} + +.progress-indicator:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.progress-indicator:indeterminate > .spinner { + -fx-padding: 0.083333em; +} + +.progress-indicator:indeterminate .segment { + -fx-background-color: rgb(95.0, 95.0, 98.0), rgb(122.0, 122.0, 125.0); + -fx-background-insets:0.0, 0.5; +} +.progress-indicator:indeterminate .segment0 { + -fx-shape:"m 14.321262,6.5816808 c -0.824944,0.3797564 -0.10368,1.8484772 0.718513,1.3544717 L 18.786514,5.9486042 C 19.644992,5.4932031 18.92648,4.1387308 18.068001,4.5941315 z"; +} +.progress-indicator:indeterminate .segment1 { + -fx-shape:"m 15.372451,9.2445322 c -0.906719,-0.051108 -0.957826,1.5843588 0,1.5332498 l 4.241273,0 c 0.97179,0 0.97179,-1.5332498 0,-1.5332498 z"; +} +.progress-indicator:indeterminate .segment2 { + -fx-shape:"m 14.423504,13.443113 c -0.824945,-0.379757 -0.10368,-1.848478 0.718512,-1.354472 l 3.746739,1.987548 c 0.858478,0.455401 0.139967,1.809873 -0.718512,1.354473 z"; +} +.progress-indicator:indeterminate .segment3 { + -fx-shape:"m 12.10997,15.070611 c -0.49762,-0.759687 0.893182,-1.621681 1.327834,-0.766626 l 2.120636,3.673051 c 0.485895,0.841595 -0.841938,1.60822 -1.327833,0.766625 z"; +} +.progress-indicator:indeterminate .segment4 { + -fx-shape:"m 9.2224559,19.539943 c -0.051108,0.906718 1.5843581,0.957826 1.5332501,0 l 0,-4.241273 c 0,-0.97179 -1.5332501,-0.97179 -1.5332501,0 z"; +} +.progress-indicator:indeterminate .segment5 { + -fx-shape:"M 8.0465401,15.070611 C 8.5441601,14.310924 7.1533584,13.44893 6.7187068,14.303985 l -2.1206366,3.673051 c -0.485895,0.841595 0.8419383,1.60822 1.3278333,0.766625 z"; +} +.progress-indicator:indeterminate .segment6 { + -fx-shape:"M 5.7330066,13.443113 C 6.5579512,13.063356 5.8366865,11.594635 5.0144939,12.088641 L 1.2677551,14.076189 C 0.409277,14.53159 1.1277888,15.886062 1.9862674,15.430662 z"; +} +.progress-indicator:indeterminate .segment7 { + -fx-shape:"m 0.42171041,9.2083842 c -0.90671825,-0.051108 -0.95782608,1.5843588 0,1.5332498 l 4.24127319,0 c 0.9717899,0 0.9717899,-1.5332498 0,-1.5332498 z"; +} +.progress-indicator:indeterminate .segment8 { + -fx-shape:"M 5.7330066,6.5305598 C 6.5579512,6.9103162 5.8366865,8.3790371 5.0144939,7.8850315 L 1.2677551,5.8974832 C 0.409277,5.4420823 1.1277888,4.0876101 1.9862674,4.5430105 z"; +} +.progress-indicator:indeterminate .segment9 { + -fx-shape:"M 8.0465401,4.9030617 C 8.5441601,5.6627485 7.1533584,6.5247425 6.7187068,5.6696872 L 4.5980702,1.9966363 C 4.1121752,1.1550418 5.4400085,0.38841683 5.9259035,1.2300114 z"; +} +.progress-indicator:indeterminate .segment10 { + -fx-shape:"m 9.2224559,4.62535 c -0.051108,0.9067177 1.5843581,0.957826 1.5332501,0 l 0,-4.24127319 c 0,-0.9717899 -1.5332501,-0.9717899 -1.5332501,0 z"; +} +.progress-indicator:indeterminate .segment11 { + -fx-shape:"m 12.007729,4.9541827 c -0.49762,0.7596865 0.893181,1.6216808 1.327833,0.7666252 L 15.456199,2.0477574 C 15.942094,1.2061627 14.61426,0.43953765 14.128365,1.2811324 z"; +} + +/******************************************************************************* + * * + * TableView & TreeTableView * + * Note: A lot of the CSS for TreeTableView is included with the TreeView and * + * TableView CSS styles elsewhere (as they are the same, just * + * targeting different CSS style classes). * + * * + ******************************************************************************/ + +.table-view, +.tree-table-view { + -fx-background-color: white; + -fx-background-insets: 0.5; + -fx-border-color: rgb(156.0, 156.0, 156.0) rgb(190.0, 190.0, 190.0) rgb(190.0, 190.0, 190.0) rgb(190.0, 190.0, 190.0); + -fx-border-width: 1.0; + -fx-border-insets: 0.0; + -fx-table-cell-border-color: transparent; +} + +/* Draws focus border around tableview */ +.table-view:focused, +.tree-table-view:focused, +.tree-view:focused, +.list-view:focused { + -fx-effect: dropshadow(one-pass-box , rgb(120.0,171.0,217.0), 8.0, 0.8 , 0.0, 0.0); +} + +.table-view:disabled, +.tree-view:disabled, +.tree-table-view:disabled, +.list-view:disabled, +.list-cell:filled:selected:focused:disabled, +.list-cell:filled:selected:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +/* Each row in the table is a table-row-cell. Inside a table-row-cell is any + number of table-cell. */ +.table-row-cell, +.tree-table-row-cell { + -fx-background-color: white; + -fx-background-insets: 0.0; + -fx-text-fill: -fx-text-base-color; +} + +.table-row-cell:odd, +.tree-table-row-cell:odd { + -fx-background-color: rgb(243.0, 246.0, 250.0); +} + +.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:selected > .table-cell, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:selected > .tree-table-cell { + -fx-text-fill: white; +} + +.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, +.table-view:row-selection:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:focused:selected:hover, +.tree-table-view:row-selection:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:focused:selected:hover { + -fx-background-color: rgb(60.0, 119.0, 212.0); + -fx-background-insets: 0.0; +} + +/* When the TableView is _not_ focused, we show alternate selection colors */ +.table-row-cell:filled:selected:focused, +.table-row-cell:filled:selected, +.tree-table-row-cell:filled:selected:focused, +.tree-table-row-cell:filled:selected, +.tree-cell:filled:selected:focused, +.tree-cell:filled:selected { + -fx-background-color: lightgray; + -fx-text-fill: -fx-text-base-color; +} + +.table-row-cell:selected:disabled, +.tree-table-row-cell:selected:disabled, +.tree-cell > .tree-disclosure-node:disabled, +.tree-table-row-cell > .tree-disclosure-node:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.table-view:row-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:hover, +.tree-view > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:hover, +.table-view:row-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:focused:hover, +.tree-table-view:row-selection > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:focused:hover, +.tree-table-view:row-selection > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:hover, +.tree-view > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected:hover, +.tree-table-row-cell:filled:selected:hover { + -fx-background-color: -fx-cell-hover-color; + -fx-background-insets: 0.0; + -fx-text-fill: -fx-text-base-color; +} + +.table-cell, +.tree-table-cell { + -fx-background-color: transparent; + -fx-background-insets: 0.0; + -fx-border-color: transparent; + -fx-border-width: 0.0em; + -fx-text-fill: -fx-text-base-color; + -fx-padding: 0.0em 0.769231em 0.0em 0.769231em; +} + +/* When in constrained resize mode, the right-most visible cell should not have + a right-border, as it is not possible to get this cleanly out of view without + introducing horizontal scrollbars (see RT-14886). */ +.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:constrained-resize > .column-header:last-visible, +.tree-table-view:constrained-resize > .column-header:last-visible { + -fx-border-width: 0.083333em 0.0em 0.083333em 0.083333em, 0.083333em 0.0em 0.083333em 0.083333em; +} +.table-view:constrained-resize .filler, +.tree-table-view:constrained-resize .filler { + -fx-border-insets: 0.0 1.0 1.0 1.0, 0.0 0.0 0.0 0.0; +} + +/* When the TableView is _not_ focused, we show alternate selection colors */ + .table-row-cell:filled > .table-cell:selected:focused, + .table-row-cell:filled > .table-cell:selected, + .tree-table-row-cell:filled > .tree-table-cell:selected:focused, + .tree-table-row-cell:filled > .tree-table-cell:selected { + -fx-background-color: lightgray; +} + +.table-cell:selected:disabled, +.tree-table-cell:selected:disabled, +.tree-cell:filled:selected:focused:disabled, +.tree-cell:filled:selected:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +/* The column-resize-line is shown when the user is attempting to resize a column. */ +.table-view .column-resize-line, +.tree-table-view .column-resize-line { + -fx-background-color: lightgray; + -fx-padding: 0.0em 0.02em 0.0em 0.02em; +} + +/* This is the area behind the column headers. An ideal place to specify background + and border colors for the whole area (not individual column-header's). */ +.table-view .column-header-background, +.tree-table-view .column-header-background { + -fx-background-color: + linear-gradient(rgb(255.0, 255.0, 255.0) 25.0%, rgb(243.0, 243.0, 243.0) 50.0%, rgb(236.0, 236.0, 236.0) 50.0%, rgb(243.0, 243.0, 243.0) 98.0% , rgb(250.0, 250.0, 250.0) 100.0% ); + -fx-background-insets: 0.0; + -fx-border-color: rgb(156.0, 156.0, 156.0); + -fx-border-insets: 0.0 0.0 0.5 0.0; + -fx-border-width: 0.0 0.0 0.5 0.0; + -fx-padding: 0.0; +} + +/* The column header row is made up of a number of column-header, one for each + TableColumn, and a 'filler' area that extends from the right-most column + to the edge of the tableview, or up to the 'column control' button. */ +.table-view .column-header, +.tree-table-view .column-header { + /* since there could appear nested column-headers in a header, the border-color is defined by a gradient */ + -fx-right-border: linear-gradient(transparent, transparent 15.0%, rgb(190.0, 190.0, 190.0, 0.8) 15.0%, rgb(190.0, 190.0, 190.0, 0.8) 85.0%, transparent 85.0%, transparent); + -fx-border-color: rgb(212.0, 212.0, 212.0, 0.8) -fx-right-border rgb(212.0, 212.0, 212.0, 0.8) transparent; + -fx-border-width: 0.5 1.0 0.5 0.0; + -fx-border-insets: 0.0; +} + + +/* This is especially for AquaFX. Apple uses tables with one column for simple Lists. This is just, to make it possible for users. The ListView Class */ +.table-view.hide-header .column-header{ + -fx-min-height: 0.0; + -fx-max-height: 0.0; + -fx-pref-height: 0.0; +} + +/* filler is the area, which is next to column-header, but has no column..*/ +.table-view .filler, +.tree-table-view .filler { + -fx-border-color: rgb(212.0, 212.0, 212.0, 0.8); + -fx-border-width: 0.5 0.0 0.5 0.0; + -fx-border-insets: 0.0; +} + +.table-view .column-header:pressed, +.tree-table-view .column-header:pressed, +.table-view .filler:pressed, +.tree-table-view .filler:pressed { + -fx-background-color: + linear-gradient(rgb(224.0, 224.0, 224.0) 25.0%, rgb(214.0, 214.0, 214.0) 50.0%, rgb(207.0, 207.0, 207.0) 50.0%, + rgb(209.0, 209.0, 209.0) 98.0% , rgb(218.0, 218.0, 218.0) 100.0% + ); + -fx-border-color: rgb(156.0, 156.0, 156.0); + -fx-border-width: 0.5 1.0 0.5 1.0 ; + -fx-border-insets: -0.5 0.0 -0.5 -1.0; +} + +.table-view .column-header .sort-order-dots-container, +.tree-table-view .column-header .sort-order-dots-container{ + -fx-padding: 2.0 0.0 2.0 0.0; +} + +.table-view .column-header .sort-order, +.tree-table-view .column-header .sort-order{ + -fx-font-size: 0.916667em; +} + +.table-view .column-header .sort-order-dot, +.tree-table-view .column-header .sort-order-dot { + -fx-background-color: rgb(255.0, 255.0, 255.0, 0.4), rgb(0.0,0.0,0.0, 0.4); + -fx-padding: 0.0625em 0.104em 0.0625em 0.104em; +} + + +/* dots beneath/ above the sort order-arrows */ +.table-view .column-header .sort-order-dot.ascending, +.tree-table-view .column-header .sort-order-dot.ascending { + -fx-background-insets: -1.0 0.0 1.0 0.0, 0.0; +} + +.table-view .column-header .sort-order-dot.descending, +.tree-table-view .column-header .sort-order-dot.descending { + -fx-background-insets: 1.0 0.0 -1.0 0.0, 0.0; +} + +.table-view > .column-header-background > .show-hide-columns-button, +.tree-table-view > .column-header-background > .show-hide-columns-button{ + -fx-background-color: transparent; +} + +.table-view .show-hide-column-image, +.tree-table-view .show-hide-column-image { + -fx-background-color: rgb(255.0, 255.0, 255.0, 0.4), rgb(0.0,0.0,0.0, 0.4); + -fx-background-insets: 3.0 2.0 -3.0 -2.0, 2.0 2.0 -2.0 -2.0; + -fx-padding: 0.25em; + -fx-shape: "M398.902,298.045c0.667,0,1.333,0,2,0c0,0.667,0,1.333,0,2c0.667,0,1.333,0,2,0c0,0.667,0,1.333,0,2c-0.667,0-1.333,0-2,0c0,0.666,0,1.332,0,1.999c-0.667,0-1.333,0-2,0c0-0.667,0-1.333,0-1.999c-0.666,0-1.333,0-1.999,0c0-0.667,0-1.334,0-2c0.666,0,1.333,0,1.999,0C398.902,299.378,398.902,298.711,398.902,298.045z"; +} + +.table-view .column-drag-header, +.tree-table-view .column-drag-header { + -fx-background-color: linear-gradient(rgb(224.0, 224.0, 224.0) 25.0%, rgb(214.0, 214.0, 214.0) 50.0%, rgb(207.0, 207.0, 207.0) 50.0%, + rgb(209.0, 209.0, 209.0) 98.0% , rgb(218.0, 218.0, 218.0) 100.0%); + -fx-border-color: transparent; + -fx-opacity: 0.6; +} + +.table-view /*> column-header-background > nested-column-header >*/ .arrow, +.tree-table-view /*> column-header-background > nested-column-header >*/ .arrow { + -fx-background-color: rgb(255.0, 255.0, 255.0, 0.4), rgb(0.0,0.0,0.0, 0.4); + -fx-background-insets: 1.5 0.5 -1.0 0.5, 0.0, 0.0 0.5 0.0 0.5; + -fx-padding: 0.25em; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} + +/* This is shown when the table has no rows and/or no columns. */ +.table-view .empty-table, +.tree-table-view .empty-table { + -fx-background-color: white; +} + .tree-table-row-cell:empty .check-box-tree-table-cell, + .table-row-cell:empty .check-box-table-cell, + .list-cell:empty { + -fx-opacity:0.0; + } + +.check-box-tree-table-cell, +.check-box-table-cell { + -fx-alignment: center; +} + +/******************************************************************************* + * * + * TreeView and TreeCell * + * * + ******************************************************************************/ + +.tree-view { + -fx-background-color: white; + -fx-background-insets: 0.5; + -fx-border-color: rgb(156.0, 156.0, 156.0) rgb(190.0, 190.0, 190.0) rgb(190.0, 190.0, 190.0) rgb(190.0, 190.0, 190.0); + -fx-border-width: 1.0; + -fx-border-insets: 0.0; +} + +.tree-cell { + -fx-background-color: white; + -fx-padding: 0.083333em; + -fx-text-fill: -fx-text-base-color; + -fx-indent: 13.0; +} + +.tree-cell .label { + -fx-padding: 0.0em 0.0em 0.0em 0.25em; +} + +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:focused:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected:hover, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:focused:selected:hover { + -fx-background-color: rgb(60.0, 119.0, 212.0); + -fx-text-fill: white; +} + +.tree-cell > .tree-disclosure-node, +.tree-table-row-cell > .tree-disclosure-node { + -fx-padding: 4.0; + -fx-background-color: transparent; +} + +.tree-cell > .tree-disclosure-node > .arrow, +.tree-table-row-cell > .tree-disclosure-node > .arrow { + -fx-background-color: rgb(134.0, 134.0, 134.0); + -fx-padding: 0.25em 0.333333em 0.153846em 0.333333em; + -fx-background-insets: 0.0 0.5 0.0 0.5; + -fx-shape: "M 0 -4 L 8 0 L 0 4 z"; + -fx-scale-shape: false; +} + +.tree-cell:expanded > .tree-disclosure-node > .arrow, +.tree-table-row-cell:expanded > .tree-disclosure-node > .arrow { + -fx-rotate: 90.0; +} + +.tree-view > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:hover, +.tree-table-row-cell:filled:hover, +.tree-view > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected:hover, +.tree-table-row-cell:filled:selected:hover { + -fx-background-color: -fx-cell-hover-color; + -fx-text-fill: -fx-text-base-color; +} + +.tree-view > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected > .tree-disclosure-node > .arrow, +.tree-view > .virtual-flow > .clipped-container > .sheet > .tree-cell:selected > .tree-disclosure-node > .arrow, +.tree-cell:filled:hover > .tree-disclosure-node > .arrow, +.tree-table-row-cell:filled:hover > .tree-disclosure-node > .arrow { + -fx-background-color: rgb(134.0, 134.0, 134.0); +} + +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected:focused > .tree-disclosure-node > .arrow, +.tree-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-cell:filled:selected:hover:focused > .tree-disclosure-node > .arrow, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:selected:hover > .tree-disclosure-node > .arrow, +.tree-table-view:focused > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:selected > .tree-disclosure-node > .arrow { + -fx-background-color: white; +} + +/******************************************************************************* + * * + * TitledPane * + * * + ******************************************************************************/ + +.titled-pane { + -fx-text-fill: -fx-text-base-color; + -fx-border-color: rgb(146.0, 146.0, 146.0); + -fx-border-width: 1.0 0.0 1.0 0.0; +} + +.titled-pane:focused > .title > .arrow-button > .arrow { + -fx-effect: dropshadow(one-pass-box , rgb(104.0, 155.0, 201.0), 6.5, 0.8 , 0.0, 0.0); +} + +.titled-pane > .title { + -fx-padding: 0.166667em 0.833333em 0.25em 0.833333em; +} + +.titled-pane > .title > .arrow-button { + -fx-background-color: null; + -fx-background-insets: 0.0; + -fx-background-radius: 0.0; + -fx-padding: 0.0em 0.25em 0.0em 0.0em; +} + +.titled-pane > .title > .arrow-button > .arrow { + -fx-background-color: rgb(134.0, 134.0, 134.0), rgb(176.0, 176.0, 176.0, 0.3); + -fx-background-insets: 0.5 0.0 -0.5 0.0, 0.0; + -fx-padding: 0.25em 0.3125em 0.25em 0.3125em; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} + +.titled-pane > *.content { + -fx-padding: 0.167em; +} + + +/******************************************************************************* + * * + * Accordion * + * * + ******************************************************************************/ + +.accordion > .titled-pane { + -fx-border-width: 1.0 0.0 0.0 0.0; +} + +.accordion > .first-titled-pane { + -fx-border-color: transparent; + -fx-border-width: 0.0; +} + + +/******************************************************************************* + * * + * SplitPane * + * * + ******************************************************************************/ +.tab-pane > * > .split-pane, +.split-pane > * > .tab-pane, +.split-pane > * > .table-view, +.split-pane > * > .list-view, +.split-pane > * > .tree-view, +.split-pane > * > .scroll-pane, +.split-pane > * > .split-pane { + -fx-border-width: 0.0; + -fx-padding: 0.0; + } + +.split-pane { + -fx-border-color: rgb(175.0, 175.0, 175.0); + -fx-border-width: 1.0; + -fx-background-color: white; + -fx-padding: 0.0; +} + +.split-pane > .split-pane-divider { + -fx-padding: 0.0em 0.307692em 0.0em 0.307692em; +} + +/* horizontal the two nodes are placed to the left/right of each other. */ +.split-pane:horizontal > .split-pane-divider { + -fx-border-color: transparent rgb(180.0, 180.0, 180.0) transparent rgb(180.0, 180.0, 180.0); + -fx-border-width: 1.0; + -fx-background-color: linear-gradient(to right, rgb(252.0, 252.0, 252.0), rgb(224.0, 224.0, 224.0)); +} + +/* vertical the two nodes are placed on top of each other. */ +.split-pane:vertical > .split-pane-divider { + -fx-border-color: rgb(180.0, 180.0, 180.0) transparent rgb(180.0, 180.0, 180.0) transparent; + -fx-border-width: 1.0; + -fx-background-color: linear-gradient(rgb(252.0, 252.0, 252.0), rgb(224.0, 224.0, 224.0)); +} + +.split-pane > .split-pane-divider > .horizontal-grabber, +.split-pane > .split-pane-divider > .vertical-grabber { + -fx-padding: 0.153846em; + -fx-background-color: radial-gradient(focus-angle 90.0deg, focus-distance 15.0%, center 75.0% 50.0%, radius 65.0%, rgb(203.0, 203.0, 203.0), rgb(167.0, 167.0, 167.0)); + -fx-background-insets: 0.0; + -fx-shape: "m 7.3638763,7.3678179 c 0,1.9327203 -1.7375658,3.4995001 -3.8809619,3.4995001 -2.143396,0 -3.88096185,-1.5667798 -3.88096185,-3.4995001 0,-1.9327204 1.73756585,-3.4994998 3.88096185,-3.4994998 2.1340502,0 3.8677202,1.5536502 3.8808881,3.4779066"; +} + +/******************************************************************************* + * * + * TabPane * + * * + ******************************************************************************/ + +.tab-pane { + -fx-tab-alignment: CENTER; +} + +.tab-pane:top > .tab-content-area { + -fx-border-width: 0.0 0.5 0.5 0.5; + -fx-border-radius: 0.0 0.0 6.0 6.0; + -fx-border-insets: 0.0 5.0 5.0 5.0; + -fx-background-insets: 0.0 5.0 5.0 5.0; + -fx-background-radius: 0.0 0.0 6.0 6.0; + -fx-border-color: rgb(193.0, 193.0, 193.0); + -fx-background-color: rgb(227.0, 227.0, 227.0), + linear-gradient(to right, rgb(168.0, 168.0, 168.0, 0.5) 0.0%, transparent 0.4%, transparent 99.6%, rgb(168.0, 168.0, 168.0, 0.5)); +} + +.tab-pane:right > .tab-content-area{ + -fx-border-width: 0.5 0.0 0.5 0.5; + -fx-border-radius: 6.0 0.0 0.0 6.0; + -fx-border-insets: 5.0 0.0 5.0 5.0; + -fx-background-insets: 5.0 0.0 5.0 5.0; + -fx-background-radius: 6.0 0.0 0.0 6.0; + -fx-border-color: rgb(193.0, 193.0, 193.0); + -fx-background-color: rgb(227.0, 227.0, 227.0), + linear-gradient(to bottom, rgb(168.0, 168.0, 168.0, 0.5) 0.0%, transparent 2.0%, transparent 98.0%, rgb(168.0, 168.0, 168.0, 0.5)); +} + +.tab-pane:bottom > .tab-content-area{ + -fx-border-width: 0.5 0.5 0.0 0.5; + -fx-border-radius: 6.0 6.0 0.0 0.0; + -fx-border-insets: 5.0 5.0 0.0 5.0; + -fx-background-insets: 5.0 5.0 0.0 5.0; + -fx-background-radius: 6.0 6.0 0.0 0.0; + -fx-border-color: rgb(193.0, 193.0, 193.0); + -fx-background-color: rgb(227.0, 227.0, 227.0), + linear-gradient(to right, rgb(168.0, 168.0, 168.0, 0.5) 0.0%, transparent 0.4%, transparent 99.6%, rgb(168.0, 168.0, 168.0, 0.5)); +} + +.tab-pane:left > .tab-content-area{ + -fx-border-width: 0.5 0.5 0.5 0.0; + -fx-border-radius: 0.0 6.0 6.0 0.0; + -fx-border-insets: 5.0 5.0 5.0 0.0; + -fx-background-insets: 5.0 5.0 5.0 0.0; + -fx-background-radius: 0.0 6.0 6.0 0.0; + -fx-border-color: rgb(193.0, 193.0, 193.0); + -fx-background-color: rgb(227.0, 227.0, 227.0), + linear-gradient(to bottom, rgb(168.0, 168.0, 168.0, 0.5) 0.0%, transparent 2.0%, transparent 98.0%, rgb(168.0, 168.0, 168.0, 0.5)); +} + +.tab-pane > .tab-header-area > .headers-region > .tab { + -fx-background-color: rgb(255.0, 255.0, 255.0), + linear-gradient(rgb(255.0, 255.0, 255.0) 25.0%, rgb(243.0, 243.0, 243.0) 50.0%, rgb(236.0, 236.0, 236.0) 50.0%, rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-padding: 0.07em 0.75em 0.1em 0.75em; + -fx-content-display: LEFT; + -fx-background-radius: 0.0, 0.0; + -fx-background-insets: 0.0, 1.0 0.0 0.0 0.0; + -fx-border-radius: 0.0; + -fx-border-width:0.5 0.0 0.5 1.0; + -fx-border-style: solid solid solid segments(15.0, 2.5) phase 15.0 ; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) rgb(203.0, 203.0, 203.0); +} + +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-text-fill: -fx-text-base-color; +} + +.tab-pane > .tab-header-area > .headers-region > .first-tab{ + -fx-background-radius: 4.0 0.0 0.0 4.0, 4.0 0.0 0.0 4.0; + -fx-background-insets: 0.0, 1.0 0.0 0.0 1.0; + -fx-border-radius: 4.0 0.0 0.0 4.0; + -fx-border-width:0.5 0.0 0.5 0.5; + -fx-border-style: solid; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0); +} + +.tab-pane > .tab-header-area > .headers-region > .last-tab{ + -fx-background-radius: 0.0 4.0 4.0 0.0, 0.0 4.0 4.0 0.0; + -fx-background-insets: 0.0, 1.0 1.0 0.0 0.0; + -fx-border-radius: 0.0 4.0 4.0 0.0; + -fx-border-width:0.5 0.5 0.5 1.0; + -fx-border-style: solid solid solid segments(15.0, 2.25) phase 15.0 centered; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) rgb(203.0, 203.0, 203.0); +} + +.tab-pane > .tab-header-area > .headers-region > .tab.neighbor, +.tab-pane > .tab-header-area > .headers-region > .last-tab.neighbor{ + -fx-border-style: solid solid solid solid; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) + rgb(74.0, 74.0, 74.0); +} + +.tab-pane > .tab-header-area > .headers-region > .single-tab{ + -fx-background-radius: 4.0 , 4.0; + -fx-background-insets: 0.0, 1.0; + -fx-border-radius: 4.0; + -fx-border-width:0.5; + -fx-border-style: solid; + -fx-border-color: rgb(129.0, 129.0, 129.0); +} + +.tab-pane:top > .tab-header-area, +.tab-pane:bottom > .tab-header-area{ + -fx-padding: 0.0em 0.5em 0.0em 0.5em; +} + +.tab-pane:right > .tab-header-area, +.tab-pane:left > .tab-header-area{ + -fx-padding: 0.5em 0.0em 0.5em 0.0em; +} + +.tab-pane > .tab-header-area > .tab-header-background { + -fx-background-color: rgb(227.0, 227.0, 227.0); + -fx-background-insets: 9.0 5.0 0.0 5.0; + -fx-background-radius: 6.0 6.0 0.0 0.0; + -fx-border-color: rgb(193.0, 193.0, 193.0); + -fx-border-width: 0.5 0.5 0.0 0.5; + -fx-border-radius: 6.0 6.0 0.0 0.0; + -fx-border-insets: 9.0 5.0 0.0 5.0; + -fx-effect: innershadow(one-pass-box, rgb(168.0, 168.0, 168.0, 0.6), 4.0, 0.6, 0.0, 2.0); +} + +/* CONTROL BUTTONS */ +.tab-pane > .tab-header-area > .control-buttons-tab { + -fx-background-color: + linear-gradient(rgb(255.0, 255.0, 255.0) 25.0%, rgb(243.0, 243.0, 243.0) 50.0%, rgb(236.0, 236.0, 236.0) 50.0%, rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-background-insets: 0.0; + -fx-background-radius: 15.0; + -fx-border-color: rgb(129.0, 129.0, 129.0); + -fx-border-radius: 15.0; + -fx-border-width: 0.5; + -fx-padding: 0.27em 0.4em 0.27em 0.4em; +} + +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button { + -fx-background-color: transparent; + -fx-padding: 0.4em 0.0em 0.5em 0.0em; +} + +.tab-pane > .tab-header-area > .control-buttons-tab > .container > .tab-down-button .arrow { + -fx-background-color: rgb(64.0, 64.0, 64.0); + -fx-background-insets: 1.0 0.0 6.0 0.0; + -fx-padding: 0.8em 0.3em 0.2em 0.3em; + -fx-shape: "M 0 0 H 7 L 3.5 4 z"; +} + +.tab-pane:bottom > .tab-header-area > .control-buttons-tab > .container > .tab-down-button .arrow { + -fx-background-insets: 7.0 0.0 0.0 0.0; +} + +/* TABPANE SELECTED STATE */ +.tab-pane > .tab-header-area > .headers-region > .tab:selected { + -fx-background-color: rgb(97.0, 97.0, 97.0), -toggle-selected-base, -toggle-shadow; + -fx-background-insets:0.0, 1.0 1.0 0.5 1.0, 1.0; + -fx-effect:innershadow(one-pass-box, rgb(94.0, 94.0, 94.0, 0.5), 5.5, 0.7, 0.0, 2.0); + -fx-border-style: solid solid solid solid centered; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) rgb(74.0, 74.0, 74.0); +} + +.tab-pane > .tab-header-area > .headers-region > .tab:selected > .tab-container > .tab-label { + -fx-text-fill: white; + -fx-effect: dropshadow(two-pass-box , rgba(0.0, 0.0, 0.0, 0.4), 1.0, 0.0 , 0.0, 0.5); +} + +.tab-pane > .tab-header-area > .headers-region > .last-tab:selected{ + -fx-border-style: solid solid solid solid centered; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) rgb(74.0, 74.0, 74.0); +} + + +/* Tabs are not closeable in Aqua! +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-close-button { + -fx-background-color: rgb(255.0, 255.0, 255.0); + -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; + -fx-effect: dropshadow(two-pass-box , rgba(0.0, 0.0, 0.0, 0.3), 1.0, 0.0 , 0.0, 1.0); +}*/ + + +.tab-pane > .tab-header-area > .headers-region > .tab:pressed { + -fx-background-color: rgb(87.0, 87.0, 87.0), -toggle-armed-base, -toggle-shadow-armed; + -fx-background-insets:0.0, 1.0 1.0 0.0 1.0, 1.0; + -fx-text-fill: white; + -fx-border-style: solid solid solid solid centered; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) rgb(74.0, 74.0, 74.0); +} + +.tab-pane > .tab-header-area > .headers-region > .last-tab:pressed{ + -fx-border-style: solid solid solid solid centered; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) rgb(74.0, 74.0, 74.0); +} + +/* TODO: Focus handling + * .tab-pane:focused > .tab-header-area > .headers-region > .tab:selected .focus-indicator{ + -fx-effect: dropshadow(one-pass-box , rgb(104, 155, 201), 6.5, 0.8 , 0.0, 0.0); +} */ + +.tab-pane > .tab-header-area > .headers-region > .tab:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.tab:disable { + -fx-opacity: -fx-disabled-opacity; +} + + + +/** + * TabPane with small Icon-Buttons and no text. Known of some preferences dialogs + */ + +.tab-pane.tabpane-type-small-icon-buttons { + -fx-tab-alignment: LEFT; +} + +.tab-pane.tabpane-type-small-icon-buttons > .tab-content-area{ + -fx-border-width: 0.0; + -fx-border-radius: 0.0; + -fx-border-insets: 0.0; + -fx-background-insets: 0.0; + -fx-background-radius: 0.0 ; + -fx-border-color: transparent; + -fx-background-color: transparent; +} + +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .tab-header-background { + -fx-background-color: transparent; + -fx-background-insets: 0.0; + -fx-background-radius: 0.0; + -fx-border-color: rgb(193.0, 193.0, 193.0); + -fx-border-width: 0.0 0.0 1.0 0.0; + -fx-border-radius: 0.0; + -fx-border-insets:0.0; +} + +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area { + -fx-padding: 0.0em; +} + +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .tab, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .first-tab, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .last-tab, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .tab.neighbor, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .single-tab { + -fx-background-color: linear-gradient(rgb(255.0, 255.0, 255.0), rgb(246.0, 246.0, 246.0)), + linear-gradient(rgb(255.0, 255.0, 255.0) 25.0%, rgb(243.0, 243.0, 243.0) 50.0%, rgb(236.0, 236.0, 236.0) 50.0%, rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-padding: 0.24em 0.166667em 0.24em 0.166667em; + -fx-content-display: CENTER; + -fx-background-radius: 0.0, 0.0; + -fx-background-insets: 0.0 0.0 1.0 0.0, 0.5 0.0 1.5 0.0; + -fx-border-radius: 0.0; + -fx-border-width: 0.0 1.0 0.0 0.0; + -fx-border-insets: 0.0 0.0 1.0 0.0; + -fx-border-style: solid; + -fx-border-color: rgb(193.0, 193.0, 193.0, 0.5); +} + +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .tab:selected, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .tab:pressed, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .first-tab:selected, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .first-tab:pressed, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .last-tab:selected, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .last-tab:pressed, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .tab.neighbor:selected, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .tab.neighbor:pressed, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .single-tab:selected, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .single-tab:pressed { + -fx-background-color: linear-gradient(rgb(224.0, 237.0, 253.0), rgb(204.0, 242.0, 249.0)), + linear-gradient(rgb(207.0, 222.0, 238.0) 0.0%, rgb(163.0, 203.0, 234.0) 50.0%, rgb(111.0, 176.0, 227.0) 50.0%, rgb(189.0, 237.0, 247.0) 100.0% ); + -fx-border-color: linear-gradient(rgb(175.0, 188.0, 202.0) 0.0%, rgb(138.0, 170.0, 199.0) 50.0%, rgb(92.0, 148.0, 192.0) 50.0%, rgb(159.0, 200.0, 210.0) 100.0% ); + -fx-border-width: 0.0 1.0 0.0 0.0; + -fx-border-insets: 0.0 0.0 1.0 0.0; + -fx-border-style: solid; + -fx-effect: null; +} + +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .tab:selected > .tab-container > .tab-label, +.tab-pane.tabpane-type-small-icon-buttons > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-text-fill: -fx-text-base-color; + -fx-effect: null; +} + +/** + * TabPane with bigger Icon-Buttons and Text underneath it. Known of almost all preferences dialogs + */ + + +.tab-pane.tabpane-type-icon-buttons { + -fx-tab-alignment: LEFT; +} + +.tab-pane.tabpane-type-icon-buttons > .tab-content-area{ + -fx-border-width: 0.0; + -fx-border-radius: 0.0; + -fx-border-insets: 0.0; + -fx-background-insets: 0.0; + -fx-background-radius: 0.0 ; + -fx-border-color: transparent; + -fx-background-color: transparent; +} + +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .tab-header-background { + -fx-background-color: + linear-gradient(rgb(222.0, 222.0, 222.0), rgb(173.0, 173.0, 173.0) 99.0%, rgb(233.0, 233.0, 233.0)); + -fx-background-insets: 0.0; + -fx-background-radius: 0.0; + -fx-border-width: 0.0 0.0 1.0 0.0; + -fx-border-radius: 0.0; + -fx-border-color: rgb(103.0, 103.0, 103.0); + -fx-border-insets: 0.0; + -fx-padding: 0.833em 0.416667em 0.833em 0.416667em; + -fx-effect: null; +} + +.tab-pane.tabpane-type-icon-buttons.inactive > .tab-header-area > .tab-header-background { + -fx-background-color: linear-gradient(rgb(244.0, 244.0, 244.0), rgb(224.0, 224.0, 224.0) 99.0%, rgb(227.0, 227.0, 227.0)); + -fx-border-color: rgb(166.0, 166.0, 166.0); +} + +.tab-pane.tabpane-type-icon-buttons > .tab-header-area { + -fx-padding: 0.0em 0.25em 0.0em 0.25em; +} + +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .first-tab, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .last-tab, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab.neighbor, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .single-tab { + -fx-background-color:transparent; + -fx-padding: 0.24em 0.25em 0.0em 0.25em; + -fx-content-display: CENTER; + -fx-background-radius: 0.0; + -fx-background-insets: 0.0; + -fx-border-radius: 0.0; + -fx-border-width: 0.0 1.0 0.0 1.0; + -fx-border-insets: 0.0; + -fx-border-style: solid; + -fx-border-color: transparent; +} + +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab:selected, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab:pressed, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .first-tab:selected, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .first-tab:pressed, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .last-tab:selected, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .last-tab:pressed, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab.neighbor:selected, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab.neighbor:pressed, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .single-tab:selected, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .single-tab:pressed { + -fx-background-color: linear-gradient(rgb(168.0, 168.0, 168.0, 0.0) 0.0%, rgb(168.0, 168.0, 168.0) 50.0%, rgb(168.0, 168.0, 168.0, 0.0) 100.0% ); + -fx-border-color: linear-gradient(rgb(105.0, 105.0, 105.0, 0.0) 0.0%, rgb(105.0, 105.0, 105.0) 50.0%, rgb(105.0, 105.0, 105.0, 0.0) 100.0% ), + linear-gradient(rgb(147.0, 147.0, 147.0, 0.0) 0.0%, rgb(147.0, 147.0, 147.0) 50.0%, rgb(147.0, 147.0, 147.0, 0.0) 100.0% ); + -fx-border-width: 0.0 0.5 0.0 0.5, 0.0 0.5 0.0 0.5; + -fx-border-insets: 0.0, 0.0 0.5 0.0 0.5; + -fx-border-style: solid; + -fx-effect: null; +} + +.tab-pane.tabpane-type-icon-buttons.inactive > .tab-header-area > .headers-region > .tab:selected, +.tab-pane.tabpane-type-icon-buttons.inactive > .tab-header-area > .headers-region > .first-tab:selected, +.tab-pane.tabpane-type-icon-buttons.inactive > .tab-header-area > .headers-region > .last-tab:selected, +.tab-pane.tabpane-type-icon-buttons.inactive > .tab-header-area > .headers-region > .tab.neighbor:selected, +.tab-pane.tabpane-type-icon-buttons.inactive > .tab-header-area > .headers-region > .single-tab:selected { + -fx-background-color: linear-gradient(rgb(168.0, 168.0, 168.0, 0.0) 0.0%, rgb(168.0, 168.0, 168.0, 0.5) 50.0%, rgb(168.0, 168.0, 168.0, 0.0) 100.0% ); + -fx-border-color: linear-gradient(rgb(105.0, 105.0, 105.0, 0.0) 0.0%, rgb(105.0, 105.0, 105.0, 0.5) 50.0%, rgb(105.0, 105.0, 105.0, 0.0) 100.0%), + linear-gradient(rgb(147.0, 147.0, 147.0, 0.0) 0.0%, rgb(147.0, 147.0, 147.0, 0.5) 50.0%, rgb(147.0, 147.0, 147.0, 0.0) 100.0% ); + -fx-effect: null; +} + +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab:selected > .tab-container > .tab-label, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-text-fill: -fx-text-base-color; + -fx-font-size: 11; + -fx-content-display: top; + -fx-effect: null; +} + +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab:selected > .tab-container > .tab-label > .text, +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label > .text { + -fx-effect: dropshadow(one-pass-box , rgb(235.0, 235.0, 235.0, 0.9), 1.0, 0.8 , 0.0, 1.0); + -fx-translate-y: -7; +} + +.tab-pane.tabpane-type-icon-buttons.inactive > .tab-header-area > .headers-region > .tab:selected > .tab-container > .tab-label, +.tab-pane.tabpane-type-icon-buttons.inactive > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label { + -fx-text-fill: derive(-fx-text-base-color, 50% ) ; +} + +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab:focused > .tab-container > .tab-label > .icon { + -fx-effect: dropshadow(one-pass-box , rgb(104.0, 155.0, 201.0), 6.5, 0.8 , 0.0, 0.0); +} + +.tab-pane.tabpane-type-icon-buttons > .tab-header-area > .headers-region > .tab:pressed > .tab-container > .tab-label > .icon { + -fx-blend-mode: difference; +} + + + + +/******************************************************************************* + * * + * ComboBox * + * * + ******************************************************************************/ + +/* -------------- CODE FOR THE NON-EDITABLE COMBO-BOX -------------- */ +.combo-box-base > .arrow-button { + -fx-background-color: + linear-gradient(rgb(155.0, 155.0, 155.0) 0.0%, rgb(172.0, 172.0, 172.0) 100.0%), + rgb(255.0, 255.0, 255.0), + linear-gradient(rgb(255.0, 255.0, 255.0) 25.0%, rgb(243.0, 243.0, 243.0) 50.0%, rgb(236.0, 236.0, 236.0) 50.0%, rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-background-insets: 0.5 0.5 0.5 0.0, 1.0 1.5 1.0 0.5, 1.0 2.0 1.0 0.5; + -fx-background-radius: 0.0 4.0 4.0 0.0, 0.0 3.0 3.0 0.0, 0.0 3.0 3.0 0.0; + -fx-border-width: 0.5 0.5 0.5 0.0; + -fx-border-color: rgb(169.0, 169.0, 169.0) rgb(205.0, 205.0, 205.0) rgb(205.0, 205.0, 205.0) rgb(205.0, 205.0, 205.0); + -fx-border-radius: 0.0 4.0 4.0 0.0; + -fx-padding: 0.0em 0.4em 0.0em 0.433333em; +} + +.combo-box-base:showing > .arrow-button { + -fx-background-color: + linear-gradient(rgb(155.0, 155.0, 155.0) 0.0%, rgb(172.0, 172.0, 172.0) 100.0%), + linear-gradient(rgb(225.0, 225.0, 225.0) 25.0%, rgb(213.0, 213.0, 213.0) 50.0%, rgb(207.0, 207.0, 207.0) 50.0%, rgb(212.0, 212.0, 212.0) 100.0% ); + -fx-background-insets: 0.5 0.5 0.5 0.0, 1.0 1.5 1.0 0.5; +} + +.combo-box-base > .arrow-button > .arrow, +.web-view .form-select-button .arrow { + -fx-background-insets: 1.0 0.0 -1.0 0.0, 0.5 0.0 -0.5 0.0; + -fx-background-color: rgb(255.0, 255.0, 255.0), rgb(71.0, 71.0, 71.0); + -fx-padding: 0.2em 0.266667em 0.166667em 0.266667em; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} + +.combo-box-base:disabled { + -fx-opacity: 1.0 ; +} + +.combo-box-base > .text-field:disabled, +.combo-box-base > .arrow-button:disabled, +.combo-box-base > .list-cell:disabled { + -fx-opacity: -fx-disabled-opacity; +} + +.web-view .form-select-button { + -fx-background-radius: 2.0, 2.0, 1.0, 0.0; + -fx-background-insets: 2.0 2.0 1.0 2.0, 2.0, 3.0, 4.0; +} + +/* -------------- CODE FOR THE EDITABLE COMBO-BOX -------------- */ + +/* ------- TEXTBOX SEGMENT OF COMBO BOX ------- */ +.combo-box-base:editable > .text-field { + -fx-border-color: rgb(169.0, 169.0, 169.0) rgb(205.0, 205.0, 205.0) rgb(205.0, 205.0, 205.0) rgb(205.0, 205.0, 205.0); + -fx-border-width: 0.5 0.0 0.5 0.5; + -fx-background-color: linear-gradient(rgb(155.0, 155.0, 155.0) 0.0%, rgb(172.0, 172.0, 172.0) 100.0%), + linear-gradient(rgb(224.0, 224.0, 224.0) 0.0%, rgb(255.0, 255.0, 255.0) 10.0%), + linear-gradient(to left, rgb(224.0, 224.0, 224.0) 0.0%, transparent 1.0%); +} + +.combo-box-base:editable > .arrow-button { + -fx-background-color: + linear-gradient(rgb(155.0, 155.0, 155.0) 0.0%, rgb(172.0, 172.0, 172.0) 100.0%), + rgb(255.0, 255.0, 255.0), + linear-gradient(rgb(255.0, 255.0, 255.0) 25.0%, rgb(243.0, 243.0, 243.0) 50.0%, rgb(236.0, 236.0, 236.0) 50.0%, rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-background-insets: 0.0 0.5 3.5 0.0, 0.5 1.0 4.0 0.0, 1.0 1.0 4.0 0.0; + -fx-background-radius: 0.0 4.0 4.0 0.0, 0.0 3.0 3.0 0.0, 0.0 3.0 3.0 0.0; + -fx-border-width: 0.5 0.5 0.5 0.0; + -fx-border-color: rgb(169.0, 169.0, 169.0) rgb(205.0, 205.0, 205.0) rgb(205.0, 205.0, 205.0) rgb(205.0, 205.0, 205.0); + -fx-border-insets: -0.5 0.0 3.0 0.0; + -fx-border-radius: 0.0 4.0 4.0 0.0; + -fx-padding: 0.230769em 0.4em 0.230769em 0.433333em; +} + +/* -------------- STYLES FOR THE DEFAULT LISTVIEW-BASED COMBOBOX ------------- */ + +.combo-box { + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +/* Customize the ListCell that appears in the ComboBox button itself */ +.combo-box > .list-cell { + -fx-text-fill: -fx-text-base-color; + -fx-padding: 0.12em 0.5em 0.18em 0.583333em; + -fx-border-radius: 4.0 0.0 0.0 4.0; + -fx-border-width: 0.5 0.0 0.5 0.5; + -fx-border-color: rgb(169.0, 169.0, 169.0) rgb(205.0, 205.0, 205.0) rgb(205.0, 205.0, 205.0) rgb(205.0, 205.0, 205.0); + -fx-background-color: linear-gradient(rgb(155.0, 155.0, 155.0) 0.0%, rgb(172.0, 172.0, 172.0) 100.0%), + -choice-base; + -fx-background-insets: 0.5 0.0 0.5 0.5, 1.0 0.0 1.0 1.0; + -fx-background-radius: 4.0 0.0 0.0 4.0, 4.0 0.0 0.0 4.0; + -fx-content-display: LEFT; + -fx-opacity: 1.0; +} + +.combo-box-popup > .list-view { + -fx-background-color: white; + -fx-background-insets: -3.0 0.0 0.0 0.0; + -fx-background-radius: 0.0; + -fx-border-color: rgb(0.0,0.0,0.0,0.4); + -fx-border-insets: -3.0 0.0 0.0 0.0; + -fx-border-width: 0.5 0.5 1.5 0.5; + -fx-effect: dropshadow( three-pass-box , rgba(0.0,0.0,0.0,0.6) , 8.0, 0.0 , 0.0 , 0.0 ); +} + +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-padding: 4.0 0.0 4.0 5.0; + -fx-background-color: white; +} + +.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: rgb(60.0, 119.0, 212.0); + -fx-text-fill: white; +} + + +/* -------------------------- STYLES FOR THE COLOR-PICKER CONTROL ----- */ + +.color-picker { + -fx-color-rect-width: 1.7em; + -fx-color-rect-height: 0.8em; + + -fx-border-radius: 3.5; + -fx-border-width: 0.5; + -fx-border-color: rgb(207.0, 207.0, 207.0); + + -fx-background-color: linear-gradient(rgb(147.0, 147.0, 147.0) 0.0%, rgb(127.0, 127.0, 127.0) 100.0%), -choice-base; + -fx-background-insets: 0.5, 1.0; + -fx-background-radius: 3.5, 3.5; + -fx-padding:0.0 1.2 0.0 0.0; + -fx-alignment: CENTER; + -fx-content-display: LEFT; + + -fx-aqua-inner-focus-color: rgb(104, 155, 201, 0.8); + -fx-aqua-outer-focus-color: rgb(120, 171, 217); +} + +.color-picker > .arrow-button, .color-picker.button > .arrow-button > .arrow { + -fx-background-color: null; + -fx-border-color: null; +} + +.color-picker.split-button > .arrow-button { + -fx-background-color: null; + -fx-background-insets: 0.0; + -fx-border-width: 0.0 0.0 0.0 1.0; + -fx-border-color: linear-gradient(rgb(155.0, 155.0, 155.0) 0.0%, rgb(172.0, 172.0, 172.0) 100.0%); + -fx-border-radius: 0.0 3.5 3.5 0.0; + -fx-border-insets: 0.0 -1.0 0.0 0.0; +} + +.color-picker.split-button:showing > .arrow-button { + -fx-background-color: + linear-gradient(rgb(225.0, 225.0, 225.0) 25.0%, rgb(213.0, 213.0, 213.0) 50.0%, rgb(207.0, 207.0, 207.0) 50.0%, rgb(212.0, 212.0, 212.0) 100.0% ); + -fx-background-insets: 1.0 -1.0 -1.0 0.0; +} + +.color-picker.split-button > .arrow-button > .arrow{ + -fx-background-color: rgb(255.0, 255.0, 255.0), rgb(71.0, 71.0, 71.0); + -fx-padding: 0.2em 0.266667em 0.2em 0.266667em; + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} + +.color-picker > .arrow-button > .arrow{ + -fx-background-color: rgb(110.0, 110.0, 110.0, 0.5), rgb(71.0, 71.0, 71.0); + -fx-background-insets: 1.0 -1.0 0.0 0.0, 1.0 0.0 0.0 0.0; + -fx-padding: 0.5em 0.18em 0.366667em 0.18em; + -fx-shape: "m 4.5,3.03125 -3.5,5.5 7,0 z m -3.5,10.875 3.5,5.5 3.5,-5.5 z"; +} + +.color-picker:showing > .arrow-button { + -fx-background-color: null +} + +.color-picker > .color-picker-label{ + -fx-padding: 0.11em 0.3em 0.12em 0.613em; +} + +.color-picker > .color-picker-label > .picker-color{ + -fx-padding: 0.0em 0.15em 0.0em 0.0em; +} + + +.color-picker > .color-picker-label > .picker-color > .picker-color-rect { + -fx-stroke: rgb(141.0, 141.0, 141.0); + -fx-stroke-width: 1.0; +} + +/* First PopUp when ColorPicker is pressed */ +.color-palette { + -fx-spacing: 15.0px; + -fx-background-color:rgb(255.0, 255.0, 255.0, 0.95); + -fx-background-radius: 6.0; + -fx-border-width: 0.5; + -fx-border-radius: 6.0; + -fx-border-color: rgb(209.0, 209.0, 209.0, 0.4); + -fx-padding: 15.0 15.0 15.0 15.0; + -fx-effect: dropshadow( three-pass-box , rgba(0.0,0.0,0.0,0.6) , 8.0, 0.0 , 0.0 , 0.0 ); +} + +.color-palette > .color-picker-grid > .color-square > .color-rect { + -fx-stroke: rgb(141.0, 141.0, 141.0); + -fx-stroke-width: 0.4; + -fx-border-color: black; +} + +.color-palette > .color-picker-grid > .color-square { + -fx-background-color: transparent; + -fx-background-insets: -1.0, 0.0; + -fx-padding: 0.5; + -fx-border: black; +} + +/* the color over which the user is hovering */ +.color-palette > .color-picker-grid > .color-square:focused, +.color-palette > .color-picker-grid > .color-square:selected:focused { + -fx-background-color: rgb(229.0, 229.0, 229.0); +} + +/* the currently selected color */ +.color-palette > .color-picker-grid > .color-square:selected { + -fx-background-color: black; +} + +.color-palette > .separator > .line { + -fx-background-color: rgb(229.0, 229.0, 229.0); + -fx-padding: 6.0 0.0 0.0 0.0; + -fx-background-insets: 4.0 -10.0 0.0 -10.0, 5.0 -10.0 0.0 -10.0; + -fx-border-style: none; + -fx-border-color: null; +} + +/* PopUp when Custom-Color is pressed */ +.custom-color-dialog > .color-rect-pane { + -fx-padding: 30.0 15.0 30.0 15.0; + -fx-background-color: rgb(237.0, 237.0, 237.0); +} + +.custom-color-dialog > .controls-pane { + -fx-padding: 10.0 15.0 10.0 0.0; + -fx-background-color: rgb(237.0, 237.0, 237.0); +} +.custom-color-dialog { + -fx-background-color: rgb(237.0, 237.0, 237.0); +} + +.custom-color-dialog .webcolor-field, +.custom-color-dialog .double-field, +.custom-color-dialog .integer-field, +.custom-color-dialog .input-field, +.custom-color-dialog .controls-pane .alpha-settings .text-field, +.custom-color-dialog .controls-pane .customcolor-controls-background, +.custom-color-dialog .controls-pane .current-new-color-grid { + -fx-padding: 3.0 5.0 3.0 5.0; +} + +.custom-color-dialog .controls-pane .current-new-color-grid .label { + -fx-padding: 3.0 0.0 3.0 5.0; +} + +.custom-color-dialog .controls-pane .current-new-color-grid .color-rect{ + -fx-padding: 15.0; +} + +.custom-color-dialog .input-field:disabled { + -fx-opacity: -fx-disabled-opacity; +} + + +/* -------------------------- STYLES FOR PAGINATION CONTROL ----- */ +.pagination { + -fx-padding: 0.416667em; + -fx-arrows-visible: true; + -fx-tooltip-visible: true; + -fx-page-information-visible: true; + -fx-page-information-alignment: bottom; +} +.pagination > .page { + -fx-background-color: transparent; +} + +.pagination > .pagination-control { + -fx-background-color: transparent; + -fx-padding: 0.833333em 0.0em 0.833333em 0.0em; +} + +.pagination > .pagination-control > .control-box { + -fx-spacing: 3.0; + -fx-alignment: center; +} + +.pagination > .pagination-control > .control-box > .number-button { + -fx-border-radius: 3.0em; + -fx-background-radius: 3.0em, 3.0em; + -fx-padding: 0.166667em; +} + +.pagination > .pagination-control > .control-box > .left-arrow-button { + -fx-border-radius: 3.0em; + -fx-background-radius: 3.0em, 3.0em; + -fx-padding: 0.166667em 0.416em 0.25em 0.166667em; +} + +.pagination > .pagination-control > .control-box > .right-arrow-button { + -fx-border-radius: 3.0em; + -fx-background-radius: 3.0em, 3.0em; + -fx-padding: 0.166667em 0.166667em 0.25em 0.25em; +} + +.pagination > .pagination-control .left-arrow { + -fx-background-color: rgb(255.0, 255.0, 255.0, 0.5), rgb(71.0, 71.0, 71.0); + -fx-background-insets: 1.0 0.0 -1.0 0.0, 0.0; + -fx-padding: 0.375em 0.291em 0.375em 0.291em; + -fx-shape: "M 0 0 L -13 7 L 0 13 z"; + -fx-scale-shape: true; +} + +.pagination > .pagination-control .right-arrow { + -fx-background-color: rgb(255.0, 255.0, 255.0, 0.5), rgb(71.0, 71.0, 71.0); + -fx-background-insets: 1.0 0.0 -1.0 0.0, 0.0; + -fx-padding: 0.375em 0.291em 0.375em 0.291em; + -fx-shape: "M 0 0 L 13 7 L 0 13 z"; + -fx-scale-shape: true; +} + +.pagination > .pagination-control > .control-box > .bullet-button { + -fx-border-width: 0.5; + -fx-border-insets: 3.0; + -fx-border-color: rgb(129.0, 129.0, 129.0); + -fx-border-radius: 3.0em; + -fx-background-color: rgb(250.0, 250.0, 250.0), + linear-gradient( + rgb(255.0, 255.0, 255.0) 0.0%, rgb(253.0,253.0,253.0) 25.0%, + rgb(244.0, 244.0, 244.0) 50.0%, rgb(236.0, 236.0, 236.0) 51.0%, + rgb(243.0, 243.0, 243.0) 100.0% ); + -fx-background-insets: 3.0, 4.0; + -fx-background-radius: 3.0em, 3.0em; + -fx-padding: 0.0em; + -fx-spacing: 14.0; +} + +.pagination > .pagination-control > .control-box > .bullet-button:selected { + -fx-border-color: linear-gradient( + rgb(100.0, 103.0, 124.0) 0.0%, rgb(92.0, 94.0, 116.0) 100.0%); + -fx-background-color: + linear-gradient( + rgb(228.0, 250.0, 255.0) 0.0%, #91bdee 50.0%, + #78b0ee 51.0%, rgb(228.0, 250.0, 255.0) 100.0% ); + -fx-background-insets: 3.0; + -fx-background-radius: 3.0em; +} + +.pagination > .pagination-control > .page-information { + -fx-padding: 0.416em 0.0 0.0 0.0; +} + + +/******************************************************************************** + * * + * HTMLEditor * + * * + ********************************************************************************/ + +.html-editor { + -fx-border-width: 0.5 0.5 0.5 0.5; + -fx-border-style: solid outside; + -fx-padding: 0.0; + -fx-border-color: rgb(115.0, 115.0, 115.0, 0.5); +} + +.html-editor > * > .top-toolbar { + -fx-background-color: + linear-gradient(to bottom, rgb(233.0, 233.0, 233.0), rgb(173.0, 173.0, 173.0) 99.0%, rgb(233.0, 233.0, 233.0)); + -fx-background-insets: 0.0; + -fx-border-color: rgb(107.0, 107.0, 107.0); + -fx-border-width: 0.0 0.0 1.0 0.0; + -fx-padding: 0.333em 0.5em 0.333em 0.5em; + -fx-spacing: 0.333em; +} + +.html-editor > * > .bottom-toolbar { + -fx-background-color: + linear-gradient(to bottom, rgb(233.0, 233.0, 233.0), rgb(180.0, 180.0, 180.0) 1.0%, rgb(184.0, 184.0, 184.0)); + -fx-background-insets: 0.0; + -fx-border-color: rgb(154.0, 154.0, 154.0); + -fx-border-width: 0.0 0.0 0.5 0.0; + -fx-padding: 0.166667em 0.5em 0.166667em 0.5em; + -fx-spacing: 0.333em; +} + +.html-editor-foreground, .html-editor-background { + -fx-color-label-visible: false; + -fx-color-rect-x: 0.0; + -fx-color-rect-y: 10.0; + -fx-color-rect-width: 16.0; + -fx-color-rect-height: 4.0; + -fx-padding: 0.0; + -fx-background-color: rgb(245.0, 245.0, 245.0), + linear-gradient(rgb(230.0, 230.0, 230.0), rgb(182.0, 182.0, 182.0)); + -fx-background-insets:0.0, 1.0 0.0 0.0 0.0; + -fx-border-width: 1.0; + -fx-border-insets:-1.0; + -fx-border-color: rgb(147.0, 147.0, 147.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0) rgb(129.0, 129.0, 129.0); +} +.html-editor-foreground .label, .html-editor-background .label{ + -fx-padding: 1.5 0.0 1.0 8.0; +} +/* +.html-editor > * > * > .separator:vertical > .line{ + -fx-border-style: solid; + -fx-background-color: null; + -fx-border-color: transparent rgb(129.0, 129.0, 129.0) transparent transparent; +}*/ + +.html-editor > * > .bottom-toolbar:horizontal { + -fx-padding: 0.417em; +} + +.html-editor .button , +.html-editor .toggle-button { + -fx-background-color: rgb(245.0, 245.0, 245.0), + linear-gradient(rgb(230.0, 230.0, 230.0), rgb(182.0, 182.0, 182.0)); + -fx-background-insets:0.0, 1.0 0.0 0.0 0.0; + -fx-border-width: 1.0; + -fx-border-insets:-1.0; + -fx-border-color: rgb(122.0, 122.0, 122.0); + -fx-padding: 0.1em 0.85em 0.07em 0.85em; +} + +.html-editor .button:armed , +.html-editor .toggle-button:selected{ + -fx-background-color: rgb(205.0, 205.0, 205.0), + linear-gradient(rgb(183.0, 183.0, 183.0), rgb(144.0, 144.0, 144.0)); + -fx-border-color: rgb(122.0, 122.0, 122.0); +} + +.html-editor .combo-box > .list-cell { + -fx-border-radius: 4.0 0.0 0.0 4.0; + -fx-border-width: 1.0 0.0 1.0 1.0; + -fx-border-color: rgb(122.0, 122.0, 122.0); + -fx-border-insets:-1.0; + -fx-background-color: rgb(245.0, 245.0, 245.0), + linear-gradient(rgb(230.0, 230.0, 230.0), rgb(182.0, 182.0, 182.0)); + -fx-background-insets: 0.0, 1.0 0.0 0.0 0.0; + -fx-background-radius: 3.5 0.0 0.0 3.5, 3.5 0.0 0.0 3.5; + -fx-padding: 0.1em 0.85em 0.07em 0.85em; +} + +.html-editor .combo-box > .arrow-button { + -fx-background-color: rgb(245.0, 245.0, 245.0), + linear-gradient(rgb(230.0, 230.0, 230.0), rgb(182.0, 182.0, 182.0)); + -fx-background-insets: 0.0, 1.0 0.0 0.0 0.0; + -fx-background-radius: 0.0 4.0 4.0 0.0, 0.0 3.0 3.0 0.0; + -fx-border-width: 1.0 1.0 1.0 0.0; + -fx-border-color: rgb(122.0, 122.0, 122.0); + -fx-border-radius: 0.0 4.0 4.0 0.0; + -fx-border-insets:-1.0; +} + + + +/* ====== CHART TOP LEVEL ITEMS =========================================================== */ +.chart { + -fx-padding: 5.0px; +} +.chart-content { + -fx-padding: 10.0px; +} +.chart-title { + -fx-font-size: 1.4em; +} +.chart-legend { + -fx-background-color: #cccccc, #eeeeee; + -fx-background-insets: 0.0,1.0; + -fx-background-radius: 6.0,5.0; + -fx-padding: 6.0px; +} + +/* ====== AXIS ============================================================================ */ +.axis { + -fx-tick-label-font: 0.833333em System; /* 10 pix */ + -fx-tick-label-fill: -fx-text-base-color; +} +.axis:top { + -fx-border-color: transparent transparent #666666 transparent; +} +.axis:right { + -fx-border-color: transparent transparent transparent #666666; +} +.axis:bottom { + -fx-border-color: #666666 transparent transparent transparent; +} +.axis:left { + -fx-border-color: transparent #666666 transparent transparent; +} +.axis-tick-mark { + -fx-fill: null; + -fx-stroke: #666666; +} +.axis-minor-tick-mark { + -fx-fill: null; + -fx-stroke: #AAAAAA; +} + +.axis .text { + -fx-font-smoothing-type: lcd; +} + +/* ====== CHART PLOT BACKGROUND =========================================================== */ +.chart-plot-background { + -fx-background-color: #f5f5f5; +} +.chart-vertical-grid-lines { + -fx-stroke: #dddddd; +} +.chart-horizontal-grid-lines { + -fx-stroke: #dddddd; +} +.chart-alternative-column-fill { + -fx-fill: #eeeeee; + -fx-stroke: transparent; + -fx-stroke-width: 0.0; +} +.chart-alternative-row-fill { + -fx-fill: #eeeeee; + -fx-stroke: transparent; + -fx-stroke-width: 0.0; +} +.chart-vertical-zero-line { + -fx-stroke: #999999; +} +.chart-horizontal-zero-line { + -fx-stroke: #999999; +} +/* ====== SCATTER CHART =========================================================== */ +.chart-symbol { /* solid circle */ + -fx-background-color: #f9d900; + -fx-background-radius: 5.0px; + -fx-padding: 5.0px; +} +.default-color1.chart-symbol { /* solid square */ + -fx-background-color: #a9e200; + -fx-background-radius: 0.0; +} +.default-color2.chart-symbol { /* solid diamond */ + -fx-background-color: #22bad9; + -fx-background-radius: 0.0; + -fx-padding: 7.0px 5.0px 7.0px 5.0px; + -fx-shape: "M5,0 L10,9 L5,18 L0,9 Z"; +} +.default-color3.chart-symbol { /* cross */ + -fx-background-color: #0181e2; + -fx-background-radius: 0.0; + -fx-background-insets: 0.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 { /* solid triangle */ + -fx-background-color: #2f357f; + -fx-background-radius: 0.0; + -fx-background-insets: 0.0; + -fx-shape: "M5,0 L10,8 L0,8 Z"; +} +.default-color5.chart-symbol { /* hollow circle */ + -fx-background-color: #860061, white; + -fx-background-insets: 0.0, 2.0; + -fx-background-radius: 5.0px; + -fx-padding: 5.0px; +} +.default-color6.chart-symbol { /* hollow square */ + -fx-background-color: #c62b00, white; + -fx-background-insets: 0.0, 2.0; + -fx-background-radius: 0.0; +} +.default-color7.chart-symbol { /* hollow diamond */ + -fx-background-color: #ff5700, white; + -fx-background-radius: 0.0; + -fx-background-insets: 0.0, 2.5; + -fx-padding: 7.0px 5.0px 7.0px 5.0px; + -fx-shape: "M5,0 L10,9 L5,18 L0,9 Z"; +} + +/* ====== LINE CHART =========================================================== */ +.chart-line-symbol { + -fx-background-color: #f9d900, white; + -fx-background-insets: 0.0, 2.0; + -fx-background-radius: 5.0px; + -fx-padding: 5.0px; +} +.chart-series-line { + -fx-stroke: #f9d900; + -fx-stroke-width: 4.0px; + -fx-effect: dropshadow( two-pass-box , rgba(0.0,0.0,0.0,0.3) , 8.0, 0.0 , 0.0 , 3.0 ); +} +.default-color0.chart-line-symbol { -fx-background-color: #f9d900, white; } +.default-color1.chart-line-symbol { -fx-background-color: #a9e200, white; } +.default-color2.chart-line-symbol { -fx-background-color: #22bad9, white; } +.default-color3.chart-line-symbol { -fx-background-color: #0181e2, white; } +.default-color4.chart-line-symbol { -fx-background-color: #2f357f, white; } +.default-color5.chart-line-symbol { -fx-background-color: #860061, white; } +.default-color6.chart-line-symbol { -fx-background-color: #c62b00, white; } +.default-color7.chart-line-symbol { -fx-background-color: #ff5700, white; } +.default-color0.chart-series-line { -fx-stroke: #f9d900; } +.default-color1.chart-series-line { -fx-stroke: #a9e200; } +.default-color2.chart-series-line { -fx-stroke: #22bad9; } +.default-color3.chart-series-line { -fx-stroke: #0181e2; } +.default-color4.chart-series-line { -fx-stroke: #2f357f; } +.default-color5.chart-series-line { -fx-stroke: #860061; } +.default-color6.chart-series-line { -fx-stroke: #c62b00; } +.default-color7.chart-series-line { -fx-stroke: #ff5700; } + +/* ====== AREA CHART =========================================================== */ +.chart-area-symbol { + -fx-background-color: #f9d900, white; + -fx-background-insets: 0.0, 1.0; + -fx-background-radius: 4.0px; /* makes sure this remains circular */ + -fx-padding: 3.0px; +} +.default-color0.chart-area-symbol { -fx-background-color: #f9d900, white; } +.default-color1.chart-area-symbol { -fx-background-color: #a9e200, white; } +.default-color2.chart-area-symbol { -fx-background-color: #22bad9, white; } +.default-color3.chart-area-symbol { -fx-background-color: #0181e2, white; } +.default-color4.chart-area-symbol { -fx-background-color: #2f357f, white; } +.default-color5.chart-area-symbol { -fx-background-color: #860061, white; } +.default-color6.chart-area-symbol { -fx-background-color: #c62b00, white; } +.default-color7.chart-area-symbol { -fx-background-color: #ff5700, white; } +.chart-series-area-line { + -fx-stroke: #f9d900; + -fx-stroke-width: 1.0px; +} +.default-color0.chart-series-area-line { -fx-stroke: #c2a902; } +.default-color1.chart-series-area-line { -fx-stroke: #88b501; } +.default-color2.chart-series-area-line { -fx-stroke: #22bad9; } +.default-color3.chart-series-area-line { -fx-stroke: #0181e2; } +.default-color4.chart-series-area-line { -fx-stroke: #2f357f; } +.default-color5.chart-series-area-line { -fx-stroke: #860061; } +.default-color6.chart-series-area-line { -fx-stroke: #c62b00; } +.default-color7.chart-series-area-line { -fx-stroke: #ff5700; } +.chart-series-area-fill { + -fx-stroke: null; + -fx-fill: #f9d90044; +} +.default-color0.chart-series-area-fill { -fx-fill: #f9d90044; } +.default-color1.chart-series-area-fill { -fx-fill: #a9e20044; } +.default-color2.chart-series-area-fill { -fx-fill: #22bad944; } +.default-color3.chart-series-area-fill { -fx-fill: #0181e244; } +.default-color4.chart-series-area-fill { -fx-fill: #2f357f44; } +.default-color5.chart-series-area-fill { -fx-fill: #86006144; } +.default-color6.chart-series-area-fill { -fx-fill: #c62b0044; } +.default-color7.chart-series-area-fill { -fx-fill: #ff570044; } +.area-legend-symbol { + -fx-padding: 6.0px; + -fx-background-radius: 6.0px; /* makes sure this remains circular */ + -fx-background-insets: 0.0, 3.0; +} +/* ====== BUBBLE CHART =========================================================== */ +.bubble-legend-symbol { + -fx-background-radius: 8.0px; + -fx-padding: 8.0px; +} +.chart-bubble { + -fx-bubble-fill: #f9d900; + -fx-background-color: radial-gradient(center 50.0% 50.0%, radius 80.0%, derive(-fx-bubble-fill,20.0%), derive(-fx-bubble-fill,-30.0%)); +} +.default-color0.chart-bubble { -fx-bubble-fill: #f9d900aa; } +.default-color1.chart-bubble { -fx-bubble-fill: #a9e200aa; } +.default-color2.chart-bubble { -fx-bubble-fill: #22bad9aa; } +.default-color3.chart-bubble { -fx-bubble-fill: #0181e2aa; } +.default-color4.chart-bubble { -fx-bubble-fill: #2f357faa; } +.default-color5.chart-bubble { -fx-bubble-fill: #860061aa; } +.default-color6.chart-bubble { -fx-bubble-fill: #c62b00aa; } +.default-color7.chart-bubble { -fx-bubble-fill: #ff5700aa; } + +/* ====== BAR CHART =========================================================== */ +/* TODO flip gradient vertical for negative bars */ +.chart-bar { + -fx-bar-fill: #22bad9; + -fx-background-color: linear-gradient(derive(-fx-bar-fill,-30.0%), derive(-fx-bar-fill,-40.0%)), + linear-gradient(derive(-fx-bar-fill,80.0%), derive(-fx-bar-fill, 0.0%)), + linear-gradient(derive(-fx-bar-fill,30.0%), derive(-fx-bar-fill,-10.0%)); + -fx-background-insets: 0.0,1.0,2.0; + -fx-background-radius: 5.0 5.0 0.0 0.0, 4.0 4.0 0.0 0.0, 3.0 3.0 0.0 0.0; +} + +.negative.chart-bar { + -fx-background-color: linear-gradient(to top, derive(-fx-bar-fill,-30.0%), derive(-fx-bar-fill,-40.0%)), + linear-gradient(to top, derive(-fx-bar-fill, 80.0%), derive(-fx-bar-fill,0.0%)), + linear-gradient(to top, derive(-fx-bar-fill,30.0%), derive(-fx-bar-fill,-10.0%)); + -fx-background-radius: 0.0 0.0 5.0 5.0, 0.0 0.0 4.0 4.0, 0.0 0.0 3.0 3.0; +} +.bar-chart:horizontal .chart-bar, .stacked-bar-chart:horizontal .chart-bar { + -fx-background-color: linear-gradient(to left, derive(-fx-bar-fill,-30.0%), derive(-fx-bar-fill,-40.0%)), + linear-gradient(to left, derive(-fx-bar-fill,80.0%), derive(-fx-bar-fill, 0.0%)), + linear-gradient(to left, derive(-fx-bar-fill,30.0%), derive(-fx-bar-fill,-10.0%)); + -fx-background-radius: 0.0 5.0 5.0 0.0, 0.0 4.0 4.0 0.0, 0.0 3.0 3.0 0.0; +} +.bar-chart:horizontal .negative.chart-bar, .stacked-bar-chart:horizontal .negative.chart-bar { + -fx-background-color: linear-gradient(to right, derive(-fx-bar-fill,-30.0%), derive(-fx-bar-fill,-40.0%)), + linear-gradient(to right, derive(-fx-bar-fill, 80.0%), derive(-fx-bar-fill, 0.0%)), + linear-gradient(to right, derive(-fx-bar-fill,30.0%), derive(-fx-bar-fill,-10.0%)); + -fx-background-radius: 5.0 0.0 0.0 5.0, 4.0 0.0 0.0 4.0, 3.0 0.0 0.0 3.0; +} +.default-color0.chart-bar { -fx-bar-fill: #f9d900; } +.default-color1.chart-bar { -fx-bar-fill: #a9e200; } +.default-color2.chart-bar { -fx-bar-fill: #22bad9; } +.default-color3.chart-bar { -fx-bar-fill: #0181e2; } +.default-color4.chart-bar { -fx-bar-fill: #2f357f; } +.default-color5.chart-bar { -fx-bar-fill: #860061; } +.default-color6.chart-bar { -fx-bar-fill: #c62b00; } +.default-color7.chart-bar { -fx-bar-fill: #ff5700; } +.bar-legend-symbol { + -fx-padding: 8.0px; +} +/* ====== PIE CHART ============================================================== */ +.chart-pie { + -fx-pie-color: #2f357f; + -fx-background-color: radial-gradient(radius 100.0%, derive(-fx-pie-color,55.0%), derive(-fx-pie-color,-20.0%)); + -fx-background-insets: 0.0; + -fx-border-color: derive(-fx-pie-color,-30.0%); +} +.chart-pie-label { + -fx-padding: 3.0px; +} +.chart-pie-label-line { + -fx-stroke: #aaaaaa; + -fx-fill: #aaaaaa; +} +.default-color0.chart-pie { -fx-pie-color: #f9d900; } +.default-color1.chart-pie { -fx-pie-color: #a9e200; } +.default-color2.chart-pie { -fx-pie-color: #22bad9; } +.default-color3.chart-pie { -fx-pie-color: #0181e2; } +.default-color4.chart-pie { -fx-pie-color: #2f357f; } +.default-color5.chart-pie { -fx-pie-color: #860061; } +.default-color6.chart-pie { -fx-pie-color: #c62b00; } +.default-color7.chart-pie { -fx-pie-color: #ff5700; } +.negative.chart-pie { + -fx-pie-color: transparent; + -fx-background-color: white; +} +.pie-legend-symbol.chart-pie { + -fx-background-radius: 8.0px; + -fx-padding: 8.0px; + -fx-border-color: null; +} + diff --git a/org.fortiss.tooling.common.ui/res/jfxtras/JMetroLightTheme.css b/org.fortiss.tooling.common.ui/res/jfxtras/JMetroLightTheme.css new file mode 100644 index 0000000000000000000000000000000000000000..28781b32ee33615ca674b44a70037362a2e218c9 --- /dev/null +++ b/org.fortiss.tooling.common.ui/res/jfxtras/JMetroLightTheme.css @@ -0,0 +1,1070 @@ +/* + Document : JMetroLightTheme + Created on : Oct 16, 2012, 6:28:59 PM + Author : Pedro Duque Vieira + Description: + Light Metro style sheet for use in JavaFX applications +*/ + +.background{ + -fx-background-color: white; +} + +.header{ + -fx-font-size: 3.5em; + -fx-font-family: "Segoe UI Semilight"; + -fx-text-fill: black; +} + +.item-title{ + -fx-font-size: 1em; + -fx-font-family: "Segoe UI"; + -fx-text-fill: black; +} + +/******************************************************************************* + * * + * Push Button * + * * + ******************************************************************************/ + +.button { + -fx-padding: 5 22 5 22; + + -fx-border-color: transparent; + -fx-border-width: 2; + + -fx-background-radius: 0; + + -fx-background-color: #cccccc; + + -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif; + -fx-font-size: 11pt; + -fx-text-fill: black; +} + +.button:hover{ + -fx-background-color: #d8d8d8; +} + +.button:pressed, .button:default:hover:pressed +{ + -fx-background-color: black; + -fx-text-fill: white; +} + +.button:focused +{ + -fx-border-color: transparent, black; + -fx-border-width: 1, 1; + -fx-border-style: solid, segments(1, 2); + -fx-border-radius: 0, 0; + -fx-border-insets: 1 1 1 1, 0; +} + +.button:disabled, .button:default:disabled +{ + -fx-opacity: 0.4; + -fx-background-color: #cccccc; + -fx-text-fill: #212121; +} + +.button:default +{ + -fx-background-color: #008287; + -fx-text-fill: #ffffff; +} + +.button:default:hover{ + -fx-background-color: #219297; +} + + +/******************************************************************************* + * * + * Toggle Button * + * * + ******************************************************************************/ + +.toggle-button { + -fx-padding: 5 22 5 22; + -fx-border-style: null; + -fx-background-radius: 0; + + -fx-background-color: #cccccc; + + -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif; + -fx-font-size: 11pt; + -fx-text-fill: black; + + -fx-border-color: transparent; + -fx-border-width: 2; +} + +.toggle-button:focused { + -fx-border-color: transparent, black; + -fx-border-width: 1, 1; + -fx-border-style: solid, segments(1, 2); + -fx-border-radius: 0, 0; + -fx-border-insets: 1 1 1 1, 0; +} + +.toggle-button:hover { + -fx-background-color: #d8d8d8; + -fx-text-fill: black; +} + +.toggle-button:selected { + -fx-background-color: black; + -fx-text-fill: white; +} + +.toggle-button:selected:hover { + -fx-background-color: #666; + -fx-text-fill: white; +} + +.toggle-button:disabled { + -fx-opacity: 0.4; +} + +/******************************************************************************* + * * + * Check Box * + * * + ******************************************************************************/ + +.check-box { + -fx-text-fill: black; +} + +/* unselected */ +.check-box > .box { + -fx-background-color: white; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-border-color: #bababa; + -fx-border-width: 2px; + -fx-border-style: solid; + -fx-padding: 1; +} + + +.check-box > .box > .mark { + -fx-background-insets: 0; + + -fx-padding:7px; + -fx-shape: "M9.005,17.766l13.759,14.739h1.716L49.02,0l10.298,8.488L25.997,50.453h-3.629L0,26.897L9.005,17.766z" +} + +.check-box:hover > .box { + -fx-border-color: #919191; +} + +/* focused */ + +.check-box:focused > .box{ + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-border-color: black, #bababa; + -fx-border-width: 1, 2; + -fx-border-style: segments(1, 2), solid; + -fx-border-insets: -3, 0; +} + +.check-box:focused:hover > .box{ + -fx-border-color: black, #919191; +} + +.check-box:indeterminate > .box > .mark { + -fx-background-color: black; + -fx-background-insets: 2.8; + -fx-padding:7px; + -fx-shape: null; +} + +.check-box:selected > .box > .mark{ + -fx-background-color: black; +} + +.check-box:disabled +{ + -fx-opacity: 0.4; +} + +.check-box:disabled > .box +{ + -fx-background-color: #cdcdcd; + -fx-border-color: #aaa; +} + +.check-box:armed > .box +{ + -fx-background-color: white, black; + -fx-background-insets: -1, 2; + -fx-background-radius: 0, 0; + -fx-border-color: black; +} + +.check-box:pressed:selected > .box > .mark +{ + -fx-background-color: white; +} + +.check-box:armed > .box > .mark +{ + -fx-background-color: black; +} + + +/******************************************************************************* + * * + * Radio Button * + * * + ******************************************************************************/ + +.radio-button { + -fx-text-fill: #212121; +} + +.radio-button > .radio { + -fx-background-color: transparent; + -fx-background-radius: 1.0em; /* large value to make sure this remains circular */ + -fx-background-insets: 0; + + -fx-border-radius: 1.0em; + -fx-border-color: #bababa; + -fx-border-width: 2px; + + -fx-padding: 4px; /* 4 -- padding from outside edge to the inner black dot */ +} + +.radio-button > .radio > .dot { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 1.0em; /* large value to make sure this remains circular */ + -fx-padding: 6px; /* 3 -- radius of the inner black dot when selected */ +} + +.radio-button:selected > .radio > .dot { + -fx-background-color: #212121; +} + +.radio-button:hover > .radio { + -fx-border-color: #919191; +} + +.radio-button:disabled +{ + -fx-opacity: 0.5; +} + +.radio-button:disabled > .radio +{ + -fx-background-color: #e6e6e6; + -fx-border-color: #d9d9d9; +} + +.radio-button:focused > .radio +{ + -fx-background-color: transparent; + -fx-background-radius: 1.0em; /* large value to make sure this remains circular */ + -fx-background-insets: 0; + + -fx-border-style: solid, segments(1, 2); + -fx-border-radius: 1.0em, 0; + -fx-border-color: #bababa, black; + -fx-border-insets: 0px, -2px; + -fx-border-width: 2px, 1px; + + -fx-padding: 4px; /* 4 -- padding from outside edge to the inner black dot */ +} + +.radio-button:focused:hover > .radio +{ + -fx-border-color: #919191, black; +} + +.radio-button:focused:pressed > .radio +{ + -fx-border-color: #212121, black; +} + +.radio-button:pressed > .radio +{ + -fx-background-color: #212121; + -fx-border-color: #212121; +} + +.radio-button:pressed:selected > .radio > .dot +{ + -fx-background-color: white; +} + +/******************************************************************************* + * * + * Tooltip * + * * + ******************************************************************************/ + +.tooltip { + -fx-background-color: white; + -fx-background-insets: 0; + -fx-background-radius: 0 0 0 0; + + -fx-padding: 0.333333em 0.666667em 0.333333em 0.666667em; /*4 8 4 8 */ + + -fx-font-family: "Segoe UI Semilight", "Segoe UI Light", "Segoe UI", Helvetica, Arial, sans-serif; + -fx-text-fill: rgba(0, 0, 0, 0.6); + + -fx-border-color: #808080; + -fx-border-width: 2px; + + -fx-effect: null; +} + + +/******************************************************************************* + * * + * Context Menu * + * * + ******************************************************************************/ + +.context-menu { + -fx-background-color: white; + -fx-background-insets: 0, 1, 2; + -fx-background-radius: 0 0 0 0, 0 0 0 0, 0 0 0 0; + -fx-padding: 0.5em 0em 0.5em 0em; /* 6 0 6 0 */ + + -fx-border-color: #212121; + -fx-border-style: solid; +} + +.context-menu .separator { + -fx-padding: 0.58333275em 1.333332em 0.58333275em 1.333332em; /*7 16 7 16 */ +} + +/* TODO: try to scope the menu-item style to the contextmenu */ +.menu-item { + -fx-background-color: transparent; + -fx-padding: 0.666666em 1.333332em 0.666666em 1.333332em; /*8 16 8 16 */ +} + +.menu-item .label { + -fx-padding: 0em 1.333332em 0em 0em; + -fx-text-fill: #212121; + -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif; + -fx-font-size: 11pt; +} + +.menu-item:focused { + -fx-background: -fx-accent; + -fx-background-color: #dedede; +} + +.menu-item:pressed +{ + -fx-background-color: #212121; + -fx-text-fill: white; +} + +.menu-item:pressed .label +{ + -fx-text-fill: white; +} + +/******************************************************************************* + * * + * ScrollBar * + * * + ******************************************************************************/ + +.scroll-bar > .thumb{ + -fx-background-color: #cdcdcd; + -fx-background-insets: 0; + -fx-background-radius: 0; +} + +.scroll-bar > .thumb:hover { + -fx-background-color: #dadada; +} + +.scroll-bar > .thumb:pressed { + -fx-background-color: #606060; +} + +.scroll-bar > .track { + -fx-background-color: #f0f0f0; + -fx-background-insets: 0; + -fx-background-radius: 0; +} +.scroll-bar > .track-background { + -fx-background-color: #f0f0f0; + -fx-background-insets: 0; +} + +.scroll-bar > .increment-button, +.scroll-bar > .decrement-button { + -fx-background-color: #f0f0f0; + -fx-background-insets: 0; + -fx-background-radius: 0; + + -fx-padding: 0.25em; /* 3 */ +} + +.scroll-bar > .increment-button:hover, +.scroll-bar > .decrement-button:hover { + -fx-background-color: #dadada; +} + +.scroll-bar > .increment-button:pressed, +.scroll-bar > .decrement-button:pressed { + -fx-background-color: #606060; +} + +.scroll-bar > .decrement-button > .decrement-arrow, +.scroll-bar > .increment-button > .increment-arrow{ + -fx-background-insets: 1 0 -1 0, 0; + -fx-background-color: transparent, #606060; + -fx-effect: null; +} + +.scroll-bar > .decrement-button:pressed > .decrement-arrow, +.scroll-bar > .increment-button:pressed > .increment-arrow { + -fx-background-color: transparent, white; + -fx-effect: null; +} + +.scroll-bar:vertical > .increment-button > .increment-arrow, +.scroll-bar:vertical > .decrement-button > .decrement-arrow { + -fx-padding: 0.333333em 0.5em 0.0em 0.0em; /* 4 6 0 0 */ +} + +.scroll-bar:horizontal > .increment-button > .increment-arrow, +.scroll-bar:horizontal > .decrement-button > .decrement-arrow { + -fx-padding: 0.5em 0.333333em 0.0em 0.0em; /* 6 4 0 0 */ +} + +.scroll-bar:disabled { + -fx-opacity: 0.4; +} + +/* ARROW SHAPES */ +.scroll-bar:horizontal > .decrement-button > .decrement-arrow { + -fx-shape: "M11,17H8.111l-3.86-4.124l3.86-4.125H11l-3.375,4.125L11,17z"; +} + +.scroll-bar:horizontal > .increment-button > .increment-arrow { + -fx-shape: "M7.626,12.876L4.251,8.751H7.14L11,12.876L7.14,17H4.251L7.626,12.876z"; +} + +.scroll-bar:vertical > .decrement-button > .decrement-arrow { + -fx-shape: "M4,17v-2.889l4.124-3.86l4.125,3.86V17l-4.125-3.375L4,17z"; +} + +.scroll-bar:vertical > .increment-button > .increment-arrow { + -fx-shape: "M8.124,13.625l4.125-3.375v2.889l-4.125,3.86L4,13.139V10.25L8.124,13.625z"; +} + +/******************************************************************************* + * * + * ScrollPane * + * * + ******************************************************************************/ + +.scroll-pane { + -fx-background-color: transparent, transparent; +} + +.scroll-pane .corner { + -fx-background-radius: 0 0 0 0; + -fx-background-color: #f0f0f0; + -fx-background-insets: 1 0 0 1; /* have the square on the corner be centered */ +} + + +/******************************************************************************* + * * + * ComboBox * + * * + ******************************************************************************/ + +.combo-box-base { + -fx-background-color: transparent, #bababa, transparent, white; + -fx-background-radius: 0, 0, 0, 0; + -fx-padding: 0em 0.166667em 0em 0.166667em; /* 0 2px 0 2px*/ + + -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif; + -fx-font-size: 1.333333em; /* 16 */ +} + +.combo-box-base:hover { + -fx-background-color: transparent, #909090, transparent, white; +} + +.combo-box-base:focused { + -fx-background-color: transparent, #5c5c5c, transparent, white; + -fx-background-insets: -1.4, 0, 1, 2; + + -fx-background-radius: 0, 0, 0, 0; +} + +.combo-box-base:focused:hover { + -fx-background-color: transparent, #909090, transparent, white; +} + +.combo-box-base:disabled { + -fx-opacity: .4; +} + +/* OPEN BUTTON */ +.combo-box-base > .arrow-button { + -fx-background-color: transparent, transparent, transparent; +} + +/* ARROW */ +.combo-box-base > .arrow-button > .arrow { + -fx-padding: 0.236110875em 0.333333em 0.236110875em 0.333333em; /* (2/3 * 4.25) 4 (2/3 * 4.25) 4 */ + -fx-shape: "M-78,640l-6-5.5v-3l6,5l0,0l6-5v3L-78,640L-78,640z"; + -fx-background-insets: 0 0 0 0, 0; + -fx-background-color: black; +} + +/* LIST (Popup)*/ +.combo-box-popup > .list-view { + -fx-effect: null; +} + +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif; + -fx-font-size: 11pt; + -fx-padding: 4 0 4 5; +} + +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:hover{ + -fx-background-color: #dedede; + -fx-text-fill: black; +} + +.combo-box-popup > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected{ + -fx-background-color: #55c4fe; /* TODO: this probably is the "active" color" */ +} + +/******************************************************************************* + * * + * Rating (ControlsFX) * + * * + ******************************************************************************/ + +.rating > .container > .button { + -fx-background-color: #bababa; + -fx-border-color: transparent; + -fx-shape: "M147.421,249.541l6.152,4.854l-2.393,7.355l6.521-4.361l6.549,4.361l-2.393-7.355l6.152-4.854h-7.738l-2.571-7.396l-2.543,7.396H147.421z"; + -fx-background-image: null; + -fx-padding: 16 16; + -fx-background-image-repeat: no-repeat; +} +.rating > .container > .button.strong { + -fx-background-color: #00828b; + -fx-border-color: transparent; + -fx-background-image: null; + +} +.rating > .container:hover > .button.strong { + -fx-background-color: #329aa3; +} + +.rating > .container > .button:hover { + -fx-effect: null; +} + +.rating > .container:pressed > .button.strong { + -fx-background-color: #25bbc4; +} + +.rating > .container > .button:pressed { + -fx-background-color: #25bbc4; +} + +.rating:disabled{ + -fx-opacity: .6; +} + +/******************************************************************************* + * * + * TextBox (and PasswordBox) * + * * + ******************************************************************************/ +.text-field{ + -fx-skin: "jfxtras.styles.jmetro8.MetroTextFieldSkin"; +} + +.text-input{ + -fx-background-radius: 0, 0; + + -fx-background-color: #bababa, white; + -fx-background-insets: 0, 2; + + -fx-prompt-text-fill: #9f9f9f; + + -fx-highlight-fill: #008287; /* TODO: this probably is the "active" color" */ + -fx-highlight-text-fill: white; +} + +.text-input:hover{ + -fx-background-color: #8f8f8f, white; +} + +.text-input:focused{ + -fx-background-color: #5c5c5c, white; + + -fx-text-fill: black; +} + +/*.text-input > Pane{*/ + /*-fx-padding: 0.333333em 0.583em 0.333333em 0em; *//* 4 7 4 0 */ +/*}*/ + +.text-input > .right-button{ + -fx-cursor: default; + + -fx-background-insets: -0.1666665em -0.45em -0.1666665em -0.45em; /* 4 7 4 7 -> this values are subtracted by 2px in em because of the border of the textfield */ +} + +.text-field > .right-button > .right-button-graphic { + -fx-shape : "M221.738,305.873l6.135,6.16l-2.875,2.863l-6.135-6.159l-6.263,6.237l-2.864-2.875l6.263-6.238l-6.177-6.202l2.875-2.863l6.177,6.201l6.244-6.22l2.864,2.876L221.738,305.873z"; + + -fx-padding: 0.5em 0.5em; /* TODO: put the real number here 18 18 */ + -fx-background-color: black; +} + +.text-input > .right-button:hover { + -fx-background-color: #d9d9d9; +} + +.text-input > .right-button:pressed { + -fx-background-color: black; +} + +.text-input > .right-button:pressed > .right-button-graphic { + -fx-background-color: white; +} + +.text-input:disabled +{ + -fx-opacity: 1; + -fx-background-color: #d9d9d9, #eaeaea; + -fx-text-fill: #adadad; +} + +.item-title.disabled{ + -fx-text-fill: #adadad; +} + +/******************************************************************************* + * * + * PasswordBox * + * * + ******************************************************************************/ + +.password-field { + -fx-skin: "jfxtras.styles.jmetro8.MetroPasswordFieldSkin"; +} + +.password-field > .right-button > .right-button-graphic { + -fx-shape : "M307.688,399.564c0,1.484-1.203,2.688-2.688,2.688c-1.484,0-2.688-1.203-2.688-2.688s1.203-2.688,2.688-2.688C306.484,396.876,307.688,398.08,307.688,399.564z M297.5,399h2.5c0,0,1.063-4,5-4c3.688,0,5,4,5,4h2.5c0,0-2.063-6.5-7.5-6.5C299,392.5,297.5,399,297.5,399z"; + -fx-scale-shape: false; + -fx-background-color: black; +} + +/******************************************************************************* + * * + * ProgressBar * + * * + ******************************************************************************/ +.progress-bar > .bar { + -fx-background-color: #008287; + -fx-background-radius: 0; + -fx-background-insets: 1; +} + +.progress-bar > .track { + -fx-background-color: white; + -fx-background-insets: 0; + -fx-background-radius: 0; +} + +/******************************************************************************* + * * + * Slider * + * * + ******************************************************************************/ + +.slider { + -fx-skin: "jfxtras.styles.jmetro8.FilledSliderSkin"; +} + +.slider .thumb { + -fx-background-color: black; + -fx-background-insets: 0; + -fx-background-radius: 0em; + -fx-padding: 0.333333em; /* 4 */ + + -fx-effect: null; +} +.slider:focused .thumb { + -fx-background-radius: 0em; +} + +.slider .track { + -fx-background-color: #c6c6c6; + -fx-background-insets: 0; + -fx-background-radius: 0; + -fx-padding: 0.333333em; /* This value must be equal to ".slider .thumb" padding */ +} + +.slider .fill { + -fx-background-color: #00828b; + -fx-padding: 0.333333em; /* This value must be equal to ".slider .thumb" padding */ +} + +.slider .fill:hover { + -fx-background-color: #219297; +} + +.slider .fill:pressed { + -fx-background-color: #25bbc4; +} + +/******************************************************************************* + * * + * ToggleSwitch * + * * + ******************************************************************************/ +.toggle-switch .text { + -fx-fill: black; + -fx-font-size: 1em; + -fx-font-family: "Segoe UI Semibold", "Segoe UI"; +} + +.toggle-switch .thumb { + -fx-background-color: black; + -fx-padding: 0.583333em 0.333333em 0.583333em 0.333333em; /* 7 4 7 4*/ +} + +.toggle-switch:selected .thumb-area{ + -fx-background-insets: 0, 1, 2; + -fx-background-color: #a6a6a6, white, #219297; /* The last one is the accent color */ +} + +.toggle-switch .thumb-area{ + -fx-background-insets: 0, 1, 2; + -fx-background-color: #a6a6a6, white, #a6a6a6; +} + +.toggle-switch:selected:pressed .thumb-area{ + -fx-background-insets: 0, 1, 2; + -fx-background-color: #a6a6a6, white, #25bbc4; /* The last one is the accent color */ +} + +.toggle-switch .thumb-area +{ + -fx-padding: 0.583333em 1.333333em 0.583333em 1.333333em; /* 7 16 7 16 */ + +} + +.toggle-switch:disabled +{ + -fx-opacity: 0.4; +} + +/******************************************************************************* + * * + * ListSpinner (Jfxtras) * + * * + ******************************************************************************/ + +.ListSpinner { + -fx-skin: "jfxtras.labs.internal.scene.control.skin.ListSpinnerCaspianSkin"; + -fx-background-color: #f0f0f0; + -fx-background-insets: 0 0 0 0; + -fx-background-radius: 0; + -fx-padding: 0.266667em 0.233333em 0.25em 0.233333em; + -fx-text-fill: #212121; +} + +.ListSpinner:hover { + -fx-color: #f0f0f0; +} + +.ListSpinner:focused { + -fx-color: -fx-focused-base; + -fx-background-color: -fx-focus-color, -fx-outer-border, -fx-inner-border, -fx-body-color; + -fx-background-insets: -1.4, 0, 1, 2; + -fx-background-radius: 6.4, 5, 4, 3; +} + +.ListSpinner .valuePane { + -fx-padding: 0.0em 0.2em 0.0em 0.2em; +} + +.ListSpinner .left-arrow { + -fx-shape: "M4,-4 L0,0 L4,4 Z"; + -fx-scale-shape: false; +} +.ListSpinner .right-arrow { + -fx-shape: "M0,-4 L4,0 L0,4 Z"; + -fx-scale-shape: false; +} +.ListSpinner .down-arrow { + -fx-shape: "M-4,-2 L0,2 L4,-2 Z"; + -fx-scale-shape: false; +} +.ListSpinner .up-arrow { + -fx-shape: "M4,2 L-4,2 L0,-2 Z"; + -fx-scale-shape: false; +} +.ListSpinner .idle { + -fx-background-color: -fx-mark-color; +} +.ListSpinner .clicked { + -fx-background-color: -fx-focus-color; +} + +/******************************************************************************* + * * + * Spinner * + * * + ******************************************************************************/ + +.spinner { + -fx-background-color: #f0f0f0; + -fx-background-insets: 0; + -fx-background-radius: 0; +} + +.spinner > .text-field{ + -fx-skin: "com.sun.javafx.scene.control.skin.TextFieldSkin"; +} + +.spinner > .text-field { + -fx-background-color: #f0f0f0; + -fx-background-insets: 0; + -fx-background-radius: 0; +} + +.spinner .increment-arrow-button, .spinner .decrement-arrow-button { + -fx-background-color: #f0f0f0; + /*Change the two 0's here to -1 to get rid of the horizontal line */ + -fx-background-insets: 0; + -fx-background-radius: 0; +} + +.spinner .increment-arrow-button .increment-arrow, .spinner .decrement-arrow-button .decrement-arrow { + -fx-background-color: -fx-mark-color; +} + + +.spinner .increment-arrow-button:hover, .spinner .decrement-arrow-button:hover { + -fx-background-color: #dadada; +} + +.spinner .increment-arrow-button:pressed, .spinner .decrement-arrow-button:pressed { + -fx-background-color: #606060; +} + +.spinner.split-arrows-horizontal .increment-arrow-button:pressed .increment-arrow, .spinner.split-arrows-horizontal .decrement-arrow-button:pressed .decrement-arrow{ + -fx-background-color: white; +} + + +/******************************************************************************* + * * + * TreeTableView(-Cell) * + * * + ******************************************************************************/ + +.tree-table-cell { + -fx-border-color: grey; + -fx-border-width: 0.1px; +} + + +/******************************************************************************* + * * + * DatePicker * + * * + ******************************************************************************/ +.date-picker > .arrow-button > .arrow { + -fx-shape: "M0,0v9h9V0H0z M2,8H1V7h1V8z M2,6H1V5h1V6z M2,4H1V3h1V4z M4,8H3V7h1V8z M4,6H3V5h1V6z M4,4H3V3h1V4z M6,8H5V7h1V8z M6,6H5 V5h1V6z M6,4H5V3h1V4z M8,8H7V7h1V8z M8,6H7V5h1V6z M8,4H7V3h1V4z"; + -fx-background-color: -fx-mark-highlight-color, -fx-mark-color; + -fx-background-insets: 1 0 -1 0, 0; + -fx-padding: 0.416667em 0.416667em 0.333333em 0.333333em; /* 5 5 4 4 */ + -fx-scale-shape: true; +} + +.date-picker .text-field{ + -fx-skin: "com.sun.javafx.scene.control.skin.TextFieldSkin"; +} + +.date-picker .text-input{ + -fx-background-radius: 0, 0; + + -fx-background-color: transparent, white; + -fx-background-insets: 2, 2; +} + +.date-picker > .arrow-button:hover { + -fx-background-color: #d9d9d9; + -fx-background-insets: 3 3 3 3; + -fx-background-radius: 0; +} + +.date-picker > .arrow-button:pressed { + -fx-background-color: black; +} + +.date-picker > .arrow-button:pressed > .arrow { + -fx-background-color: white; +} + +.date-picker-popup { + -fx-background-color: white; + -fx-background-insets: 0; +} + +.date-picker-popup > .month-year-pane { + -fx-background-color: white; + -fx-background-insets: 0; +} + +.date-picker-popup > * > .spinner > .button { + -fx-padding: 0.25em 0.583333em 0.25em 0.583333em; /* 3 7 3 7 */ +} + +.date-picker-popup > * > .spinner > .button { + -fx-background-color: white; + -fx-background-insets: 0; +} + +.date-picker-popup > * > .spinner { + -fx-background-color: white; + -fx-background-insets: 0; +} + +.date-picker-popup > * > .spinner > .button:hover { + -fx-background-color: #dadada; +} + +.date-picker-popup > * > .spinner > .button:armed { + -fx-background-color: #606060; +} + +.date-picker-popup > * > .spinner > .button > .left-arrow, +.date-picker-popup > * > .spinner > .button > .right-arrow { + -fx-background-color: #606060; + -fx-background-insets: 0; + -fx-effect: null; +} + +.date-picker-popup > * > .spinner > .button:pressed > .left-arrow, +.date-picker-popup > * > .spinner > .button:pressed > .right-arrow { + -fx-background-color: white; + -fx-background-insets: 0; +} + +.date-picker-popup > .calendar-grid { + -fx-background-color: white; + /*-fx-background-insets: 1 0 0 0;*/ + -fx-padding: 0; +} + +.date-picker-popup > * > .previous-month, +.date-picker-popup > * > .next-month { + -fx-background-color: white; + -fx-opacity: 0.3; +} + +.date-picker-popup > * > .day-name-cell, +.date-picker-popup > * > .week-number-cell { + -fx-font-size: 0.75em; + -fx-font-family: "Segoe UI Semibold", "Segoe UI", Helvetica, Arial, sans-serif; +} + +/******************************************************************************* + * * + * ChoiceBox * + * * + ******************************************************************************/ + +.choice-box { + -fx-background-color: transparent, #bababa, transparent, white; + -fx-background-radius: 0, 0, 0, 0; + -fx-padding: 0em 0.166667em 0em 0.166667em; /* 0 2px 0 2px*/ + -fx-background-insets: -1.4, 0, 1, 2; + + -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif; + -fx-font-size: 1.333333em; /* 16 */ +} + +.choice-box:focused { + -fx-background-color: transparent, #5c5c5c, transparent, white; +} + +.choice-box:focused:hover { + -fx-background-color: transparent, #909090, transparent, white; +} + +.choice-box:disabled { + -fx-opacity: .4; +} + +.radio-menu-item:checked > .left-container > .radio { + -fx-shape: "M9.005,17.766l13.759,14.739h1.716L49.02,0l10.298,8.488L25.997,50.453h-3.629L0,26.897L9.005,17.766z"; + -fx-padding:7px; + -fx-scale-shape: true; +} + +/******************************************************************************* + * * + * List Box * + * * + ******************************************************************************/ + +.list-view { + -fx-background-color: white; + -fx-background-insets: 0; + -fx-padding: 0; + + -fx-border-color: #a4a4a4; + -fx-border-width: 2px; +} + +.list-view:focused { + -fx-background-color: white; + -fx-background-insets: 0; + -fx-background-radius: 0; +} + +.list-view > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-padding: 1em 2em 1em 2em; + -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif; +} + +.list-view > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-background-color: white; +} + +.list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:focused { + -fx-background-color: #d3d3d3; +} + +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-background-color: white; +} + +.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:focused { + -fx-background-color: -fx-background; + -fx-background-insets: 0; +} + diff --git a/org.fortiss.tooling.common.ui/res/jfxtras/License.txt b/org.fortiss.tooling.common.ui/res/jfxtras/License.txt new file mode 100644 index 0000000000000000000000000000000000000000..80a6234cde076442b1f602923f58d1773116beb9 --- /dev/null +++ b/org.fortiss.tooling.common.ui/res/jfxtras/License.txt @@ -0,0 +1,24 @@ +Copyright (c) 2011-2018, JFXtras +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the JFXtras project nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/.ratings index 10ef4a833313fa5ac797231fd84684dde9834183..86b47393dc290e086696323a5f07d0be07adb0bb 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/.ratings +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/.ratings @@ -1 +1 @@ -AF3FXViewPart.java b6a5e5efc2b7bb6f7a62eb478f697ec459a0cfb3 GREEN +AF3FXViewPart.java 9e119a36de6ab9e1a07cd416de0126a89514bd38 GREEN diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/AF3FXViewPart.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/AF3FXViewPart.java index b6a5e5efc2b7bb6f7a62eb478f697ec459a0cfb3..9e119a36de6ab9e1a07cd416de0126a89514bd38 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/AF3FXViewPart.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/AF3FXViewPart.java @@ -16,15 +16,17 @@ package org.fortiss.tooling.common.ui.javafx; import java.io.IOException; - -import org.eclipse.fx.ui.workbench3.FXViewPart; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; +import java.net.URL; import javafx.application.Platform; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; -import javafx.scene.layout.BorderPane; +import javafx.scene.layout.Pane; + +import org.apache.commons.lang3.SystemUtils; +import org.eclipse.fx.ui.workbench3.FXViewPart; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; /** * Base class to create eclipse (SWT-based) views using JavaFX GUI elements. This class requires @@ -37,11 +39,11 @@ import javafx.scene.layout.BorderPane; * class for non-removal. */ public abstract class AF3FXViewPart extends FXViewPart { // NO_UCD - /** Holds the relative path to the CSS file defining the Applications appearance. */ - private final static String CSSLOCATION = "/application.css"; - /** For later use, if we need to define different styles. */ - private final String cssLocation; + private String cssLocation; + + /** Flag that indicates if a custom style sheet has been applied. */ + private boolean isCustomStyleSheetApplied; /** * Holds the relative location of the FXML JavaXML files. Roots are the source folders of the @@ -59,15 +61,12 @@ public abstract class AF3FXViewPart extends FXViewPart { // NO_UCD * Stub class that defines the FXML file defining the layout and controller * @param fXMLLocation * location of the fXML file relative to the source (resource) folders. - * @param cssLocation - * style sheet file path for the appearance settings relative to the source - * (resource) folders. * @throws Exception * if the given FXML file path is not given or if it cannot be found in any of the * source (resource) folders. */ - private AF3FXViewPart(Class<? extends AF3FXViewPart> viewerClass, String fXMLLocation, - String cssLocation) throws Exception { + public AF3FXViewPart(Class<? extends AF3FXViewPart> viewerClass, String fXMLLocation) + throws Exception { if(fXMLLocation == null) { throw new Exception( "The location of the FXML file defining the gui elements was not given," + @@ -78,7 +77,6 @@ public abstract class AF3FXViewPart extends FXViewPart { // NO_UCD Platform.setImplicitExit(false); this.viewerClass = viewerClass; this.fXMLLocation = fXMLLocation; - this.cssLocation = cssLocation; } /** @@ -88,13 +86,17 @@ public abstract class AF3FXViewPart extends FXViewPart { // NO_UCD * Stub class that defines the FXML file defining the layout and controller * @param fXMLLocation * location of the fXML file relative to the source (resource) folders. + * @param cssLocation + * style sheet file path for the appearance settings relative to the source + * (resource) folders. * @throws Exception * if the given FXML file path is not given or if it cannot be found in any of the * source (resource) folders. */ - public AF3FXViewPart(Class<? extends AF3FXViewPart> viewerClass, String fXMLLocation) - throws Exception { - this(viewerClass, fXMLLocation, CSSLOCATION); + public AF3FXViewPart(Class<? extends AF3FXViewPart> viewerClass, String fXMLLocation, + String cssLocation) throws Exception { + this(viewerClass, fXMLLocation); + this.cssLocation = cssLocation; } /** {@inheritDoc} */ @@ -104,8 +106,9 @@ public abstract class AF3FXViewPart extends FXViewPart { // NO_UCD if(!"0".equals(System.getenv("SWT_GTK3"))) { org.eclipse.swt.widgets.Label errorLabel = new org.eclipse.swt.widgets.Label(parent, SWT.BOLD); - errorLabel.setText("Cannot show JavaFX view without setting SWT_GTK3 to '0'.\n" + - "Please relaunch Eclipse using a terminal and 'SWT_GTK3=0 ./eclipse' command."); + errorLabel + .setText("Cannot show JavaFX view without setting SWT_GTK3 to '0'.\n" + + "Please relaunch Eclipse using a terminal and 'SWT_GTK3=0 ./eclipse' command."); return; } } @@ -115,17 +118,23 @@ public abstract class AF3FXViewPart extends FXViewPart { // NO_UCD /** {@inheritDoc} */ @Override protected Scene createFxScene() { - BorderPane root = null; + Pane root = null; FXMLLoader loader = new FXMLLoader(); loader.setClassLoader(viewerClass.getClassLoader()); loader.setLocation(viewerClass.getResource(fXMLLocation)); try { - root = (BorderPane)loader.load(); + root = (Pane)loader.load(); } catch(IOException e) { throw new RuntimeException("Cannot load the resource located at " + fXMLLocation, e); } - Scene scene = new Scene(root, 400, 400); - scene.getStylesheets().add(getClass().getResource(cssLocation).toExternalForm()); + + if(cssLocation != null) { + isCustomStyleSheetApplied = applyStyleSheet(root, getClass(), cssLocation); + } + if(!isCustomStyleSheetApplied) { + setNativeLook(root); + } + Scene scene = new Scene(root); return scene; } @@ -134,4 +143,48 @@ public abstract class AF3FXViewPart extends FXViewPart { // NO_UCD protected void setFxFocus() { // Not needed. } + + /** + * Sets the native look of the target platform to break the UI. Most of the UI code is based on + * SWT which uses a platform native look. Currently, Windows 8&10, Windows 7, and MacOS X native + * looks are supported. + */ + private void setNativeLook(Pane pane) { + if(SystemUtils.IS_OS_WINDOWS_10 || SystemUtils.IS_OS_WINDOWS_8) { + applyStyleSheet(pane, AF3FXViewPart.class, "/jfxtras/JMetroLightTheme.css"); + } else if(SystemUtils.IS_OS_WINDOWS) { + applyStyleSheet(pane, AF3FXViewPart.class, "/aerofx/win7.css"); + } else if(SystemUtils.IS_OS_MAC_OSX) { + applyStyleSheet(pane, AF3FXViewPart.class, "/aquafx/aquafx.css"); + } else if(SystemUtils.IS_OS_LINUX) { + // At the time of writing this method, no CSS is known that mimics GTK or QT. Thus, use + // the default modena look. + } + } + + /** + * Applies the style sheet from the given location to the given {@link Pane}. The class loader + * of the plugin containing the style sheet must be given such that this resource can be loaded. + * For instance the class loader of the common.ui plugin must be given for the native looks. + * + * @param pane + * {@link Pane} to which the style sheet shall be applied. + * @param viewerClass + * Class containing the style sheet resource. + * @param styleSheetLocation + * relative location of the style sheet to its containing resource folder (aka source + * folder). + * @return whether the style sheet could be applied. + */ + private boolean applyStyleSheet(Pane pane, Class<?> viewerClass, String styleSheetLocation) { + if(viewerClass == null || styleSheetLocation == null) { + return false; + } + URL cssURL = viewerClass.getResource(styleSheetLocation); + if(cssURL != null) { + pane.getStylesheets().add(cssURL.toExternalForm()); + return true; + } + return false; + } } diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings new file mode 100644 index 0000000000000000000000000000000000000000..ae65b55ceb5b989a058739bfe8f94c7bf256987b --- /dev/null +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings @@ -0,0 +1,8 @@ +DynamicTreeContentProviderBase.java dff437afeaf7486af05460fa54eca4fa61d7eae6 GREEN +DynamicTreeItem.java afc105cf5acf3d2506d89e0892555100c234ce5b GREEN +DynamicTreeTableUIProviderBase.java fd9fce19a65eb1006ceacb0d869bbe90a8c578b3 GREEN +DynamicTreeTableViewer.java e474f3a890fd6525db7de8e299d7fbe67f932a15 GREEN +DynamicTreeUIProviderBase.java 56fe4df4577b35f1e5e6e4c4be189b706c852d52 GREEN +DynamicTreeViewer.java d5b9f87862d9c42327c46bce02fb34d64673d413 GREEN +DynamicTreeViewerBase.java 47124c847de322a0ae26eb7a114f85ce4bd02d7e GREEN +IDoubleClickHandler.java 447f7769dead9a106b3ea3139ef0da51eb0b9a89 GREEN diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java new file mode 100644 index 0000000000000000000000000000000000000000..dff437afeaf7486af05460fa54eca4fa61d7eae6 --- /dev/null +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2016, 2018 fortiss GmbH. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * http://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Florian Hoelzl (fortiss GmbH) - initial implementation + * Alexander Diewald (fortiss GmbH) - backport to AF3 & Integration + * improvements + * + *******************************************************************************/ +package org.fortiss.tooling.common.ui.javafx.control.treetableview; + +import static java.util.Collections.emptyList; +import static java.util.stream.Collectors.toList; + +import java.util.Collection; +import java.util.Comparator; +import java.util.function.Predicate; + +/** + * Base class for implementing tree content providers used in {@link DynamicTreeViewer} and + * {@link DynamicTreeTableViewer}. + */ +public abstract class DynamicTreeContentProviderBase<T> { + /** Returns the children of the given parent in the tree. */ + protected abstract Collection<? extends T> getChildren(T parent); + + /** Returns the filer predicate. */ + protected Predicate<Object> getFilterPredicate() { + return (o) -> true; + } + + /** Returns the sorter comparator. */ + protected Comparator<Object> getSortingComparator() { + return (o1, o2) -> 0; + } + + /** Returns the filtered children of the given element. */ + public final Collection<? extends T> getFilteredSortedChildren(T parent) { + Collection<? extends T> l = getChildren(parent); + if(l == null) { + return emptyList(); + } + return l.stream().filter(getFilterPredicate()).sorted(getSortingComparator()) + .collect(toList()); + } +} diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItem.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItem.java new file mode 100644 index 0000000000000000000000000000000000000000..afc105cf5acf3d2506d89e0892555100c234ce5b --- /dev/null +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeItem.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2016, 2018 fortiss GmbH. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * http://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Florian Hoelzl (fortiss GmbH) - initial implementation + * Alexander Diewald (fortiss GmbH) - backport to AF3 & Integration + * improvements + * + *******************************************************************************/ +package org.fortiss.tooling.common.ui.javafx.control.treetableview; + +import java.util.Collection; +import java.util.HashMap; + +import javafx.scene.control.TreeItem; + +/** + * {@link TreeItem} with support for dynamic children using the {@link DynamicTreeItem#update()} + * method. + */ +public class DynamicTreeItem<T> extends TreeItem<T> { + /** The viewer. */ + private DynamicTreeViewerBase<T> viewer; + + /** Constructor. */ + public DynamicTreeItem(T data, DynamicTreeViewerBase<T> viewer) { + super(data); + this.viewer = viewer; + } + + /** Updates the children of this item from the underlying content model. */ + public void update() { + // remember expanded state of children + HashMap<T, TreeItem<T>> expanded = new HashMap<>(); + for(TreeItem<T> c : getChildren()) { + if(c.isExpanded()) { + expanded.put(c.getValue(), c); + } + } + // get list of children and create tree items + getChildren().clear(); + for(T element : viewer.getContentProvider().getFilteredSortedChildren(getValue())) { + DynamicTreeItem<T> dti; + if(expanded.containsKey(element)) { + dti = (DynamicTreeItem<T>)expanded.get(element); + } else { + dti = new DynamicTreeItem<T>(element, viewer); + } + getChildren().add(dti); + dti.update(); + } + } + + /** {@inheritDoc} */ + @Override + public boolean isLeaf() { + Collection<? extends Object> children = viewer.getContentProvider().getChildren(getValue()); + return children == null || children.isEmpty(); + } +} diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableUIProviderBase.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableUIProviderBase.java new file mode 100644 index 0000000000000000000000000000000000000000..fd9fce19a65eb1006ceacb0d869bbe90a8c578b3 --- /dev/null +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableUIProviderBase.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2016, 2018 fortiss GmbH. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * http://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Florian Hoelzl (fortiss GmbH) - initial implementation + * + *******************************************************************************/ +package org.fortiss.tooling.common.ui.javafx.control.treetableview; + +import javafx.scene.Node; +import javafx.scene.control.ContextMenu; + +/** + * This UI provider is responsible to return the label, the icon, and the context menu for each cell + * in the {@link DynamicTreeTableViewer} based on the data object and the column. + */ +public abstract class DynamicTreeTableUIProviderBase { + /** + * @param element + * the element to be displayed in the current row + * @param column + * the current column + * @return the label to be displayed in the given column + */ + public String getLabel(Object element, int column) { + return ""; + } + + /** + * @param element + * the element to be displayed in the current row + * @param column + * the current column + * @return the node to be displayed as the icon in the given column + */ + public Node getIconNode(Object element, int column) { + return null; + } + + /** + * @param element + * the element to be displayed in the current row + * @param column + * the current column + * @return the context menu in the given column + */ + public ContextMenu createContextMenu(Object element, int column) { + return null; + } +} diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java new file mode 100644 index 0000000000000000000000000000000000000000..e474f3a890fd6525db7de8e299d7fbe67f932a15 --- /dev/null +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java @@ -0,0 +1,120 @@ +/******************************************************************************* + * Copyright (c) 2016, 2018 fortiss GmbH. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * http://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Florian Hoelzl (fortiss GmbH) - initial implementation + * Alexander Diewald (fortiss GmbH) - backport to AF3 & Integration + * improvements + * + *******************************************************************************/ +package org.fortiss.tooling.common.ui.javafx.control.treetableview; + +import javafx.beans.property.ReadOnlyStringWrapper; +import javafx.scene.Node; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.TreeItem; +import javafx.scene.control.TreeTableCell; +import javafx.scene.control.TreeTableColumn; +import javafx.scene.control.TreeTableView; + +/** + * A JavaFX {@link TreeTableView} based on an {@link DynamicTreeContentProviderBase} and + * {@link DynamicTreeTableUIProviderBase}. This class is intended to be used as a wrapper for + * {@link TreeTableView} and its rather complex expert API. + * <P> + * This class currently supports only a static tree-table layout, i.e., there is no way to alter the + * columns unless the developer changes the underlying {@link TreeTableView} directly. Note that if + * a column is removed the index provided to the label provider might not be correct anymore. + * <P> + * Furthermore, the selection model is currently fixed to be row selection. + */ +public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { + /** The {@link TreeTableView} control to be managed. */ + private final TreeTableView<T> view; + /** The UI provider of this tree-table. */ + private final DynamicTreeTableUIProviderBase uiProvider; + + /** Constructor. */ + public DynamicTreeTableViewer(TreeTableView<T> view, T root, boolean showRoot, int revealLevel, + DynamicTreeContentProviderBase<T> contentProvider, + DynamicTreeTableUIProviderBase uiProvider) { + super(contentProvider); + this.uiProvider = uiProvider; + // construct view + this.view = view; + DynamicTreeItem<T> rootItem = new DynamicTreeItem<T>(root, this); + view.setRoot(rootItem); + view.setShowRoot(showRoot); + rootItem.update(); + // expand to reveal (+1 if root node is not shown + expandItem(rootItem, showRoot ? revealLevel : revealLevel + 1); + } + + /** Constructor. */ + public DynamicTreeTableViewer(T root, boolean showRoot, int revealLevel, + DynamicTreeContentProviderBase<T> contentProvider, + DynamicTreeTableUIProviderBase uiProvider) { + this(new TreeTableView<T>(), root, showRoot, revealLevel, contentProvider, uiProvider); + } + + /** Updates the viewer content. */ + public void update() { + // wild cast works: see constructor + DynamicTreeItem<T> rootItem = (DynamicTreeItem<T>)view.getRoot(); + rootItem.update(); + } + + /** Expands items up to the given level. */ + private void expandItem(TreeItem<T> parentItem, int revealLevel) { + if(revealLevel <= 0) { + return; + } + parentItem.setExpanded(true); + revealLevel--; + for(TreeItem<T> child : parentItem.getChildren()) { + expandItem(child, revealLevel); + } + } + + /** Adds a column to the table part of the view. */ + public void addColumn(String headerLabel, int prefWidth) { + final int num = view.getColumns().size(); + TreeTableColumn<T, String> col = new TreeTableColumn<>(headerLabel); + col.setPrefWidth(prefWidth); + col.setCellValueFactory(param -> { + Object data = param.getValue().getValue(); + return new ReadOnlyStringWrapper(uiProvider.getLabel(data, num)); + }); + col.setCellFactory(param -> { + TreeTableCell<T, String> cell = new TreeTableCell<T, String>() { + @Override + protected void updateItem(String item, boolean empty) { + super.updateItem(item, empty); + ContextMenu menu = null; + Node icon = null; + if(!empty && item != null) { + T data = this.getTreeTableRow().getItem(); + menu = uiProvider.createContextMenu(data, num); + icon = uiProvider.getIconNode(data, num); + } + this.setContextMenu(menu); + this.setGraphic(icon); + } + }; + cell.textProperty().bind(cell.itemProperty()); + return cell; + }); + view.getColumns().add(col); + } + + /** Returns the underlying {@link TreeTableView}. */ + public TreeTableView<T> getControl() { + return view; + } +} diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeUIProviderBase.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeUIProviderBase.java new file mode 100644 index 0000000000000000000000000000000000000000..56fe4df4577b35f1e5e6e4c4be189b706c852d52 --- /dev/null +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeUIProviderBase.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2016, 2018 fortiss GmbH. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * http://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Florian Hoelzl (fortiss GmbH) - initial implementation + * + *******************************************************************************/ +package org.fortiss.tooling.common.ui.javafx.control.treetableview; + +import javafx.scene.Node; +import javafx.scene.control.ContextMenu; + +/** + * This UI provider is responsible to return the label, the icon, and the context menu for each cell + * in the {@link DynamicTreeViewer} based on the data object. + */ +public abstract class DynamicTreeUIProviderBase<T> { + /** + * @param element + * the displayed element + * @return the label to be displayed + */ + public String getLabel(T element) { + return ""; + } + + /** + * @param element + * the displayed element + * @return the node to be displayed as the icon + */ + public Node getIconNode(T element) { + return null; + } + + /** + * @param element + * the displayed element + * @return the context menu + */ + public ContextMenu createContextMenu(T element) { + return null; + } +} diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java new file mode 100644 index 0000000000000000000000000000000000000000..d5b9f87862d9c42327c46bce02fb34d64673d413 --- /dev/null +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java @@ -0,0 +1,200 @@ +/******************************************************************************* + * Copyright (c) 2016, 2018 fortiss GmbH. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * http://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Florian Hoelzl (fortiss GmbH) - initial implementation + * Alexander Diewald (fortiss GmbH) - backport to AF3 & Integration + * improvements + * + *******************************************************************************/ +package org.fortiss.tooling.common.ui.javafx.control.treetableview; + +import javafx.beans.value.ChangeListener; +import javafx.event.Event; +import javafx.event.EventDispatchChain; +import javafx.event.EventDispatcher; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.TreeCell; +import javafx.scene.control.TreeItem; +import javafx.scene.control.TreeView; +import javafx.scene.input.MouseButton; +import javafx.scene.input.MouseEvent; + +/** + * A JavaFX {@link TreeView} based on a {@link DynamicTreeContentProviderBase} and a + * {@link DynamicTreeUIProviderBase}. This class is intended to be used as a wrapper for + * {@link TreeView} and its rather complex expert API. + */ +public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> { + /** The {@link TreeView} control to be managed. */ + private final TreeView<T> view; + /** The UI provider implementation. */ + private final DynamicTreeUIProviderBase<T> uiProvider; + /** The selection change listener. */ + private ChangeListener<Object> selectionChangeListener = null; + /** The double click handler. */ + private IDoubleClickHandler doubleClickHandler; + + /** Constructor. */ + public DynamicTreeViewer(TreeView<T> view, T root, boolean showRoot, int revealLevel, + DynamicTreeContentProviderBase<T> contentProvider, + DynamicTreeUIProviderBase<T> uiProvider) { + super(contentProvider); + this.uiProvider = uiProvider; + // construct view + this.view = view; + DynamicTreeItem<T> rootItem = new DynamicTreeItem<T>(root, this); + view.setRoot(rootItem); + view.setShowRoot(showRoot); + configureCellFactory(); + view.getSelectionModel().selectedItemProperty().addListener((obs, oldVal, newVal) -> { + if(selectionChangeListener != null) { + Object oVal = oldVal != null ? oldVal.getValue() : null; + Object nVal = newVal != null ? newVal.getValue() : null; + selectionChangeListener.changed(obs, oVal, nVal); + } + }); + rootItem.update(); + // expand to reveal (+1 if root node is not shown) + expandItem(rootItem, showRoot ? revealLevel : revealLevel + 1); + } + + /** Constructor. */ + public DynamicTreeViewer(T root, boolean showRoot, int revealLevel, + DynamicTreeContentProviderBase<T> contentProvider, + DynamicTreeUIProviderBase<T> uiProvider) { + this(new TreeView<T>(), root, showRoot, revealLevel, contentProvider, uiProvider); + } + + /** Updates the tree view. */ + public void update() { + // wild cast works: see constructor + DynamicTreeItem<T> rootItem = (DynamicTreeItem<T>)view.getRoot(); + rootItem.update(); + } + + /** Sets the selection of this tree view. */ + public void setSelection(Object value) { + // wild cast works: see constructor + DynamicTreeItem<T> rootItem = (DynamicTreeItem<T>)view.getRoot(); + DynamicTreeItem<T> item = findItem(rootItem, value); + int row = view.getRow(item); + view.getSelectionModel().select(row); + } + + /** Searches the {@link DynamicTreeItem} for the given value. */ + public DynamicTreeItem<T> findItem(DynamicTreeItem<T> item, Object value) { + if(item == null || value == null) { + return null; + } + if(item.getValue().equals(value)) { + return item; + } + for(TreeItem<T> subItem : item.getChildren()) { + if(subItem instanceof DynamicTreeItem) { + DynamicTreeItem<T> i = findItem((DynamicTreeItem<T>)subItem, value); + if(i != null) { + return i; + } + } + } + return null; + } + + /** Sets the selection change listener. */ + public void setSelectionListener(ChangeListener<Object> listener) { + this.selectionChangeListener = listener; + } + + /** Sets the double click handler. */ + public void setDoubleClickHandler(IDoubleClickHandler handler) { + this.doubleClickHandler = handler; + } + + /** Configures the cell factory for the viewer. */ + private void configureCellFactory() { + view.setCellFactory(param -> { + TreeCell<T> cell = new TreeCell<T>() { + @Override + public void updateItem(T item, boolean empty) { + super.updateItem(item, empty); + ContextMenu menu = null; + if(!empty && item != null) { + menu = uiProvider.createContextMenu(item); + EventDispatcher original = this.getEventDispatcher(); + this.setEventDispatcher(new DoubleClickEventDispatcher(original)); + this.setText(uiProvider.getLabel(item)); + this.setGraphic(uiProvider.getIconNode(item)); + } else { + this.setText(null); + this.setGraphic(null); + } + this.setContextMenu(menu); + } + }; + return cell; + }); + } + + /** Expands items up to the given level. */ + private void expandItem(TreeItem<T> parentItem, int revealLevel) { + if(revealLevel <= 0) { + return; + } + parentItem.setExpanded(true); + revealLevel--; + for(TreeItem<T> child : parentItem.getChildren()) { + expandItem(child, revealLevel); + } + } + + /** Returns the underlying {@link TreeView}. */ + public TreeView<T> getControl() { + return view; + } + + /** Returns the UI provider. */ + public DynamicTreeUIProviderBase<T> getUIProvider() { + return uiProvider; + } + + /** + * Customized event dispatcher to fix double-click behavior. Thiss prevents opening/closing of + * tree items with double click listeners assigned. + */ + private class DoubleClickEventDispatcher implements EventDispatcher { + /** The original event dispatcher. */ + private final EventDispatcher original; + + /** Constructor. */ + public DoubleClickEventDispatcher(EventDispatcher original) { + this.original = original; + } + + /** {@inheritDoc} */ + @Override + public Event dispatchEvent(Event event, EventDispatchChain tail) { + if(event instanceof MouseEvent) { + MouseEvent mevt = (MouseEvent)event; + if(mevt.getButton() == MouseButton.PRIMARY && mevt.getClickCount() >= 2) { + if(mevt.getEventType().equals(MouseEvent.MOUSE_CLICKED) && + doubleClickHandler != null) { + DynamicTreeItem<T> item = + (DynamicTreeItem<T>)view.getSelectionModel().getSelectedItem(); + if(item != null) { + doubleClickHandler.doubleClicked(item.getValue()); + } + } + event.consume(); + } + } + return original.dispatchEvent(event, tail); + } + } +} diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewerBase.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewerBase.java new file mode 100644 index 0000000000000000000000000000000000000000..47124c847de322a0ae26eb7a114f85ce4bd02d7e --- /dev/null +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewerBase.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2016, 2018 fortiss GmbH. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * http://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Florian Hoelzl (fortiss GmbH) - initial implementation + * Alexander Diewald (fortiss GmbH) - backport to AF3 & Integration + * improvements + * + *******************************************************************************/ +package org.fortiss.tooling.common.ui.javafx.control.treetableview; + +/** + * Base class for {@link DynamicTreeViewer} and {@link DynamicTreeTableViewer}. + */ +abstract class DynamicTreeViewerBase<T> { + /** The content provider implementation. */ + private final DynamicTreeContentProviderBase<T> contentProvider; + + /** Constructor. */ + public DynamicTreeViewerBase(DynamicTreeContentProviderBase<T> contentProvider) { + this.contentProvider = contentProvider; + } + + /** Returns the content provider. */ + public final DynamicTreeContentProviderBase<T> getContentProvider() { + return contentProvider; + } +} diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/IDoubleClickHandler.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/IDoubleClickHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..447f7769dead9a106b3ea3139ef0da51eb0b9a89 --- /dev/null +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/IDoubleClickHandler.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2017, 2018 fortiss GmbH. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * http://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Florian Hoelzl (fortiss GmbH) - initial implementation + * Alexander Diewald (fortiss GmbH) - backport to AF3 & Integration + * improvements + * + *******************************************************************************/ +package org.fortiss.tooling.common.ui.javafx.control.treetableview; + +/** + * Functional interface for handlers interested in double-clicks on tree and tree-table items. + */ +@FunctionalInterface +public interface IDoubleClickHandler { + /** A double-click event occured on the given value object. */ + void doubleClicked(Object value); +} diff --git a/org.fortiss.tooling.common/.classpath b/org.fortiss.tooling.common/.classpath index a85e8cb8e47f0e039ed1ed47b72b4dc73134065c..d3222840cdcada3aafe722665b5a062d495fd112 100644 --- a/org.fortiss.tooling.common/.classpath +++ b/org.fortiss.tooling.common/.classpath @@ -4,8 +4,13 @@ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry exported="true" kind="lib" path="lib/org.conqat.ide.commons.jar"/> - <classpathentry exported="true" kind="lib" path="lib/commons-lang-2.6.jar"/> - <classpathentry exported="true" kind="lib" path="lib/commons-io-2.4.jar" sourcepath="lib/commons-io-2.4-sources.jar"/> <classpathentry exported="true" kind="lib" path="lib/opencsv-2.3.jar"/> + <classpathentry exported="true" kind="lib" path="lib/apache-commons/commons-lang3-3.7.jar" sourcepath="lib/apache-commons/commons-lang3-3.7-sources.jar"> + <attributes> + <attribute name="javadoc_location" value="jar:platform:/resource/org.fortiss.tooling.common/lib/apache-commons/commons-lang3-3.7-javadoc.jar!/"/> + </attributes> + </classpathentry> + <classpathentry exported="true" kind="lib" path="lib/apache-commons/commons-lang-2.6.jar"/> + <classpathentry exported="true" kind="lib" path="lib/apache-commons/commons-io-2.4.jar" sourcepath="lib/apache-commons/commons-io-2.4-sources.jar"/> <classpathentry kind="output" path="build"/> </classpath> diff --git a/org.fortiss.tooling.common/META-INF/MANIFEST.MF b/org.fortiss.tooling.common/META-INF/MANIFEST.MF index aabef266017ce10a8b7e6c39a12594c0396248c8..e970af7485e04193f1aa474726f467ad6368b414 100644 --- a/org.fortiss.tooling.common/META-INF/MANIFEST.MF +++ b/org.fortiss.tooling.common/META-INF/MANIFEST.MF @@ -9,9 +9,10 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.7.0";visibility:=reex Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ClassPath: ., + lib/apache-commons/commons-lang-2.6.jar, + lib/apache-commons/commons-lang3-3.7.jar, + lib/apache-commons/commons-io-2.4.jar, lib/org.conqat.ide.commons.jar, - lib/commons-lang-2.6.jar, - lib/commons-io-2.4.jar, lib/opencsv-2.3.jar Export-Package: au.com.bytecode.opencsv, au.com.bytecode.opencsv.bean, @@ -23,6 +24,7 @@ Export-Package: au.com.bytecode.opencsv, org.apache.commons.io.output, org.apache.commons.lang, org.apache.commons.lang.builder, + org.apache.commons.lang.enum, org.apache.commons.lang.enums, org.apache.commons.lang.exception, org.apache.commons.lang.math, @@ -30,6 +32,19 @@ Export-Package: au.com.bytecode.opencsv, org.apache.commons.lang.reflect, org.apache.commons.lang.text, org.apache.commons.lang.time, + org.apache.commons.lang3, + org.apache.commons.lang3.arch, + org.apache.commons.lang3.builder, + org.apache.commons.lang3.concurrent, + org.apache.commons.lang3.event, + org.apache.commons.lang3.exception, + org.apache.commons.lang3.math, + org.apache.commons.lang3.mutable, + org.apache.commons.lang3.reflect, + org.apache.commons.lang3.text, + org.apache.commons.lang3.text.translate, + org.apache.commons.lang3.time, + org.apache.commons.lang3.tuple, org.conqat.lib.commons.algo, org.conqat.lib.commons.assertion, org.conqat.lib.commons.assessment, diff --git a/org.fortiss.tooling.common/build.properties b/org.fortiss.tooling.common/build.properties index 55d01c755f97c34c725a399eb38683860e4e625b..cff8dcb95edca35c858c420caaba57e2e483b980 100644 --- a/org.fortiss.tooling.common/build.properties +++ b/org.fortiss.tooling.common/build.properties @@ -5,7 +5,9 @@ output.. = build/ bin.includes = .,\ META-INF/,\ lib/org.conqat.ide.commons.jar,\ - lib/commons-lang-2.6.jar,\ - lib/commons-io-2.4.jar,\ - lib/opencsv-2.3.jar + lib/apache-commons/commons-lang-2.6.jar,\ + lib/apache-commons/commons-io-2.4.jar,\ + lib/opencsv-2.3.jar,\ + lib/apache-commons/commons-lang3-3.7.jar,\ + lib/apache-commons/LICENSE.txt src.includes = lib/ diff --git a/org.fortiss.tooling.common/lib/apache-commons/LICENSE.txt b/org.fortiss.tooling.common/lib/apache-commons/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7 --- /dev/null +++ b/org.fortiss.tooling.common/lib/apache-commons/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/org.fortiss.tooling.common/lib/commons-io-2.4-sources.jar b/org.fortiss.tooling.common/lib/apache-commons/commons-io-2.4-sources.jar similarity index 100% rename from org.fortiss.tooling.common/lib/commons-io-2.4-sources.jar rename to org.fortiss.tooling.common/lib/apache-commons/commons-io-2.4-sources.jar diff --git a/org.fortiss.tooling.common/lib/commons-io-2.4.jar b/org.fortiss.tooling.common/lib/apache-commons/commons-io-2.4.jar similarity index 100% rename from org.fortiss.tooling.common/lib/commons-io-2.4.jar rename to org.fortiss.tooling.common/lib/apache-commons/commons-io-2.4.jar diff --git a/org.fortiss.tooling.common/lib/commons-lang-2.6.jar b/org.fortiss.tooling.common/lib/apache-commons/commons-lang-2.6.jar similarity index 100% rename from org.fortiss.tooling.common/lib/commons-lang-2.6.jar rename to org.fortiss.tooling.common/lib/apache-commons/commons-lang-2.6.jar diff --git a/org.fortiss.tooling.common/lib/apache-commons/commons-lang3-3.7-javadoc.jar b/org.fortiss.tooling.common/lib/apache-commons/commons-lang3-3.7-javadoc.jar new file mode 100644 index 0000000000000000000000000000000000000000..f16817a442855cbd44bbc3eb0392a0e61d288dea Binary files /dev/null and b/org.fortiss.tooling.common/lib/apache-commons/commons-lang3-3.7-javadoc.jar differ diff --git a/org.fortiss.tooling.common/lib/apache-commons/commons-lang3-3.7-sources.jar b/org.fortiss.tooling.common/lib/apache-commons/commons-lang3-3.7-sources.jar new file mode 100644 index 0000000000000000000000000000000000000000..a83c661a87db03d3f24bd440fde6d7fa6211e6fb Binary files /dev/null and b/org.fortiss.tooling.common/lib/apache-commons/commons-lang3-3.7-sources.jar differ diff --git a/org.fortiss.tooling.common/lib/apache-commons/commons-lang3-3.7.jar b/org.fortiss.tooling.common/lib/apache-commons/commons-lang3-3.7.jar new file mode 100644 index 0000000000000000000000000000000000000000..f37ded60fe6d78afa7758866c089b6296503868f Binary files /dev/null and b/org.fortiss.tooling.common/lib/apache-commons/commons-lang3-3.7.jar differ