View Javadoc
1   package de.spiritscorp.datasync.theme;
2   
3   /*-
4    * 		Data Sync
5    *
6    * 		Copyright ©   2022    The Spirit
7    * 		@email                        thespirit@spiritscorp.network
8    *
9    * 		This program is free software; you can redistribute it and/or modify
10   * 		it under the terms of the GNU General Public License as published by
11   * 		the Free Software Foundation; either version 3 of the License, or
12   * 		(at your option) any later version.
13   *
14   * 		This program is distributed in the hope that it will be useful,
15   * 		but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * 		MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17   * 		See the GNU General Public License for more details.
18   *
19   * 		You should have received a copy of the GNU General Public License
20   * 		along with this program. If not, see <http://www.gnu.org/licenses/>.
21   */
22  
23  import javafx.scene.Scene;
24  
25  /**
26   * MatrixTheme provides a retro cyberpunk/terminal look with high-contrast green text
27   * on a pitch-black background.
28   */
29  public class MatrixTerminalTheme implements AppTheme {
30  	@Override
31  	public void apply( Scene scene ) {
32  		scene.getRoot().setStyle( "-fx-font-size: 14; -fx-font-family: 'Consolas', 'Courier New', monospace; -fx-background-color: #050505; -fx-text-fill: #00ff00;" );
33  		final String css = """
34  				.list-view { -fx-background-color: #050505; }
35  				.list-cell { -fx-background-color: #050505; -fx-text-fill: #00ff00; -fx-padding: 10px; -fx-border-color: #003300; -fx-border-width: 0 0 1px 0; }
36  				.list-cell:hover { -fx-background-color: #001a00; }
37  				.list-cell:selected { -fx-background-color: #003300; -fx-text-fill: #ffffff; -fx-border-color: #00ff00; }
38  				.label { -fx-text-fill: #00ff00 !important; }
39  				.button { -fx-background-color: #002200; -fx-text-fill: #00ff00; -fx-border-color: #00ff00; -fx-background-radius: 0; -fx-border-radius: 0; -fx-cursor: hand; }
40  				.button:hover { -fx-background-color: #00ff00; -fx-text-fill: #000000; }
41  				.text-field, .combo-box, .text-area { -fx-background-color: #000000; -fx-text-fill: #00ff00; -fx-border-color: #00ff00; -fx-border-radius: 0; }
42  				.text-field:focused, .combo-box:focused, .text-area:focused { -fx-border-color: #000000; }
43  
44  				.status-success { -fx-text-fill: #22aa22; -fx-font-weight: bold; }
45  				.status-error   { -fx-text-fill: #ff3333; -fx-font-weight: bold; }
46  				.status-warning { -fx-text-fill: #ffaa00; -fx-font-weight: bold; }
47  
48  				/* Extended JavaFX Controls */
49  				.table-view { -fx-background-color: #050505; -fx-border-color: #00ff00; }
50  				.table-view .column-header, .table-view .filler { -fx-background-color: #001a00; -fx-border-color: #003300; }
51  				.table-view .column-header .label { -fx-text-fill: #00ff00; }
52  				.table-row-cell { -fx-background-color: #050505; -fx-text-fill: #00ff00; }
53  				.table-row-cell:odd { -fx-background-color: #0a0a0a; }
54  				.table-row-cell:selected { -fx-background-color: #003300; }
55  				.table-row-cell:selected .text { -fx-fill: #000000; }
56  
57  				.tab-pane .tab-header-area .tab-header-background { -fx-background-color: #000000; }
58  				.tab { -fx-background-color: #002200; -fx-border-color: #00ff00; }
59  				.tab:selected { -fx-background-color: #00ff00; }
60  				.tab:selected .tab-label { -fx-text-fill: #000000 !important; }
61  				.tab .tab-label { -fx-text-fill: #00ff00; }
62  
63  				.progress-bar .track { -fx-background-color: #404a00; -fx-background-radius: 0; }
64  				.progress-bar .bar { -fx-background-color: #006fa0; -fx-background-radius: 0; }
65  
66  				.check-box .box { -fx-background-color: #000000;  -fx-text-fill: #00ff00; -fx-border-color: #00ff00; -fx-background-radius: 3; }
67  				.check-box .text { -fx-fill: #00ff00;  -fx-background-color: #00ff00; }
68  				.check-box:selected .mark { -fx-background-color: #00ff00; }
69  
70  
71  				.scroll-pane, .scroll-pane .viewport {
72  				    -fx-background-color: #050505 !important;
73  				    -fx-background: #050505 !important; /* Wichtig für den leeren ScrollPane-Hintergrund */
74  				}
75  				.text-area {
76  				    -fx-background-color: #050505 !important;
77  				    -fx-text-fill: #00ff00 !important;
78  				}
79  				.text-area .content {
80  				    -fx-background-color: #050505 !important;
81  				    -fx-text-fill: #00ff00 !important;
82  				}
83  				.scroll-pane .scroll-bar:vertical, .scroll-pane .scroll-bar:horizontal {
84  				    -fx-background-color: #0d0d0d !important;
85  				}
86  				.scroll-pane .scroll-bar .thumb {
87  				    -fx-background-color: #002200 !important;
88  				    -fx-border-color: #00ff00 !important;
89  				}
90  				.menu-button {
91  				    -fx-background-color: #002200;
92  				    -fx-text-fill: #00ff00;
93  				    -fx-border-color: #00ff00;
94  				    -fx-background-radius: 0;
95  				    -fx-border-radius: 0;
96  				}
97  				.menu-item {
98  				    -fx-background-color: #002200;
99  				    -fx-text-fill: #00ff00;
100 				    -fx-border-color: #00ff00;
101 				    -fx-background-radius: 0;
102 				    -fx-border-radius: 0;
103 				}
104 				.menu-button:hover {
105 				    -fx-background-color: #006600;
106 				    -fx-text-fill: #ff88ff;
107 				}
108 				.dialog-pane {
109 				    -fx-background-color: #050505 !important;
110 				    -fx-border-color: #00ff00 !important;
111 				    -fx-border-width: 1px !important;
112 				}
113 				.dialog-pane .header-panel {
114 				    -fx-background-color: #050505 !important;
115 				    -fx-border-color: transparent !important; /* Entfernt die weiße/graue Trennlinie */
116 				}
117 				.dialog-pane .content-panel,
118 				.dialog-pane .button-bar {
119 				    -fx-background-color: #050505 !important;
120 				}
121 				.dialog-pane .label {
122 				    -fx-text-fill: #00ff00 !important;
123 				}
124 				.dialog-pane .button {
125 				    -fx-background-color: #002200 !important;
126 				    -fx-text-fill: #00ff00 !important;
127 				    -fx-border-color: #00ff00 !important;
128 				    -fx-background-radius: 0 !important;
129 				    -fx-border-radius: 0 !important;
130 				}
131 				.dialog-pane .button:hover {
132 				    -fx-background-color: #00ff00 !important;
133 				    -fx-text-fill: #000000 !important;
134 				}
135 				.combo-box:hover {
136 				    -fx-border-color: #00ff00;
137 				}
138 				.combo-box .list-cell {
139 				    -fx-background-color: #00ff00;
140 				    -fx-text-fill: #252525;
141 				}
142 				.combo-box .list-cell:hover, .combo-box .list-cell:selected {
143 				    -fx-background-color: #252525;
144 				    -fx-text-fill: #00ff00;
145 				}
146 					""";
147 		scene.getStylesheets().clear();
148 		scene.getStylesheets().add( "data:text/css," + css.replace( "\n", "" ).replace( " ", "%20" ) );
149 	}
150 
151 	@Override
152 	public String getName() { return "Matrix Terminal"; }
153 
154 	@Override
155 	public String toString() {
156 		return getName();
157 	}
158 }