├── src └── main │ ├── resources │ ├── styles │ │ ├── Styles.css │ │ ├── chart.css │ │ ├── tableAlign.css │ │ ├── progressIndicator.css │ │ ├── pagination.css │ │ ├── hiddenTabs.css │ │ ├── header.css │ │ ├── tableHeader.css │ │ ├── message.css │ │ ├── warning.css │ │ ├── login.css │ │ ├── popup.css │ │ ├── accordian.css │ │ ├── table.css │ │ ├── tabbedPane4.css │ │ ├── tabbedPane.css │ │ └── tabbedPaneTheme2.css │ ├── imgs │ │ ├── bg1.jpg │ │ ├── bg2.png │ │ ├── bg3.jpg │ │ ├── bg4.jpg │ │ ├── bg5.jpg │ │ ├── bg6.jpg │ │ ├── msgread.png │ │ ├── noUser.png │ │ ├── profile.png │ │ ├── refund.png │ │ ├── msgunread.png │ │ └── profilePics │ │ │ ├── p1.png │ │ │ ├── p2.png │ │ │ ├── p3.png │ │ │ ├── user001ProfPic.png │ │ │ ├── user012ProfPic.png │ │ │ ├── user016ProfPic.png │ │ │ ├── user018ProfPic.png │ │ │ ├── user020ProfPic.png │ │ │ └── user021ProfPic.png │ └── fxml │ │ ├── Popover.fxml │ │ ├── Error.fxml │ │ ├── Popover2.fxml │ │ ├── Warning.fxml │ │ ├── adminMessage.fxml │ │ ├── ProgressIndicator.fxml │ │ ├── CurrentUserSummary.fxml │ │ ├── AllMessages.fxml │ │ ├── UserOptionPopOver.fxml │ │ ├── PrescriptionListPopup.fxml │ │ ├── PopupAsk.fxml │ │ ├── Logout.fxml │ │ ├── LabReportPreview.fxml │ │ ├── ReadMessage.fxml │ │ ├── PatientAccountSuccess.fxml │ │ ├── AppointmentSuccess.fxml │ │ └── RefundTable.fxml │ └── java │ ├── Doctor │ ├── Appointment.java │ ├── Availability.java │ ├── Message.java │ ├── PopoverController.java │ └── NewDoctorTimeSlotController.java │ ├── com │ └── hms │ │ └── hms_test_2 │ │ ├── ErrorController.java │ │ ├── WarningController.java │ │ ├── SuccessIndicatorController.java │ │ ├── MainApp.java │ │ ├── SystemConfiguration.java │ │ ├── PopupAskController.java │ │ ├── LogoutController.java │ │ ├── CurrentUserSummaryController.java │ │ ├── AllMessages.java │ │ ├── ReadMessageController.java │ │ ├── NewMessageController.java │ │ ├── Validate.java │ │ └── AllMessagesController.java │ ├── LabAssistant │ ├── LabReport.java │ ├── Prescription.java │ ├── PrescriptionListController.java │ └── LabReportPreviewController.java │ ├── Admin │ ├── AdminMessageController.java │ ├── UserAccount.java │ ├── NewUserController.java │ ├── UserOptionPopOverController.java │ └── SysUserController.java │ ├── Receptionist │ ├── Popover2Controller.java │ ├── AppointmentSuccessController.java │ ├── PatientAccountSuccessController.java │ ├── DoctorDetail.java │ └── AllAppointmentsController.java │ ├── Cashier │ ├── BillPreviewController.java │ ├── Refund.java │ ├── Bill.java │ └── RefundController.java │ └── Pharmacist │ └── Drug.java ├── screenshots ├── screenshots.png ├── componentInteractions.png └── componentInteractions2.png ├── config.properties ├── .gitignore ├── README.md └── pom.xml /src/main/resources/styles/Styles.css: -------------------------------------------------------------------------------- 1 | .button { 2 | -fx-font-weight: bold; 3 | } 4 | -------------------------------------------------------------------------------- /src/main/resources/styles/chart.css: -------------------------------------------------------------------------------- 1 | .chart-pie-label { 2 | -fx-font-size: 10px ; 3 | } 4 | -------------------------------------------------------------------------------- /src/main/resources/styles/tableAlign.css: -------------------------------------------------------------------------------- 1 | #history .table-column { 2 | -fx-alignment: CENTER; 3 | } 4 | -------------------------------------------------------------------------------- /src/main/resources/styles/progressIndicator.css: -------------------------------------------------------------------------------- 1 | #saveSuccess .percentage { 2 | -fx-fill: #ffffff ; 3 | } 4 | -------------------------------------------------------------------------------- /src/main/resources/styles/pagination.css: -------------------------------------------------------------------------------- 1 | 2 | .pagination { 3 | -fx-page-information-visible:false; 4 | } 5 | 6 | -------------------------------------------------------------------------------- /screenshots/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/screenshots/screenshots.png -------------------------------------------------------------------------------- /src/main/resources/imgs/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/bg1.jpg -------------------------------------------------------------------------------- /src/main/resources/imgs/bg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/bg2.png -------------------------------------------------------------------------------- /src/main/resources/imgs/bg3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/bg3.jpg -------------------------------------------------------------------------------- /src/main/resources/imgs/bg4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/bg4.jpg -------------------------------------------------------------------------------- /src/main/resources/imgs/bg5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/bg5.jpg -------------------------------------------------------------------------------- /src/main/resources/imgs/bg6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/bg6.jpg -------------------------------------------------------------------------------- /src/main/resources/imgs/msgread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/msgread.png -------------------------------------------------------------------------------- /src/main/resources/imgs/noUser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/noUser.png -------------------------------------------------------------------------------- /src/main/resources/imgs/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/profile.png -------------------------------------------------------------------------------- /src/main/resources/imgs/refund.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/refund.png -------------------------------------------------------------------------------- /screenshots/componentInteractions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/screenshots/componentInteractions.png -------------------------------------------------------------------------------- /src/main/resources/imgs/msgunread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/msgunread.png -------------------------------------------------------------------------------- /screenshots/componentInteractions2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/screenshots/componentInteractions2.png -------------------------------------------------------------------------------- /src/main/resources/imgs/profilePics/p1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/profilePics/p1.png -------------------------------------------------------------------------------- /src/main/resources/imgs/profilePics/p2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/profilePics/p2.png -------------------------------------------------------------------------------- /src/main/resources/imgs/profilePics/p3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/profilePics/p3.png -------------------------------------------------------------------------------- /src/main/resources/styles/hiddenTabs.css: -------------------------------------------------------------------------------- 1 | .tab-pane { 2 | -fx-tab-max-height: 0 ; 3 | } 4 | .tab-pane .tab-header-area { 5 | visibility: hidden ; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/styles/header.css: -------------------------------------------------------------------------------- 1 | .label{ 2 | -fx-background-color: #222; 3 | -fx-border-width: 0 0 0 2; -fx-border-color: #222 #222 #080808 #222 ; 4 | } 5 | -------------------------------------------------------------------------------- /config.properties: -------------------------------------------------------------------------------- 1 | #Database Properties 2 | dbClassName=org.mariadb.jdbc.Driver 3 | connection=jdbc:mysql://127.0.0.1/ 4 | user=heshan 5 | password=pass 6 | database=test_HMS2 7 | -------------------------------------------------------------------------------- /src/main/resources/imgs/profilePics/user001ProfPic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/profilePics/user001ProfPic.png -------------------------------------------------------------------------------- /src/main/resources/imgs/profilePics/user012ProfPic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/profilePics/user012ProfPic.png -------------------------------------------------------------------------------- /src/main/resources/imgs/profilePics/user016ProfPic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/profilePics/user016ProfPic.png -------------------------------------------------------------------------------- /src/main/resources/imgs/profilePics/user018ProfPic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/profilePics/user018ProfPic.png -------------------------------------------------------------------------------- /src/main/resources/imgs/profilePics/user020ProfPic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/profilePics/user020ProfPic.png -------------------------------------------------------------------------------- /src/main/resources/imgs/profilePics/user021ProfPic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stellarloop/Health-Care-Facility/HEAD/src/main/resources/imgs/profilePics/user021ProfPic.png -------------------------------------------------------------------------------- /src/main/resources/styles/tableHeader.css: -------------------------------------------------------------------------------- 1 | .column-header-background { visibility: hidden; -fx-padding: -1em; } 2 | 3 | .table-row-cell { 4 | -fx-cell-size: 55px; 5 | } 6 | 7 | #reportTable{ 8 | -fx-cell-size: 25px; 9 | } -------------------------------------------------------------------------------- /src/main/resources/styles/message.css: -------------------------------------------------------------------------------- 1 | #borderLeft{ 2 | -fx-background-color: #333333; 3 | -fx-border-radius: 0 5 5 0; 4 | -fx-background-insets: 2, 2, 2, 2; 5 | -fx-border-color: #eee; 6 | -fx-border-width: 0 3 3 0; 7 | } 8 | 9 | #borderRight{ 10 | -fx-background-color: #333333; 11 | -fx-border-radius: 5 0 0 5; 12 | -fx-background-insets: 2, 2, 2, 2; 13 | -fx-border-color: #eee; 14 | -fx-border-width: 3 0 0 3; 15 | } 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Maven target directory 2 | target/ 3 | 4 | # Maven Wrapper files (include only the wrapper directory if using Maven Wrapper) 5 | !.mvn/wrapper/ 6 | !.mvn/wrapper/* 7 | !.mvn/wrapper/maven-wrapper.properties 8 | !.mvn/wrapper/maven-wrapper.jar 9 | !.mvn/wrapper/maven-wrapper-download-url 10 | .mvn/ 11 | 12 | # OS-specific files 13 | .DS_Store 14 | Thumbs.db 15 | 16 | # IDE-specific files 17 | *.iml 18 | .idea/ 19 | .vscode/ 20 | nbactions.xml 21 | nb-configuration.xml -------------------------------------------------------------------------------- /src/main/resources/styles/warning.css: -------------------------------------------------------------------------------- 1 | #border{ 2 | -fx-border-color: #FF5F6C; 3 | -fx-border-width: 2 2 0 2; 4 | -fx-border-radius: 2 2 2 2; 5 | -fx-background-insets: 0, 1, 2; 6 | 7 | } 8 | 9 | #border2{ 10 | -fx-border-color: #FF5F6C; 11 | -fx-border-width: 2 2 0 2; 12 | -fx-border-radius: 2 2 2 2; 13 | -fx-background-insets: 0, 1, 2; 14 | -fx-background-color: #fff; 15 | } 16 | 17 | #iconBox{ 18 | -fx-background-color: #FF5F6C; 19 | } 20 | /* 21 | .popover > .border { 22 | -fx-fill: green; 23 | -fx-stroke: red; 24 | -fx-cursor: hand; 25 | -fx-stroke-width: 5; 26 | } 27 | */ 28 | -------------------------------------------------------------------------------- /src/main/resources/styles/login.css: -------------------------------------------------------------------------------- 1 | #background{ 2 | 3 | -fx-background-color: #333333; 4 | } 5 | 6 | #loginBox{ 7 | 8 | -fx-background-color: #eeeeee; 9 | -fx-border-radius: 5; 10 | -fx-background-insets: 2, 1, 2, 2; 11 | -fx-border-color: #eee; 12 | -fx-border-width: 3 3 3 3; 13 | } 14 | 15 | #borderTop{ 16 | -fx-background-color: #333333; 17 | -fx-border-radius: 5; 18 | -fx-background-insets: 2, 1, 2, 2; 19 | -fx-border-color: #eee; 20 | -fx-border-width: 3 0 0 3; 21 | } 22 | 23 | #borderBottom{ 24 | -fx-background-color: #333333; 25 | -fx-border-radius: 5; 26 | -fx-background-insets: 2, 1, 2, 2; 27 | -fx-border-color: #eee; 28 | -fx-border-width: 0 3 3 0; 29 | } -------------------------------------------------------------------------------- /src/main/java/Doctor/Appointment.java: -------------------------------------------------------------------------------- 1 | package Doctor; 2 | 3 | import java.util.GregorianCalendar; 4 | 5 | /** 6 | * 7 | * @author heshan 8 | */ 9 | public class Appointment { 10 | 11 | GregorianCalendar startTime; 12 | GregorianCalendar endTime; 13 | 14 | public Appointment(GregorianCalendar start, GregorianCalendar end) { 15 | setStartTime(start); 16 | setEndTime(end); 17 | } 18 | 19 | public GregorianCalendar getStartTime() { 20 | return startTime; 21 | } 22 | 23 | public void setStartTime(GregorianCalendar startTime) { 24 | this.startTime = startTime; 25 | } 26 | 27 | public GregorianCalendar getEndTime() { 28 | return endTime; 29 | } 30 | 31 | public void setEndTime(GregorianCalendar endTime) { 32 | this.endTime = endTime; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/hms/hms_test_2/ErrorController.java: -------------------------------------------------------------------------------- 1 | package com.hms.hms_test_2; 2 | 3 | import java.io.IOException; 4 | import javafx.fxml.FXML; 5 | import javafx.fxml.FXMLLoader; 6 | import javafx.scene.control.Label; 7 | import javafx.scene.layout.AnchorPane; 8 | 9 | /** 10 | * 11 | * @author heshan 12 | */ 13 | public class ErrorController extends AnchorPane { 14 | 15 | public ErrorController() { 16 | FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Error.fxml")); 17 | fxmlLoader.setRoot(this); 18 | fxmlLoader.setController(this); 19 | 20 | try { 21 | fxmlLoader.load(); 22 | } catch (IOException exception) { 23 | throw new RuntimeException(exception); 24 | } 25 | } 26 | 27 | @FXML 28 | Label formatLabel; 29 | 30 | public void addMessage(String message) { 31 | formatLabel.setText(message); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/hms/hms_test_2/WarningController.java: -------------------------------------------------------------------------------- 1 | 2 | package com.hms.hms_test_2; 3 | 4 | import java.io.IOException; 5 | import javafx.fxml.FXML; 6 | import javafx.fxml.FXMLLoader; 7 | import javafx.scene.control.Label; 8 | import javafx.scene.layout.AnchorPane; 9 | 10 | /** 11 | * 12 | * @author heshan 13 | */ 14 | public class WarningController extends AnchorPane { 15 | 16 | public WarningController() { 17 | FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Warning.fxml")); 18 | fxmlLoader.setRoot(this); 19 | fxmlLoader.setController(this); 20 | 21 | try { 22 | fxmlLoader.load(); 23 | } catch (IOException exception) { 24 | throw new RuntimeException(exception); 25 | } 26 | } 27 | 28 | @FXML 29 | Label formatLabel; 30 | 31 | public void addMessage(String message) { 32 | 33 | formatLabel.setText("Format: " + message); 34 | 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/LabAssistant/LabReport.java: -------------------------------------------------------------------------------- 1 | package LabAssistant; 2 | 3 | import javafx.beans.property.SimpleStringProperty; 4 | 5 | /** 6 | * 7 | * @author heshan 8 | */ 9 | public class LabReport { 10 | private final SimpleStringProperty constituent = new SimpleStringProperty(""); 11 | private final SimpleStringProperty result = new SimpleStringProperty(""); 12 | 13 | public LabReport() { 14 | this("", ""); 15 | } 16 | 17 | public LabReport(String constituent, String result) { 18 | setConstituent(constituent); 19 | setResult(result); 20 | } 21 | 22 | public String getConstituent() { 23 | return constituent.get(); 24 | } 25 | 26 | public void setConstituent(String value) { 27 | constituent.set(value); 28 | } 29 | 30 | public String getResult() { 31 | return result.get(); 32 | } 33 | 34 | public void setResult(String value) { 35 | result.set(value); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/Admin/AdminMessageController.java: -------------------------------------------------------------------------------- 1 | package Admin; 2 | 3 | import java.io.IOException; 4 | import javafx.fxml.FXML; 5 | import javafx.fxml.FXMLLoader; 6 | import javafx.scene.control.TextArea; 7 | import javafx.scene.control.TextField; 8 | import javafx.scene.layout.AnchorPane; 9 | 10 | /** 11 | * 12 | * @author heshan 13 | */ 14 | public class AdminMessageController extends AnchorPane { 15 | 16 | public AdminMessageController() { 17 | FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/adminMessage.fxml")); 18 | fxmlLoader.setRoot(this); 19 | fxmlLoader.setController(this); 20 | 21 | try { 22 | fxmlLoader.load(); 23 | } catch (IOException exception) { 24 | throw new RuntimeException(exception); 25 | } 26 | } 27 | 28 | @FXML 29 | TextField receiver; 30 | @FXML 31 | TextArea message; 32 | 33 | public void setPaceholders() { 34 | receiver.setPromptText("Receiver"); 35 | message.setPromptText("Type Message Here"); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/resources/fxml/Popover.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/main/java/com/hms/hms_test_2/SuccessIndicatorController.java: -------------------------------------------------------------------------------- 1 | package com.hms.hms_test_2; 2 | 3 | import java.io.IOException; 4 | import javafx.event.ActionEvent; 5 | import javafx.fxml.FXML; 6 | import javafx.fxml.FXMLLoader; 7 | import javafx.scene.control.Button; 8 | import javafx.scene.layout.AnchorPane; 9 | import javafx.stage.Stage; 10 | 11 | public class SuccessIndicatorController extends AnchorPane { 12 | 13 | public SuccessIndicatorController() { 14 | FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/ProgressIndicator.fxml")); 15 | fxmlLoader.setRoot(this); 16 | fxmlLoader.setController(this); 17 | 18 | try { 19 | fxmlLoader.load(); 20 | } catch (IOException exception) { 21 | throw new RuntimeException(exception); 22 | } 23 | } 24 | 25 | @FXML 26 | public Button saveSuccess; 27 | 28 | @FXML 29 | public void saveSuccessExit(ActionEvent event) { 30 | 31 | Stage stage; 32 | if (event.getSource() == saveSuccess) { 33 | stage = (Stage) saveSuccess.getScene().getWindow(); 34 | stage.close(); 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /src/main/java/Doctor/Availability.java: -------------------------------------------------------------------------------- 1 | package Doctor; 2 | 3 | import javafx.beans.property.SimpleStringProperty; 4 | 5 | /** 6 | * 7 | * @author heshan 8 | */ 9 | public class Availability { 10 | private final SimpleStringProperty date = new SimpleStringProperty(""); 11 | private final SimpleStringProperty time = new SimpleStringProperty(""); 12 | private final SimpleStringProperty id = new SimpleStringProperty(""); 13 | 14 | public Availability() { 15 | this("", "", ""); 16 | } 17 | 18 | public Availability(String date, String time, String id) { 19 | setDate(date); 20 | setTime(time); 21 | setId(id); 22 | } 23 | 24 | public String getDate() { 25 | return date.get(); 26 | } 27 | 28 | public void setDate(String value) { 29 | date.set(value); 30 | } 31 | 32 | public String getTime() { 33 | return time.get(); 34 | } 35 | 36 | public void setTime(String value) { 37 | time.set(value); 38 | } 39 | 40 | public String getId() { 41 | return id.get(); 42 | } 43 | 44 | public void setId(String value) { 45 | id.set(value); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/Receptionist/Popover2Controller.java: -------------------------------------------------------------------------------- 1 | package Receptionist; 2 | 3 | import javafx.fxml.FXML; 4 | import javafx.scene.control.*; 5 | import javafx.fxml.FXMLLoader; 6 | import java.io.IOException; 7 | import javafx.collections.ObservableList; 8 | import javafx.scene.layout.AnchorPane; 9 | import javafx.stage.Stage; 10 | 11 | /** 12 | * 13 | * @author heshan 14 | */ 15 | public class Popover2Controller extends AnchorPane { 16 | 17 | public Popover2Controller() { 18 | FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Popover2.fxml")); 19 | fxmlLoader.setRoot(this); 20 | fxmlLoader.setController(this); 21 | 22 | try { 23 | fxmlLoader.load(); 24 | } catch (IOException exception) { 25 | throw new RuntimeException(exception); 26 | } 27 | } 28 | 29 | @FXML 30 | private ListView daysList; 31 | 32 | public void fillDaysList(ObservableList items) { 33 | daysList.setItems(items); 34 | } 35 | 36 | @FXML 37 | public void closePopUp() { 38 | Stage stage = (Stage) daysList.getScene().getWindow(); 39 | stage.close(); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/Admin/UserAccount.java: -------------------------------------------------------------------------------- 1 | package Admin; 2 | 3 | import javafx.beans.property.SimpleStringProperty; 4 | 5 | /** 6 | * 7 | * @author heshan 8 | */ 9 | public class UserAccount { 10 | private final SimpleStringProperty user = new SimpleStringProperty(""); 11 | private final SimpleStringProperty lastLogin = new SimpleStringProperty(""); 12 | private final SimpleStringProperty online = new SimpleStringProperty(""); 13 | 14 | public UserAccount() { 15 | this("", "", ""); 16 | } 17 | 18 | public UserAccount(String user, String lastLogin, String online) { 19 | setUser(user); 20 | setLastLogin(lastLogin); 21 | setOnline(online); 22 | } 23 | 24 | public void setUser(String val) { 25 | user.set(val); 26 | } 27 | 28 | public void setLastLogin(String val) { 29 | lastLogin.set(val); 30 | } 31 | 32 | public void setOnline(String val) { 33 | online.set(val); 34 | } 35 | 36 | public String getUser() { 37 | return user.get(); 38 | } 39 | 40 | public String getLastLogin() { 41 | return lastLogin.get(); 42 | } 43 | 44 | public String getOnline() { 45 | return online.get(); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/Doctor/Message.java: -------------------------------------------------------------------------------- 1 | package Doctor; 2 | 3 | import javafx.beans.property.SimpleStringProperty; 4 | 5 | /** 6 | * 7 | * @author heshan 8 | */ 9 | public class Message { 10 | private final SimpleStringProperty sender = new SimpleStringProperty(""); 11 | private final SimpleStringProperty subject = new SimpleStringProperty(""); 12 | private final SimpleStringProperty message = new SimpleStringProperty(""); 13 | 14 | public Message() { 15 | this("", "", ""); 16 | } 17 | 18 | public Message(String sender, String subject, String message) { 19 | setSender(sender); 20 | setSubject(subject); 21 | setMessage(message); 22 | } 23 | 24 | public String getSender() { 25 | return sender.get(); 26 | } 27 | 28 | public void setSender(String value) { 29 | sender.set(value); 30 | } 31 | 32 | public String getSubject() { 33 | return subject.get(); 34 | } 35 | 36 | public void setSubject(String value) { 37 | subject.set(value); 38 | } 39 | 40 | public String getMessage() { 41 | return message.get(); 42 | } 43 | 44 | public void setMessage(String value) { 45 | message.set(value); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/resources/fxml/Error.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 21 | 22 | -------------------------------------------------------------------------------- /src/main/java/com/hms/hms_test_2/MainApp.java: -------------------------------------------------------------------------------- 1 | package com.hms.hms_test_2; 2 | 3 | import javafx.application.Application; 4 | import javafx.geometry.Rectangle2D; 5 | import javafx.scene.Scene; 6 | import javafx.stage.Screen; 7 | import javafx.stage.Stage; 8 | import javafx.stage.StageStyle; 9 | 10 | public class MainApp extends Application { 11 | 12 | @Override 13 | public void start(Stage stage) throws Exception { 14 | LoginController login = new LoginController(); 15 | stage.setScene(new Scene(login)); 16 | Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds(); 17 | // set Stage boundaries to visible bounds of the main screen 18 | stage.setX(primaryScreenBounds.getMinX()); 19 | stage.setY(primaryScreenBounds.getMinY()); 20 | stage.setWidth(primaryScreenBounds.getWidth()); 21 | stage.setHeight(primaryScreenBounds.getHeight()); 22 | stage.initStyle(StageStyle.UNDECORATED); 23 | stage.show(); 24 | } 25 | 26 | /** 27 | * The main() method is ignored in correctly deployed JavaFX application. 28 | * main() serves only as fallback in case the application can not be 29 | * launched through deployment artifacts, e.g., in IDEs with limited FX 30 | * support. NetBeans ignores main(). 31 | * 32 | * @param args the command line arguments 33 | */ 34 | public static void main(String[] args) { 35 | launch(args); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/resources/fxml/Popover2.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/main/java/Admin/NewUserController.java: -------------------------------------------------------------------------------- 1 | package Admin; 2 | 3 | import java.io.IOException; 4 | import javafx.event.ActionEvent; 5 | import javafx.fxml.FXML; 6 | import javafx.fxml.FXMLLoader; 7 | import javafx.scene.control.Button; 8 | import javafx.scene.control.TextField; 9 | import javafx.scene.layout.AnchorPane; 10 | import javafx.stage.Stage; 11 | 12 | /** 13 | * 14 | * @author heshan 15 | */ 16 | class NewUserController extends AnchorPane { 17 | 18 | public NewUserController() { 19 | FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/NewUser.fxml")); 20 | fxmlLoader.setRoot(this); 21 | fxmlLoader.setController(this); 22 | 23 | try { 24 | fxmlLoader.load(); 25 | } catch (IOException exception) { 26 | throw new RuntimeException(exception); 27 | } 28 | } 29 | 30 | @FXML 31 | private TextField userName; 32 | @FXML 33 | private TextField userid; 34 | @FXML 35 | private TextField password; 36 | 37 | public void loadData(String username, String id, String pass) { 38 | userName.setText(username); 39 | userid.setText(id); 40 | password.setText(pass); 41 | } 42 | 43 | @FXML 44 | private Button closeUser; 45 | 46 | @FXML 47 | private void closeUserWindow(ActionEvent event) { 48 | 49 | Stage stage; 50 | if (event.getSource() == closeUser) { 51 | stage = (Stage) closeUser.getScene().getWindow(); 52 | stage.close(); 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/LabAssistant/Prescription.java: -------------------------------------------------------------------------------- 1 | package LabAssistant; 2 | 3 | import javafx.beans.property.SimpleStringProperty; 4 | 5 | /** 6 | * 7 | * @author heshan 8 | */ 9 | public class Prescription { 10 | private final SimpleStringProperty prescID = new SimpleStringProperty(""); 11 | private final SimpleStringProperty date = new SimpleStringProperty(""); 12 | private final SimpleStringProperty doctor = new SimpleStringProperty(""); 13 | private final SimpleStringProperty prescription = new SimpleStringProperty(""); 14 | 15 | public Prescription() { 16 | this("", "", "", ""); 17 | } 18 | 19 | public Prescription(String prescID, String date, String doctor, String prescription) { 20 | setPrescID(prescID); 21 | setDate(date); 22 | setDoctor(doctor); 23 | setPrescription(prescription); 24 | } 25 | 26 | public String getPrescID() { 27 | return prescID.get(); 28 | } 29 | 30 | public void setPrescID(String value) { 31 | prescID.set(value); 32 | } 33 | 34 | public String getDate() { 35 | return date.get(); 36 | } 37 | 38 | public void setDate(String value) { 39 | date.set(value); 40 | } 41 | 42 | public String getDoctor() { 43 | return doctor.get(); 44 | } 45 | 46 | public void setDoctor(String value) { 47 | doctor.set(value); 48 | } 49 | 50 | public String getPrescription() { 51 | return prescription.get(); 52 | } 53 | 54 | public void setPrescription(String value) { 55 | prescription.set(value); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/Admin/UserOptionPopOverController.java: -------------------------------------------------------------------------------- 1 | package Admin; 2 | 3 | import java.io.IOException; 4 | import javafx.fxml.FXML; 5 | import javafx.fxml.FXMLLoader; 6 | import javafx.scene.chart.AreaChart; 7 | import javafx.scene.chart.NumberAxis; 8 | import javafx.scene.chart.XYChart; 9 | import javafx.scene.layout.AnchorPane; 10 | 11 | /** 12 | * 13 | * @author heshan 14 | */ 15 | class UserOptionPopOverController extends AnchorPane { 16 | 17 | public UserOptionPopOverController() { 18 | FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/UserOptionPopOver.fxml")); 19 | fxmlLoader.setRoot(this); 20 | fxmlLoader.setController(this); 21 | 22 | try { 23 | fxmlLoader.load(); 24 | } catch (IOException exception) { 25 | throw new RuntimeException(exception); 26 | } 27 | } 28 | 29 | @FXML 30 | private NumberAxis yAxis; 31 | @FXML 32 | private AreaChart onlineChart; 33 | 34 | /** 35 | * Area chart Fill info about the users that currently logged in 36 | */ 37 | @FXML 38 | public void fillAreaChart() { 39 | 40 | XYChart.Series users = new XYChart.Series<>(); 41 | users.setName("Users"); 42 | users.getData().add(new XYChart.Data<>("8.00", 0)); 43 | users.getData().add(new XYChart.Data<>("8.15", 1)); 44 | users.getData().add(new XYChart.Data<>("8.30", 2)); 45 | users.getData().add(new XYChart.Data<>("8.45", 1)); 46 | users.getData().add(new XYChart.Data<>("9.00", 2)); 47 | onlineChart.getData().add(users); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/Receptionist/AppointmentSuccessController.java: -------------------------------------------------------------------------------- 1 | package Receptionist; 2 | 3 | import java.io.IOException; 4 | import javafx.event.ActionEvent; 5 | import javafx.fxml.FXML; 6 | import javafx.fxml.FXMLLoader; 7 | import javafx.scene.control.*; 8 | import javafx.scene.layout.AnchorPane; 9 | import javafx.stage.Stage; 10 | 11 | public class AppointmentSuccessController extends AnchorPane { 12 | 13 | public AppointmentSuccessController() { 14 | FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/AppointmentSuccess.fxml")); 15 | fxmlLoader.setRoot(this); 16 | fxmlLoader.setController(this); 17 | 18 | try { 19 | fxmlLoader.load(); 20 | } catch (IOException exception) { 21 | throw new RuntimeException(exception); 22 | } 23 | } 24 | 25 | @FXML 26 | private Label patientID; 27 | @FXML 28 | private Label consultant; 29 | @FXML 30 | private Label date; 31 | @FXML 32 | private Label appID; 33 | 34 | public void fillAppointmentData(String patientId, String consult, String appDate, String appId) { 35 | patientID.setText(" " + patientId); 36 | consultant.setText(" " + consult); 37 | date.setText(" " + appDate); 38 | appID.setText(" " + appId); 39 | 40 | } 41 | 42 | @FXML 43 | public Button saveSuccess; 44 | 45 | @FXML 46 | public void saveSuccessExit(ActionEvent event) { 47 | 48 | Stage stage; 49 | if (event.getSource() == saveSuccess) { 50 | stage = (Stage) saveSuccess.getScene().getWindow(); 51 | stage.close(); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/resources/fxml/Warning.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/java/Receptionist/PatientAccountSuccessController.java: -------------------------------------------------------------------------------- 1 | package Receptionist; 2 | 3 | import java.io.IOException; 4 | import javafx.event.ActionEvent; 5 | import javafx.fxml.FXML; 6 | import javafx.fxml.FXMLLoader; 7 | import javafx.scene.control.Button; 8 | import javafx.scene.control.Label; 9 | import javafx.scene.layout.AnchorPane; 10 | import javafx.stage.Stage; 11 | 12 | public class PatientAccountSuccessController extends AnchorPane { 13 | 14 | public PatientAccountSuccessController() { 15 | FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/PatientAccountSuccess.fxml")); 16 | fxmlLoader.setRoot(this); 17 | fxmlLoader.setController(this); 18 | 19 | try { 20 | fxmlLoader.load(); 21 | } catch (IOException exception) { 22 | throw new RuntimeException(exception); 23 | } 24 | } 25 | 26 | @FXML 27 | private Label patientID; 28 | @FXML 29 | private Label name; 30 | @FXML 31 | private Label mobile; 32 | @FXML 33 | private Label gender; 34 | 35 | public void fillPatientData(String patientId, String pName, String pAge, String pGender) { 36 | patientID.setText(" " + patientId); 37 | name.setText(" " + pName); 38 | mobile.setText(" " + pAge); 39 | gender.setText(" " + pGender); 40 | 41 | } 42 | 43 | @FXML 44 | public Button saveSuccess; 45 | 46 | @FXML 47 | public void saveSuccessExit(ActionEvent event) { 48 | 49 | Stage stage; 50 | if (event.getSource() == saveSuccess) { 51 | stage = (Stage) saveSuccess.getScene().getWindow(); 52 | stage.close(); 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/hms/hms_test_2/SystemConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.hms.hms_test_2; 2 | 3 | import java.io.FileInputStream; 4 | import java.io.FileOutputStream; 5 | import java.io.IOException; 6 | import java.util.Properties; 7 | 8 | public class SystemConfiguration { 9 | 10 | private static SystemConfiguration instance; 11 | private Properties properties; 12 | private final String configFilePath = "config.properties"; 13 | 14 | private SystemConfiguration() { 15 | properties = new Properties(); 16 | loadConfig(); 17 | } 18 | 19 | public static synchronized SystemConfiguration getInstance() { 20 | if (instance == null) { 21 | instance = new SystemConfiguration(); 22 | } 23 | return instance; 24 | } 25 | 26 | private void loadConfig() { 27 | try (FileInputStream fis = new FileInputStream(configFilePath)) { 28 | properties.load(fis); 29 | } catch (IOException e) { 30 | e.printStackTrace(); 31 | throw new RuntimeException("Failed to load configuration file."); 32 | } 33 | } 34 | 35 | public synchronized String getConfig(String key) { 36 | return properties.getProperty(key); 37 | } 38 | 39 | public synchronized void updateConfig(String key, String value) { 40 | properties.setProperty(key, value); 41 | } 42 | 43 | public synchronized void saveConfig() { 44 | try (FileOutputStream fos = new FileOutputStream(configFilePath)) { 45 | properties.store(fos, "Updated configuration"); 46 | } catch (IOException e) { 47 | e.printStackTrace(); 48 | throw new RuntimeException("Failed to save configuration file."); 49 | } 50 | } 51 | 52 | public synchronized void reloadConfig() { 53 | loadConfig(); 54 | } 55 | } -------------------------------------------------------------------------------- /src/main/java/Cashier/BillPreviewController.java: -------------------------------------------------------------------------------- 1 | package Cashier; 2 | 3 | import java.io.IOException; 4 | import javafx.scene.control.Button; 5 | import javafx.fxml.FXML; 6 | import javafx.fxml.FXMLLoader; 7 | import javafx.stage.Stage; 8 | import javafx.scene.control.*; 9 | import javafx.event.ActionEvent; 10 | import javafx.scene.layout.AnchorPane; 11 | 12 | public class BillPreviewController extends AnchorPane { 13 | 14 | public BillPreviewController() { 15 | FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/BillPreview.fxml")); 16 | fxmlLoader.setRoot(this); 17 | fxmlLoader.setController(this); 18 | 19 | try { 20 | fxmlLoader.load(); 21 | } catch (IOException exception) { 22 | throw new RuntimeException(exception); 23 | } 24 | } 25 | 26 | @FXML 27 | public Button saveSuccess; 28 | 29 | @FXML 30 | public void saveSuccessExit(ActionEvent event) { 31 | 32 | Stage stage; 33 | if (event.getSource() == saveSuccess) { 34 | stage = (Stage) saveSuccess.getScene().getWindow(); 35 | stage.close(); 36 | } 37 | } 38 | 39 | @FXML 40 | private Label name; 41 | @FXML 42 | private Label service; 43 | @FXML 44 | private Label vat; 45 | @FXML 46 | private Label bill; 47 | @FXML 48 | private Label date; 49 | @FXML 50 | private Label billID; 51 | 52 | public void fillBillPreview(String patientName, String serviceFee, String VAT, String billVal, String currDate, 53 | String billId) { 54 | name.setText(" " + patientName); 55 | service.setText(" " + serviceFee); 56 | vat.setText(" " + VAT); 57 | bill.setText(" " + billVal); 58 | date.setText(" " + currDate); 59 | billID.setText(" " + billId); 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /src/main/resources/styles/popup.css: -------------------------------------------------------------------------------- 1 | #anchor{ 2 | /*-fx-background-color: #eee;*/ 3 | -fx-background-color: rgba(0, 0, 0, 0.6); 4 | } 5 | 6 | 7 | #box{ 8 | -fx-background-color: #eee; 9 | -fx-border-radius: 3; 10 | -fx-background-insets: 2, 1, 2, 2; 11 | /*-fx-background-radius: 3 3 3 3, 3 3 3 3, 3 3 3 3;*/ 12 | -fx-text-fill: #333; 13 | -fx-padding: 5 5 5 5; 14 | -fx-border-color: #eee; 15 | -fx-border-width: 3 3 3 3; 16 | /*-fx-background-color: linear-gradient(#0798bc 25%, #ffffff 50%, #0798bc 25%);*/ 17 | } 18 | 19 | #box2{ 20 | -fx-background-color: #eee; 21 | -fx-border-radius: 3; 22 | -fx-background-insets: 2, 1, 2, 2; 23 | /*-fx-background-radius: 3 3 3 3, 3 3 3 3, 3 3 3 3;*/ 24 | -fx-text-fill: #333; 25 | -fx-padding: 5 5 5 5; 26 | -fx-border-color: #999; 27 | -fx-border-width: 1 1 1 1; 28 | /*-fx-background-color: linear-gradient(#0798bc 25%, #ffffff 50%, #0798bc 25%);*/ 29 | } 30 | 31 | 32 | #box3{ 33 | -fx-border-radius: 3; 34 | -fx-background-insets: 2, 1, 2, 2; 35 | -fx-border-width: 3 3 3 3; 36 | /*-fx-background-color: linear-gradient(#0798bc 25%, #ffffff 50%, #0798bc 25%);*/ 37 | } 38 | 39 | #box4{ 40 | -fx-background-color: #fff; 41 | -fx-border-radius: 3; 42 | -fx-background-insets: 2, 1, 2, 2; 43 | /*-fx-background-radius: 3 3 3 3, 3 3 3 3, 3 3 3 3;*/ 44 | -fx-text-fill: #333; 45 | -fx-padding: 5 5 5 5; 46 | -fx-border-color: #fff; 47 | -fx-border-width: 3 3 3 3; 48 | /*-fx-background-color: linear-gradient(#0798bc 25%, #ffffff 50%, #0798bc 25%);*/ 49 | } 50 | 51 | 52 | #background{ 53 | 54 | -fx-background-color: #fff; 55 | 56 | /*-fx-background-radius: 3 3 3 3, 3 3 3 3, 3 3 3 3;*/ 57 | -fx-text-fill: #333; 58 | 59 | } 60 | -------------------------------------------------------------------------------- /src/main/resources/fxml/adminMessage.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 68 | 78 | 83 | 96 | 101 | 106 | 108 | 109 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /src/main/resources/fxml/PatientAccountSuccess.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /src/main/resources/fxml/AppointmentSuccess.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /src/main/resources/fxml/RefundTable.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 123 | 124 | -------------------------------------------------------------------------------- /src/main/resources/styles/tabbedPane4.css: -------------------------------------------------------------------------------- 1 | .tab-pane 2 | { 3 | -fx-tab-min-width: 30px; /* 55 */ 4 | -fx-tab-max-width: 30px; /* 55 */ 5 | -fx-tab-min-height: 140px; /* 24 */ 6 | -fx-tab-max-height: 140px; /* 24 */ 7 | 8 | -fx-focus-color: transparent; 9 | -fx-faint-focus-color: transparent; 10 | 11 | } 12 | 13 | .tab .tab-label 14 | { 15 | -fx-background-color: transparent; 16 | -fx-alignment: CENTER; 17 | -fx-text-fill: #999999; 18 | } 19 | 20 | .tab:selected .tab-label 21 | { 22 | -fx-text-fill: #ffffff; 23 | } 24 | 25 | .tab *.tab-label .text { 26 | -fx-effect: dropshadow(two-pass-box , rgba(255, 255, 255, 0.4), 1, 0.0 , 0, 1); 27 | -fx-rotate: 90; 28 | -fx-font-size: 12; 29 | -fx-alignment:BOTTOM_LEFT; 30 | -fx-width:200px; 31 | } 32 | 33 | 34 | .tab-content-area 35 | { 36 | -fx-background-color: -fx-control-inner-background; 37 | -fx-padding: 0.0em; /* 0 */ 38 | /* -fx-opacity: -fx-disabled-opacity;*/ 39 | 40 | } 41 | .tab 42 | { 43 | /* This is how it is done in Button, but the -1 inset caused a white line */ 44 | /* to appear beneath the tab, which looks bad, so it's taken out below. */ 45 | /* -fx-background-color: -fx-shadow-highlight-color, -fx-tab-border-color, -fx-inner-border, -fx-body-color; 46 | -fx-background-radius: 5 5 0 0, 5 5 0 0, 4 4 0 0, 3 3 0 0; 47 | -fx-background-insets: 0 0 -1 0, 0, 1, 2;*/ 48 | -fx-background-insets: 0, 1, 2; 49 | -fx-background-radius: 0 0 0 0, 0 0 0 0, 0 0 0 0; 50 | -fx-padding: 0em 0.5em 0.083333em 0.5em; /* 1 6 1 6 */ 51 | /* -fx-text-fill: -fx-text-base-color;*/ 52 | -fx-border-width: 0 0 0 2; -fx-border-color: #444 #444 #000 #555 ; 53 | } 54 | /* 55 | .tab:top 56 | { 57 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 58 | } 59 | .tab:right 60 | { 61 | -fx-background-color: -fx-tab-border-color, -fx-inner-border-bottomup, -fx-body-color-bottomup; 62 | } 63 | .tab:bottom 64 | { 65 | -fx-background-color: -fx-tab-border-color, -fx-inner-border-bottomup, -fx-body-color-bottomup; 66 | } 67 | */ 68 | .tab:left 69 | { 70 | /* 71 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 72 | */ 73 | -fx-background-color: #444; 74 | } 75 | .tab:hover 76 | { 77 | -fx-background-color: #333; 78 | -fx-border-width: 0 2 0 2; -fx-border-color: #444 #222 #000 #555 ; 79 | -fx-cursor:hand; 80 | } 81 | 82 | .tab:selected 83 | { 84 | -fx-text-fill: #223; 85 | -fx-background-color: #222; /*linear-gradient(#424141 0%, #ffffff 100%); 86 | /*-fx-background-color: #ffffff; 87 | -fx-background-color: white;*/ 88 | /* -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 89 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 90 | -fx-background-insets: 0, 1 1 0 1, 2 2 0 2; 91 | -fx-background-color: -fx-tab-border-color, -fx-control-inner-background; 92 | */ 93 | -fx-background-insets: 0, 1 1 0 1; 94 | -fx-background-radius: 0 0 0 0, 0 0 0 0; 95 | -fx-border-color: transparent; 96 | /*-fx-border-style: none;*/ 97 | -fx-background-insets: 0, 1, 2; 98 | -fx-background-radius: 0 0 0 0, 0 0 0 0, 0 0 0 0; 99 | -fx-padding: 0em 0.5em 0.083333em 0.5em; 100 | } 101 | .tab:disabled 102 | { 103 | -fx-opacity: -fx-disabled-opacity; 104 | } 105 | .tab:disabled:hover 106 | { 107 | -fx-color: -fx-base; 108 | -fx-opacity: -fx-disabled-opacity; 109 | -fx-cursor:hand; 110 | } 111 | .tab-pane *.tab-header-background 112 | {/* 113 | -fx-background-color: -fx-outer-border, -fx-inner-border, derive(-fx-color, -20%); 114 | -fx-effect: innershadow(two-pass-box , rgba(0,0,0,0.6) , 4, 0.0 , 0 , 0); 115 | */ 116 | -fx-background-color: #444; 117 | } 118 | /*.tab-pane *.tab-header-area {*/ 119 | /* I would like to use -fx-tab-border-color here, but for some reason it */ 120 | /* just isn't the correct color, even though it works in :top above */ 121 | /* -fx-background-color: -fx-tab-border-color, lightgray;*/ 122 | /*}*/ 123 | .tab-pane:top *.tab-header-area 124 | { 125 | -fx-background-insets: 0, 0 0 1 0; 126 | -fx-padding: 0.416667em 0.166667em 0.0em 0.833em; /* 5 2 0 10 */ 127 | } 128 | .tab-pane:bottom *.tab-header-area 129 | { 130 | -fx-background-insets: 0, 1 0 0 0; 131 | -fx-padding: 0 0.166667em 0.416667em 0.833em; /* 0 2 5 0 */ 132 | } 133 | .tab-pane:left *.tab-header-area 134 | { 135 | -fx-background-insets: 0, 0 1 0 0; 136 | -fx-padding: 0.833em 0.0em 0.166667em 0.416667em; /* 10 0 2 5 */ 137 | } 138 | .tab-pane:right *.tab-header-area 139 | { 140 | -fx-background-insets: 0, 0 0 0 1; 141 | -fx-padding: 0.833em 0.416667em 0.166667em 0.0em; /* 10 5 2 0 */ 142 | } 143 | .tab-pane .headers-region 144 | { 145 | -fx-effect: dropshadow(two-pass-box , rgba(0,0,0,0.6) , 4, 0.0 , 0, 0); 146 | } 147 | /* TODO: scaling the shape seems to make it way too large */ 148 | .tab-close-button 149 | { 150 | -fx-background-color: -fx-mark-color; 151 | -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"; 152 | -fx-scale-shape: false; 153 | -fx-effect: dropshadow(two-pass-box , rgba(255, 255, 255, 0.4), 1, 0.0 , 0, 1); 154 | } 155 | .tab-close-button:hover 156 | { 157 | -fx-background-color: derive(-fx-mark-color, -30%); 158 | } 159 | /* CONTROL BUTTONS */ 160 | .control-buttons-tab 161 | { 162 | /*-fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color;*/ 163 | -fx-background-insets: 0, 1, 2; 164 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 165 | -fx-padding: 0.083333em 0.25em 0.083333em 0.25em; /* 1 3 1 3 */ 166 | } 167 | .tab-down-button 168 | { 169 | -fx-background-color: transparent; 170 | -fx-padding: 0.0em 0.416667em 0.0em 0.416667em; /* 0 5 0 5 */ 171 | } 172 | .tab-down-button:hover 173 | { 174 | -fx-background-color: -fx-body-color; 175 | -fx-color: -fx-hover-base; 176 | } 177 | .tab-down-button .arrow 178 | { 179 | -fx-background-color: -fx-mark-highlight-color, -fx-mark-color; 180 | -fx-background-insets: 1 0 -1 0, 0; 181 | -fx-padding: 0.238083em 0.416667em 0.238083em 0.416667em; /* 2.857 5 2.857 5 */ 182 | -fx-shape: "M 0 0 H 7 L 3.5 4 z"; 183 | } 184 | /* FLOATING TABS CUSTOMISATION */ 185 | .tab-pane.floating *.tab-header-background { 186 | -fx-background-color: null; 187 | } 188 | .tab-pane.floating *.tab-header-area 189 | { 190 | -fx-background-color: null; 191 | } 192 | .tab-pane.floating *.tab-content-area 193 | { 194 | -fx-background-color: -fx-tab-border-color, -fx-control-inner-background; 195 | -fx-background-insets: 0, 1; 196 | -fx-background-radius: 5, 4; 197 | } 198 | .tab-pane.floating *.tab 199 | { 200 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 201 | -fx-background-insets: 0, 1, 2; 202 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 203 | } 204 | .tab-pane.floating *.tab:selected 205 | { 206 | -fx-background-color: -fx-tab-border-color, -fx-control-inner-background; 207 | -fx-background-insets: 0 0 -1 0, 1 1 -1 1; 208 | -fx-background-radius: 5 5 0 0, 4 4 0 0; 209 | } 210 | /*.tab-pane:floating *.control-buttons-tab 211 | { 212 | -fx-padding: 0.083333em 0.25em 0.083333em 0.25em; 213 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 214 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 215 | -fx-background-insets: 0, 1 1 0 1, 2 2 0 2; 216 | }*/ 217 | 218 | #tab_ico0{ 219 | -fx-fill: #999999; 220 | } 221 | 222 | #tab_ico1{ 223 | -fx-fill: #999999; 224 | } 225 | 226 | #tab_ico2{ 227 | -fx-fill: #999999; 228 | } 229 | 230 | #tab_ico3{ 231 | -fx-fill: #999999; 232 | } 233 | 234 | .tab:selected #tab_ico0{ 235 | -fx-fill: #FFFFFF; 236 | } 237 | .tab:selected #tab_ico1{ 238 | -fx-fill: #FFFFFF; 239 | } 240 | .tab:selected #tab_ico2{ 241 | -fx-fill: #FFFFFF; 242 | } 243 | .tab:selected #tab_ico3{ 244 | -fx-fill: #FFFFFF; 245 | } 246 | 247 | .tab-content-area { 248 | -fx-background-image: url("../imgs/bg1.jpg"); 249 | -fx-background-repeat: repeat; 250 | -fx-z-index:-1; 251 | } 252 | 253 | .tab-pane:left *.tab-header-area { 254 | -fx-alignment: CENTER_RIGHT; 255 | } 256 | 257 | .tab-pane:left *.tab-header-area { 258 | -fx-padding: 0.0em 100% 0.0em 0%; 259 | } -------------------------------------------------------------------------------- /src/main/resources/styles/tabbedPane.css: -------------------------------------------------------------------------------- 1 | .tab-pane 2 | { 3 | -fx-tab-min-width: 120px; /* 55 */ 4 | -fx-tab-max-width: 120px; /* 55 */ 5 | -fx-tab-min-height: 140px; /* 24 */ 6 | -fx-tab-max-height: 140px; /* 24 */ 7 | 8 | -fx-focus-color: transparent; 9 | -fx-faint-focus-color: transparent; 10 | 11 | } 12 | 13 | .tab .tab-label 14 | { 15 | -fx-background-color: transparent; 16 | -fx-alignment: CENTER; 17 | -fx-text-fill: #999999; 18 | } 19 | 20 | .tab:selected .tab-label 21 | { 22 | -fx-text-fill: #ffffff; 23 | } 24 | 25 | .tab *.tab-label .text { 26 | -fx-effect: dropshadow(two-pass-box , rgba(255, 255, 255, 0.4), 1, 0.0 , 0, 1); 27 | -fx-rotate: 90; 28 | -fx-font-size: 12; 29 | -fx-alignment:BOTTOM_LEFT; 30 | -fx-width:100px; 31 | } 32 | 33 | 34 | .tab-content-area 35 | { 36 | -fx-background-color: -fx-control-inner-background; 37 | -fx-padding: 0.0em; /* 0 */ 38 | /* -fx-opacity: -fx-disabled-opacity;*/ 39 | 40 | } 41 | .tab 42 | { 43 | /* This is how it is done in Button, but the -1 inset caused a white line */ 44 | /* to appear beneath the tab, which looks bad, so it's taken out below. */ 45 | /* -fx-background-color: -fx-shadow-highlight-color, -fx-tab-border-color, -fx-inner-border, -fx-body-color; 46 | -fx-background-radius: 5 5 0 0, 5 5 0 0, 4 4 0 0, 3 3 0 0; 47 | -fx-background-insets: 0 0 -1 0, 0, 1, 2;*/ 48 | -fx-background-insets: 0, 1, 2; 49 | -fx-background-radius: 0 0 0 0, 0 0 0 0, 0 0 0 0; 50 | -fx-padding: 0em 0.5em 0.083333em 0.5em; /* 1 6 1 6 */ 51 | /* -fx-text-fill: -fx-text-base-color;*/ 52 | -fx-border-width: 0 0 0 2; -fx-border-color: #444 #444 #000 #555 ; 53 | } 54 | /* 55 | .tab:top 56 | { 57 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 58 | } 59 | .tab:right 60 | { 61 | -fx-background-color: -fx-tab-border-color, -fx-inner-border-bottomup, -fx-body-color-bottomup; 62 | } 63 | .tab:bottom 64 | { 65 | -fx-background-color: -fx-tab-border-color, -fx-inner-border-bottomup, -fx-body-color-bottomup; 66 | } 67 | */ 68 | .tab:left 69 | { 70 | /* 71 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 72 | */ 73 | -fx-background-color: #444; 74 | } 75 | .tab:hover 76 | { 77 | -fx-background-color: #333; 78 | -fx-border-width: 0 2 0 2; -fx-border-color: #444 #222 #000 #555 ; 79 | -fx-cursor:hand; 80 | } 81 | 82 | .tab:selected 83 | { 84 | -fx-text-fill: #223; 85 | -fx-background-color: #222; /*linear-gradient(#424141 0%, #ffffff 100%); 86 | /*-fx-background-color: #ffffff; 87 | -fx-background-color: white;*/ 88 | /* -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 89 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 90 | -fx-background-insets: 0, 1 1 0 1, 2 2 0 2; 91 | -fx-background-color: -fx-tab-border-color, -fx-control-inner-background; 92 | */ 93 | -fx-background-insets: 0, 1 1 0 1; 94 | -fx-background-radius: 0 0 0 0, 0 0 0 0; 95 | -fx-border-color: transparent; 96 | /*-fx-border-style: none;*/ 97 | -fx-background-insets: 0, 1, 2; 98 | -fx-background-radius: 0 0 0 0, 0 0 0 0, 0 0 0 0; 99 | -fx-padding: 0em 0.5em 0.083333em 0.5em; 100 | } 101 | .tab:disabled 102 | { 103 | -fx-opacity: -fx-disabled-opacity; 104 | } 105 | .tab:disabled:hover 106 | { 107 | -fx-color: -fx-base; 108 | -fx-opacity: -fx-disabled-opacity; 109 | -fx-cursor:hand; 110 | } 111 | .tab-pane *.tab-header-background 112 | {/* 113 | -fx-background-color: -fx-outer-border, -fx-inner-border, derive(-fx-color, -20%); 114 | -fx-effect: innershadow(two-pass-box , rgba(0,0,0,0.6) , 4, 0.0 , 0 , 0); 115 | */ 116 | -fx-background-color: #444; 117 | } 118 | /*.tab-pane *.tab-header-area {*/ 119 | /* I would like to use -fx-tab-border-color here, but for some reason it */ 120 | /* just isn't the correct color, even though it works in :top above */ 121 | /* -fx-background-color: -fx-tab-border-color, lightgray;*/ 122 | /*}*/ 123 | .tab-pane:top *.tab-header-area 124 | { 125 | -fx-background-insets: 0, 0 0 1 0; 126 | -fx-padding: 0.416667em 0.166667em 0.0em 0.833em; /* 5 2 0 10 */ 127 | } 128 | .tab-pane:bottom *.tab-header-area 129 | { 130 | -fx-background-insets: 0, 1 0 0 0; 131 | -fx-padding: 0 0.166667em 0.416667em 0.833em; /* 0 2 5 0 */ 132 | } 133 | .tab-pane:left *.tab-header-area 134 | { 135 | -fx-background-insets: 0, 0 1 0 0; 136 | -fx-padding: 0.833em 0.0em 0.166667em 0.416667em; /* 10 0 2 5 */ 137 | } 138 | .tab-pane:right *.tab-header-area 139 | { 140 | -fx-background-insets: 0, 0 0 0 1; 141 | -fx-padding: 0.833em 0.416667em 0.166667em 0.0em; /* 10 5 2 0 */ 142 | } 143 | .tab-pane .headers-region 144 | { 145 | -fx-effect: dropshadow(two-pass-box , rgba(0,0,0,0.6) , 4, 0.0 , 0, 0); 146 | } 147 | /* TODO: scaling the shape seems to make it way too large */ 148 | .tab-close-button 149 | { 150 | -fx-background-color: -fx-mark-color; 151 | -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"; 152 | -fx-scale-shape: false; 153 | -fx-effect: dropshadow(two-pass-box , rgba(255, 255, 255, 0.4), 1, 0.0 , 0, 1); 154 | } 155 | .tab-close-button:hover 156 | { 157 | -fx-background-color: derive(-fx-mark-color, -30%); 158 | } 159 | /* CONTROL BUTTONS */ 160 | .control-buttons-tab 161 | { 162 | /*-fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color;*/ 163 | -fx-background-insets: 0, 1, 2; 164 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 165 | -fx-padding: 0.083333em 0.25em 0.083333em 0.25em; /* 1 3 1 3 */ 166 | } 167 | .tab-down-button 168 | { 169 | -fx-background-color: transparent; 170 | -fx-padding: 0.0em 0.416667em 0.0em 0.416667em; /* 0 5 0 5 */ 171 | } 172 | .tab-down-button:hover 173 | { 174 | -fx-background-color: -fx-body-color; 175 | -fx-color: -fx-hover-base; 176 | } 177 | .tab-down-button .arrow 178 | { 179 | -fx-background-color: -fx-mark-highlight-color, -fx-mark-color; 180 | -fx-background-insets: 1 0 -1 0, 0; 181 | -fx-padding: 0.238083em 0.416667em 0.238083em 0.416667em; /* 2.857 5 2.857 5 */ 182 | -fx-shape: "M 0 0 H 7 L 3.5 4 z"; 183 | } 184 | /* FLOATING TABS CUSTOMISATION */ 185 | .tab-pane.floating *.tab-header-background { 186 | -fx-background-color: null; 187 | } 188 | .tab-pane.floating *.tab-header-area 189 | { 190 | -fx-background-color: null; 191 | } 192 | .tab-pane.floating *.tab-content-area 193 | { 194 | -fx-background-color: -fx-tab-border-color, -fx-control-inner-background; 195 | -fx-background-insets: 0, 1; 196 | -fx-background-radius: 5, 4; 197 | } 198 | .tab-pane.floating *.tab 199 | { 200 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 201 | -fx-background-insets: 0, 1, 2; 202 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 203 | } 204 | .tab-pane.floating *.tab:selected 205 | { 206 | -fx-background-color: -fx-tab-border-color, -fx-control-inner-background; 207 | -fx-background-insets: 0 0 -1 0, 1 1 -1 1; 208 | -fx-background-radius: 5 5 0 0, 4 4 0 0; 209 | } 210 | /*.tab-pane:floating *.control-buttons-tab 211 | { 212 | -fx-padding: 0.083333em 0.25em 0.083333em 0.25em; 213 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 214 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 215 | -fx-background-insets: 0, 1 1 0 1, 2 2 0 2; 216 | }*/ 217 | 218 | #tab_ico0{ 219 | -fx-fill: #999999; 220 | } 221 | 222 | #tab_ico1{ 223 | -fx-fill: #999999; 224 | } 225 | 226 | #tab_ico2{ 227 | -fx-fill: #999999; 228 | } 229 | 230 | #tab_ico3{ 231 | -fx-fill: #999999; 232 | } 233 | 234 | .tab:selected #tab_ico0{ 235 | -fx-fill: #FFFFFF; 236 | } 237 | .tab:selected #tab_ico1{ 238 | -fx-fill: #FFFFFF; 239 | } 240 | .tab:selected #tab_ico2{ 241 | -fx-fill: #FFFFFF; 242 | } 243 | .tab:selected #tab_ico3{ 244 | -fx-fill: #FFFFFF; 245 | } 246 | 247 | .tab-content-area { 248 | -fx-background-image: url("../imgs/bg1.jpg"); 249 | -fx-background-repeat: repeat; 250 | -fx-z-index:-1; 251 | } 252 | 253 | .tab-pane:left *.tab-header-area { 254 | -fx-alignment: CENTER_RIGHT; 255 | } 256 | 257 | .tab-pane:left *.tab-header-area { 258 | -fx-padding: 0.0em 100% 0.0em 0%; 259 | } -------------------------------------------------------------------------------- /src/main/resources/styles/tabbedPaneTheme2.css: -------------------------------------------------------------------------------- 1 | .tab-pane 2 | { 3 | -fx-tab-min-width: 120px; /* 55 */ 4 | -fx-tab-max-width: 120px; /* 55 */ 5 | -fx-tab-min-height: 140px; /* 24 */ 6 | -fx-tab-max-height: 140px; /* 24 */ 7 | 8 | -fx-focus-color: transparent; 9 | -fx-faint-focus-color: transparent; 10 | 11 | } 12 | 13 | .tab .tab-label 14 | { 15 | -fx-background-color: transparent; 16 | -fx-alignment: CENTER; 17 | -fx-text-fill: #999999; 18 | } 19 | 20 | .tab:selected .tab-label 21 | { 22 | -fx-text-fill: #ffffff; 23 | } 24 | 25 | .tab *.tab-label .text { 26 | -fx-effect: dropshadow(two-pass-box , rgba(255, 255, 255, 0.4), 1, 0.0 , 0, 1); 27 | -fx-rotate: 90; 28 | -fx-font-size: 12; 29 | -fx-alignment:BOTTOM_LEFT; 30 | -fx-width:100px; 31 | } 32 | 33 | 34 | .tab-content-area 35 | { 36 | -fx-background-color: -fx-control-inner-background; 37 | -fx-padding: 0.0em; /* 0 */ 38 | /* -fx-opacity: -fx-disabled-opacity;*/ 39 | 40 | } 41 | .tab 42 | { 43 | /* This is how it is done in Button, but the -1 inset caused a white line */ 44 | /* to appear beneath the tab, which looks bad, so it's taken out below. */ 45 | /* -fx-background-color: -fx-shadow-highlight-color, -fx-tab-border-color, -fx-inner-border, -fx-body-color; 46 | -fx-background-radius: 5 5 0 0, 5 5 0 0, 4 4 0 0, 3 3 0 0; 47 | -fx-background-insets: 0 0 -1 0, 0, 1, 2;*/ 48 | -fx-background-insets: 0, 1, 2; 49 | -fx-background-radius: 0 0 0 0, 0 0 0 0, 0 0 0 0; 50 | -fx-padding: 0em 0.5em 0.083333em 0.5em; /* 1 6 1 6 */ 51 | /* -fx-text-fill: -fx-text-base-color;*/ 52 | -fx-border-width: 0 0 0 2; -fx-border-color: #444 #444 #000 #555 ; 53 | } 54 | /* 55 | .tab:top 56 | { 57 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 58 | } 59 | .tab:right 60 | { 61 | -fx-background-color: -fx-tab-border-color, -fx-inner-border-bottomup, -fx-body-color-bottomup; 62 | } 63 | .tab:bottom 64 | { 65 | -fx-background-color: -fx-tab-border-color, -fx-inner-border-bottomup, -fx-body-color-bottomup; 66 | } 67 | */ 68 | .tab:left 69 | { 70 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 71 | /*-fx-background-color: #444; */ 72 | } 73 | .tab:hover 74 | { 75 | /*-fx-background-color: #333;*/ 76 | -fx-border-width: 0 2 0 2; -fx-border-color: #444 #222 #000 #555 ; 77 | -fx-cursor:hand; 78 | } 79 | 80 | .tab:selected 81 | { 82 | 83 | -fx-text-fill: #223; 84 | -fx-background-color: linear-gradient(#424141 0%, #ffffff 100%); /* #222; /* 85 | /*-fx-background-color: #ffffff; 86 | -fx-background-color: white;*/ 87 | /* -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 88 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 89 | -fx-background-insets: 0, 1 1 0 1, 2 2 0 2; 90 | -fx-background-color: -fx-tab-border-color, -fx-control-inner-background; 91 | */ 92 | -fx-background-insets: 0, 1 1 0 1; 93 | -fx-background-radius: 0 0 0 0, 0 0 0 0; 94 | -fx-border-color: transparent; 95 | /*-fx-border-style: none;*/ 96 | -fx-background-insets: 0, 1, 2; 97 | -fx-background-radius: 0 0 0 0, 0 0 0 0, 0 0 0 0; 98 | -fx-padding: 0em 0.5em 0.083333em 0.5em; 99 | } 100 | .tab:disabled 101 | { 102 | -fx-opacity: -fx-disabled-opacity; 103 | } 104 | .tab:disabled:hover 105 | { 106 | -fx-color: -fx-base; 107 | -fx-opacity: -fx-disabled-opacity; 108 | -fx-cursor:hand; 109 | } 110 | .tab-pane *.tab-header-background 111 | {/* 112 | -fx-background-color: -fx-outer-border, -fx-inner-border, derive(-fx-color, -20%); 113 | -fx-effect: innershadow(two-pass-box , rgba(0,0,0,0.6) , 4, 0.0 , 0 , 0); 114 | */ 115 | -fx-background-color: #444; 116 | } 117 | /*.tab-pane *.tab-header-area {*/ 118 | /* I would like to use -fx-tab-border-color here, but for some reason it */ 119 | /* just isn't the correct color, even though it works in :top above */ 120 | /* -fx-background-color: -fx-tab-border-color, lightgray;*/ 121 | /*}*/ 122 | .tab-pane:top *.tab-header-area 123 | { 124 | -fx-background-insets: 0, 0 0 1 0; 125 | -fx-padding: 0.416667em 0.166667em 0.0em 0.833em; /* 5 2 0 10 */ 126 | } 127 | .tab-pane:bottom *.tab-header-area 128 | { 129 | -fx-background-insets: 0, 1 0 0 0; 130 | -fx-padding: 0 0.166667em 0.416667em 0.833em; /* 0 2 5 0 */ 131 | } 132 | .tab-pane:left *.tab-header-area 133 | { 134 | -fx-background-insets: 0, 0 1 0 0; 135 | -fx-padding: 0.833em 0.0em 0.166667em 0.416667em; /* 10 0 2 5 */ 136 | } 137 | .tab-pane:right *.tab-header-area 138 | { 139 | -fx-background-insets: 0, 0 0 0 1; 140 | -fx-padding: 0.833em 0.416667em 0.166667em 0.0em; /* 10 5 2 0 */ 141 | } 142 | .tab-pane .headers-region 143 | { 144 | -fx-effect: dropshadow(two-pass-box , rgba(0,0,0,0.6) , 4, 0.0 , 0, 0); 145 | } 146 | /* TODO: scaling the shape seems to make it way too large */ 147 | .tab-close-button 148 | { 149 | -fx-background-color: -fx-mark-color; 150 | -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"; 151 | -fx-scale-shape: false; 152 | -fx-effect: dropshadow(two-pass-box , rgba(255, 255, 255, 0.4), 1, 0.0 , 0, 1); 153 | } 154 | .tab-close-button:hover 155 | { 156 | -fx-background-color: derive(-fx-mark-color, -30%); 157 | } 158 | /* CONTROL BUTTONS */ 159 | .control-buttons-tab 160 | { 161 | /*-fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color;*/ 162 | -fx-background-insets: 0, 1, 2; 163 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 164 | -fx-padding: 0.083333em 0.25em 0.083333em 0.25em; /* 1 3 1 3 */ 165 | } 166 | .tab-down-button 167 | { 168 | -fx-background-color: transparent; 169 | -fx-padding: 0.0em 0.416667em 0.0em 0.416667em; /* 0 5 0 5 */ 170 | } 171 | .tab-down-button:hover 172 | { 173 | -fx-background-color: -fx-body-color; 174 | -fx-color: -fx-hover-base; 175 | } 176 | .tab-down-button .arrow 177 | { 178 | -fx-background-color: -fx-mark-highlight-color, -fx-mark-color; 179 | -fx-background-insets: 1 0 -1 0, 0; 180 | -fx-padding: 0.238083em 0.416667em 0.238083em 0.416667em; /* 2.857 5 2.857 5 */ 181 | -fx-shape: "M 0 0 H 7 L 3.5 4 z"; 182 | } 183 | /* FLOATING TABS CUSTOMISATION */ 184 | .tab-pane.floating *.tab-header-background { 185 | -fx-background-color: null; 186 | } 187 | .tab-pane.floating *.tab-header-area 188 | { 189 | -fx-background-color: null; 190 | } 191 | .tab-pane.floating *.tab-content-area 192 | { 193 | -fx-background-color: -fx-tab-border-color, -fx-control-inner-background; 194 | -fx-background-insets: 0, 1; 195 | -fx-background-radius: 5, 4; 196 | } 197 | .tab-pane.floating *.tab 198 | { 199 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 200 | -fx-background-insets: 0, 1, 2; 201 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 202 | } 203 | .tab-pane.floating *.tab:selected 204 | { 205 | -fx-background-color: -fx-tab-border-color, -fx-control-inner-background; 206 | -fx-background-insets: 0 0 -1 0, 1 1 -1 1; 207 | -fx-background-radius: 5 5 0 0, 4 4 0 0; 208 | } 209 | /*.tab-pane:floating *.control-buttons-tab 210 | { 211 | -fx-padding: 0.083333em 0.25em 0.083333em 0.25em; 212 | -fx-background-color: -fx-tab-border-color, -fx-inner-border, -fx-body-color; 213 | -fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; 214 | -fx-background-insets: 0, 1 1 0 1, 2 2 0 2; 215 | }*/ 216 | 217 | #tab_ico0{ 218 | -fx-fill: #999999; 219 | } 220 | 221 | #tab_ico1{ 222 | -fx-fill: #999999; 223 | } 224 | 225 | #tab_ico2{ 226 | -fx-fill: #999999; 227 | } 228 | 229 | #tab_ico3{ 230 | -fx-fill: #999999; 231 | } 232 | 233 | .tab:selected #tab_ico0{ 234 | -fx-fill: #FFFFFF; 235 | } 236 | .tab:selected #tab_ico1{ 237 | -fx-fill: #FFFFFF; 238 | } 239 | .tab:selected #tab_ico2{ 240 | -fx-fill: #FFFFFF; 241 | } 242 | .tab:selected #tab_ico3{ 243 | -fx-fill: #FFFFFF; 244 | } 245 | 246 | .tab-content-area { 247 | -fx-background-image: url("../imgs/bg1.jpg"); 248 | -fx-background-repeat: repeat; 249 | -fx-z-index:-1; 250 | } 251 | 252 | .tab-pane:left *.tab-header-area { 253 | -fx-alignment: CENTER_RIGHT; 254 | } 255 | 256 | .tab-pane:left *.tab-header-area { 257 | -fx-padding: 0.0em 100% 0.0em 0%; 258 | } --------------------------------------------------------------------------------