From 2306517e86d68de8aefd9c610305b5e90f1b99fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hudaifa=20Abdullah=20=E3=83=84?= Date: Sun, 26 Sep 2021 14:18:27 +0500 Subject: [PATCH] new update --- .DS_Store | Bin 0 -> 6148 bytes .idea/.gitignore | 8 + .idea/compiler.xml | 6 + .idea/gradle.xml | 20 ++ .idea/inspectionProfiles/Project_Default.xml | 36 +++ .idea/jarRepositories.xml | 20 ++ .idea/misc.xml | 8 + LICENSE.md | 24 -- README.md | 31 --- gradle.properties | 0 src/main/java/HuimangTech/App.java | 73 ++++++ .../java/HuimangTech/MainUIController.java | 61 +++++ .../java/HuimangTech/TimerController.java | 235 ++++++++++++++++++ src/main/java/module-info.java | 11 + src/main/java/resources/FXML.css | 96 +++++++ src/main/java/resources/Images/TaskTimer.ico | Bin 0 -> 15647 bytes src/main/java/resources/Images/delete.png | Bin 0 -> 990 bytes src/main/java/resources/Images/left-arrow.png | Bin 0 -> 775 bytes src/main/java/resources/Images/minus.png | Bin 0 -> 568 bytes src/main/java/resources/MainUI.fxml | 76 ++++++ src/main/java/resources/Timer.fxml | 111 +++++++++ .../bundles/TaskTimer_ar_SA.properties | 13 + .../bundles/TaskTimer_en_US.properties | 13 + 23 files changed, 787 insertions(+), 55 deletions(-) create mode 100644 .DS_Store create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml delete mode 100644 LICENSE.md delete mode 100644 README.md create mode 100644 gradle.properties create mode 100644 src/main/java/HuimangTech/App.java create mode 100644 src/main/java/HuimangTech/MainUIController.java create mode 100644 src/main/java/HuimangTech/TimerController.java create mode 100644 src/main/java/module-info.java create mode 100644 src/main/java/resources/FXML.css create mode 100644 src/main/java/resources/Images/TaskTimer.ico create mode 100644 src/main/java/resources/Images/delete.png create mode 100644 src/main/java/resources/Images/left-arrow.png create mode 100644 src/main/java/resources/Images/minus.png create mode 100644 src/main/java/resources/MainUI.fxml create mode 100644 src/main/java/resources/Timer.fxml create mode 100644 src/main/java/resources/bundles/TaskTimer_ar_SA.properties create mode 100644 src/main/java/resources/bundles/TaskTimer_en_US.properties diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..feca8613504bcd7430524202412f605a970dd548 GIT binary patch literal 6148 zcmeH~JqiLr422VS3&Cbf%V|7-HyA`u-~~i21wpZ&qx41vI)z6#m+=T zbn`f`MFtU>!%bynVPcAXCwIBY>3lz3j@RpDteEA>YT$!Ro{xoGkN^pg011!)3H%HJ zJGWu;MJOW)kN^pc1nmD%;HEXTh5D}p!AAgSkF*=sK1)E0C7?C6g(3sfXoW_r`WRw) zZ-`o{NKSp&Hs}YZb^Uy{)~Y3 z+x>QfkIJ+4?ei>u$gHg!9O~r=FP8vp>?mHs-SE8F0$NjBC^9f!1RMhc34E2n6Mwc5 Aa{vGU literal 0 HcmV?d00001 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..659bf43 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..213e9f6 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..4c8540a --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,36 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..fdc392f --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b79914a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index fdddb29..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,24 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to diff --git a/README.md b/README.md deleted file mode 100644 index 6cfb2fb..0000000 --- a/README.md +++ /dev/null @@ -1,31 +0,0 @@ -

TaskTimer

-

- - - - - -

- -

An accurate timer utility for running tasks/commands on the given interval Hours, Minutes, Seconds.

- -

- Owner & Author: Hudaifa Abdullah
-

- -# Gitrting Started -Task Timer is a Java project uses a ```jdk-16.0.2```, and ```Gradle``` Bulide, along with ```JavaFX 16``` for it's Interface - -it can send a Command to CMD on the end of a given time interval e.g. Shutdown the Computer - - -## Coming Fetures -* Enter a custom command -* Multi-Langague support -* new themes - - -## Usage - -## How it works - diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/HuimangTech/App.java b/src/main/java/HuimangTech/App.java new file mode 100644 index 0000000..68642d5 --- /dev/null +++ b/src/main/java/HuimangTech/App.java @@ -0,0 +1,73 @@ +package HuimangTech; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; +import javafx.stage.StageStyle; +import java.io.IOException; +import java.util.Locale; +import java.util.ResourceBundle; +import java.util.concurrent.atomic.AtomicReference; + +/** + * @Authour 7odaifa_ab + */ +public class App extends Application { + + private static Scene scene; + public static Stage primaryStage = null; + + @Override + public void start(Stage stage) throws IOException { + scene = new Scene(loadFXML("MainUI")); + stage.setScene(scene); + stage.initStyle(StageStyle.UNDECORATED); + stage.show(); + primaryStage = stage; + makeStageDraggable(); + } + + static void setRoot(String fxml) throws IOException { + scene.setRoot(loadFXML(fxml)); + } + + private static Parent loadFXML(String fxml) throws IOException { + ResourceBundle bundle = ResourceBundle.getBundle("resources.bundles.TaskTimer", new Locale("en","US")); + FXMLLoader fxmlLoader = new FXMLLoader(App.class.getResource("/resources/" + fxml + ".fxml"), bundle); + return fxmlLoader.load(); + } + + private void makeStageDraggable() { + AtomicReference xOffset = new AtomicReference<>((double) 0); + AtomicReference yOffset = new AtomicReference<>((double) 0); + + scene.setOnMousePressed(event -> { + xOffset.set(event.getSceneX()); + yOffset.set(event.getSceneY()); + }); + scene.setOnMouseDragged(event -> { + App.primaryStage.setX(event.getScreenX() - xOffset.get()); + App.primaryStage.setY(event.getScreenY() - yOffset.get()); + }); + scene.setOnDragDone((e) -> App.primaryStage.setOpacity(1.0f)); + scene.setOnMouseDragReleased((e) -> { + if (e.isConsumed()) { + App.primaryStage.setOpacity(1.0f); + } + }); + } + + + static public void runCMDCommand(String command) throws IOException { + ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", command); + builder.redirectErrorStream(true); + builder.start(); + } + + public static void main(String[] args) { + launch(); + } + +} diff --git a/src/main/java/HuimangTech/MainUIController.java b/src/main/java/HuimangTech/MainUIController.java new file mode 100644 index 0000000..6046d5d --- /dev/null +++ b/src/main/java/HuimangTech/MainUIController.java @@ -0,0 +1,61 @@ +package HuimangTech; + +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; + +public class MainUIController implements Initializable { + + public MainUIController() { + } + + + public static String getTaskName() { + return TaskName; + } + + + static String TaskName = ""; + + @FXML + void CLOSE_APP() { + App.primaryStage.close(); + System.exit(0); + } + + @FXML + void MINIMIZE_APP() { + App.primaryStage.setIconified(true); + } + + @FXML + void switchToShutdown() throws IOException { + TaskName = "ShutDown"; + App.setRoot("Timer"); + } + + @FXML + void switchToRestart() throws IOException { + TaskName = "Restart"; + App.setRoot("Timer"); + } + + @FXML + void switchToHibernate() throws IOException { + TaskName = "Hibernate"; + App.setRoot("Timer"); + } + + @FXML + void switchToSleep() throws IOException { + TaskName = "Sleep"; + App.setRoot("Timer"); + } + + @Override + public void initialize(URL url, ResourceBundle resourceBundle) { + + } +} diff --git a/src/main/java/HuimangTech/TimerController.java b/src/main/java/HuimangTech/TimerController.java new file mode 100644 index 0000000..ca3dfc9 --- /dev/null +++ b/src/main/java/HuimangTech/TimerController.java @@ -0,0 +1,235 @@ +package HuimangTech; + +import javafx.animation.KeyFrame; +import javafx.animation.KeyValue; +import javafx.animation.Timeline; +import javafx.beans.binding.Bindings; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.value.ChangeListener; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.util.Duration; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import com.jfoenix.controls.JFXButton; + + +public class TimerController implements Initializable { + + private String command; + private String extraCommand; + private int STARTTIME = 0; + private Timeline timeline; + private final IntegerProperty timeSeconds = new SimpleIntegerProperty(STARTTIME); + ChangeListener listener = ((observable, oldValue, newValue) -> ResetTimer()); + + + @FXML + private JFXButton StartBtn; + @FXML + private JFXButton pauseBtn; + @FXML + private JFXButton resetBtn; + @FXML + private TextField HoursTxtField; + @FXML + private TextField MinTxtField; + @FXML + private TextField SecTxtField; + @FXML + private Label taskLbl; + + @FXML + void StartBtn() { + if (timeline != null) { + checkTimerStatus(); + return; + } + StartTimer(); + StartBtn.setVisible(false); + resetBtn.setVisible(true); + pauseBtn.setVisible(true); + bindTimeToTextField(); + runCMDCommand(); + + } + + @FXML + void resetBtn() throws IOException { + ResetTimer(); + App.setRoot("Timer"); + } + + @FXML + void CLOSE_APP() { + App.primaryStage.close(); + System.exit(0); + } + + @FXML + void BACK() throws IOException { + App.setRoot("MainUI"); + } + + @FXML + void MINIMIZE_APP() { + App.primaryStage.setIconified(true); + } + + void checkTimerStatus() { + if (timeline.getStatus().toString().equals("RUNNING")) { + timeline.pause(); + pauseBtn.setText("Start"); + unBindTimeToTextField(); + RestoreStyleClass(); + + } else if (timeline.getStatus().toString().equals("PAUSED")) { + bindTimeToTextField(); + addStyleClass(); + timeline.play(); + pauseBtn.setText("Pause"); + } + } + + private Integer TimerTimeInSeconds() { + int HoursToSec = 0; + int MinToSec = 0; + int SecToSec = 0; + + if (!HoursTxtField.getText().isEmpty()) + HoursToSec = (Integer.parseInt(HoursTxtField.getText()) * 60 * 60); + if (!MinTxtField.getText().isEmpty()) + MinToSec = (Integer.parseInt(MinTxtField.getText()) * 60); + if (!SecTxtField.getText().isEmpty()) + SecToSec = Integer.parseInt(SecTxtField.getText()); + + // System.out.println(HoursTxtField.getText()); + //System.out.println(MinTxtField.getText()); + //System.out.println(SecTxtField.getText()); + + HoursTxtField.setEditable(false); + MinTxtField.setEditable(false); + SecTxtField.setEditable(false); + + return HoursToSec + MinToSec + SecToSec; + } + + void StartTimer() { + STARTTIME = TimerTimeInSeconds(); + + timeSeconds.set(STARTTIME); + timeline = new Timeline(); + timeline.getKeyFrames().add( + new KeyFrame(Duration.seconds(STARTTIME + 1), + new KeyValue(timeSeconds, 0))); + timeline.playFromStart(); + + } + + void runCMDCommand() { + + timeline.setOnFinished(event1 -> { + try { + App.setRoot("Timer"); + if (MainUIController.getTaskName().equals("Sleep") || MainUIController.getTaskName().equals("Hibernate")) { + App.runCMDCommand(extraCommand); + } + App.runCMDCommand(command); + CLOSE_APP(); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + + void ResetTimer() { + timeline = null; + } + + void bindTimeToTextField() { + removeChangeListener(); + addStyleClass(); + + // Bind the Timer TextFields text property to the timeSeconds property + HoursTxtField.textProperty().bind(timeSeconds.divide(3600).asString()); + MinTxtField.textProperty().bind(timeSeconds.divide(60).subtract(timeSeconds.divide(3600).multiply(60)).asString()); + SecTxtField.textProperty().bind(timeSeconds.subtract(timeSeconds.divide(60).multiply(60)).asString()); + } + + void unBindTimeToTextField() { + // Bind the Timer TextFields text property to the timeSeconds property + HoursTxtField.textProperty().unbind(); + MinTxtField.textProperty().unbind(); + SecTxtField.textProperty().unbind(); + + HoursTxtField.setEditable(true); + MinTxtField.setEditable(true); + SecTxtField.setEditable(true); + + addChangeListener(); + } + + void addChangeListener() { + HoursTxtField.textProperty().addListener(listener); + MinTxtField.textProperty().addListener(listener); + SecTxtField.textProperty().addListener(listener); + } + + void addStyleClass() { + + HoursTxtField.getStyleClass().add("profileText-field"); + MinTxtField.getStyleClass().add("profileText-field"); + SecTxtField.getStyleClass().add("profileText-field"); + + } + + void RestoreStyleClass() { + HoursTxtField.getStyleClass().clear(); + MinTxtField.getStyleClass().clear(); + SecTxtField.getStyleClass().clear(); + + HoursTxtField.getStyleClass().add("accountText-field"); + MinTxtField.getStyleClass().add("accountText-field"); + SecTxtField.getStyleClass().add("accountText-field"); + } + + void removeChangeListener() { + HoursTxtField.textProperty().removeListener(listener); + MinTxtField.textProperty().removeListener(listener); + SecTxtField.textProperty().removeListener(listener); + } + + + @Override + public void initialize(URL url, ResourceBundle resourceBundle) { + StartBtn.disableProperty().bind(Bindings.isEmpty(HoursTxtField.textProperty()) + .and(Bindings.isEmpty(MinTxtField.textProperty())) + .and(Bindings.isEmpty(SecTxtField.textProperty()))); + + + switch (MainUIController.getTaskName()) { + case "ShutDown" -> { + taskLbl.setText(resourceBundle.getString("tskShutDownLbl")); + command = "start shutdown /s"; + } + case "Restart" -> { + taskLbl.setText(resourceBundle.getString("tskRestartLbl")); + command = "start shutdown /r"; + } + case "Hibernate" -> { + taskLbl.setText(resourceBundle.getString("tskHibernateLbl")); + extraCommand = "powercfg -h on"; + command = "start shutdown /h"; + } + case "Sleep" -> { + taskLbl.setText(resourceBundle.getString("tskSleepLbl")); + extraCommand = "powercfg -h off"; + command = "rundll32.exe powrprof.dll, SetSuspendState Sleep"; + } + } + } +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..304cc5e --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,11 @@ +module TaskTimer { + + requires javafx.controls; + requires javafx.fxml; + requires com.jfoenix; + + opens HuimangTech to javafx.graphics, javafx.fxml; + + exports HuimangTech; + +} \ No newline at end of file diff --git a/src/main/java/resources/FXML.css b/src/main/java/resources/FXML.css new file mode 100644 index 0000000..822b1fe --- /dev/null +++ b/src/main/java/resources/FXML.css @@ -0,0 +1,96 @@ +@font-face { + +} + +.parent { + -fx-background-color: #fff; +} + +.sidebar { + -fx-background-color: #325288; +} + +.HomeLbl { + -fx-font-family: 'Adobe Devanagari'; +} + +.jfxButton { + -fx-background-color: #325288; + -fx-text-fill: #FFF; +} + +.jfxButton:hover { + -fx-background-color: #fff; + -fx-background-radius: 5px; + -fx-text-fill: #325288; + -fx-border-color: #325288; + -fx-border-width: 1px; + -fx-border-radius: 5px; + -fx-border-style: solid; +} + +.jfxButton:focused:hover { + -fx-background-color: #fff; + -fx-background-radius: 5px; + -fx-text-fill: #325288; + -fx-border-color: #325288; + -fx-border-width: 1px; + -fx-border-radius: 5px; + -fx-border-style: solid; +} + + +.closeBtn { + -fx-background-color: #325288; +} + +.closeBtn:hover { + -fx-background-color: #f17b7b; +} + +.aboutUsBtn { + -fx-fill: #FFF; +} + +.aboutUsBtn:hover { + -fx-fill: #f1c64e; +} + +.backBtn { +} + +.backBtn:hover { + -fx-background-color: #21365b; +} + +.homeUI { + -fx-background-color: white; + -fx-border-color: #325288; + -fx-border-width: 5px 5px 5px 5px +} + +.choice-box { + -fx-fill: #f1c64e; + -fx-text-fill: #f1c64e; + -fx-color-label-visible: #f1c64e; + -fx-font-size: 28px; + -fx-font-family: "Times New Roman"; + -fx-background-color: -fx-text-box-border, -fx-background, #fff; + -fx-background-insets: 0, 0 0 0 0; + -fx-background-radius: 0; +} + +.choice-box:focused { + -fx-text-fill: #f1c64e; + -fx-background-insets: 0, 0 0 1 0; + -fx-background-radius: 0; + -fx-background-color: -fx-focus-color, -fx-background; +} + +.choice-box:hover { + -fx-text-fill: #f1c64e; + -fx-background-insets: 0, 0 0 1 0; + -fx-background-radius: 0; + -fx-background-color: -fx-focus-color, -fx-background; +} + diff --git a/src/main/java/resources/Images/TaskTimer.ico b/src/main/java/resources/Images/TaskTimer.ico new file mode 100644 index 0000000000000000000000000000000000000000..e02fee582cbd6dd96e3b12f87a3804ec4f8e1ecb GIT binary patch literal 15647 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.Xr5>yIWp*VoL^7OSA`dF{d0a#(T} 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 FV1jsM+lBxD literal 0 HcmV?d00001 diff --git a/src/main/java/resources/Images/delete.png b/src/main/java/resources/Images/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..28baa329dcd50b162d37e780d10ae85eb8446c0b GIT binary patch literal 990 zcmeAS@N?(olHy`uVBq!ia0vp^4j?SR0we=Iq>2G4mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VW5Sk`!X@$_|Nf6B=sre(GvH24Tm(?w4g$B>F!PiH&&y*3bNbMKH* zxEu12spFeWzz$c|I@q)Jc75bV~Qt@met>*5vtb{Ugz%zJtIjq%6t zH~V6DJ8uyRn8zLy<8b#b<7UYXF--aS2ND>rzP!-KQc%Uk!?x?~X;p){OpgsOymqX- z$Irj@_JP;hb=;zD4eyJY|MA?*U|4+dJx?LemfQau=AYl_yTXF4sX@9-){dj(_O{NS zHq#fh|81KW-+j_$5{m*y$!xBcu4Ik#$}3KvPWrG(WlGce$A9K5c=!IaEzgUI#RUi0 z*3a@)=sLB%-bCra>(w<(cAQrqGA5WQ@AV1c-F|uDtqt+LN1GbHe}C0^$J2nFpTTpJ z`^h&ZYYpse z7PDA>;1POq(0Yo3_`OD!?Co2e@|Vhf`SWVyjvnsF=O60#J1=0FK3(jQO2M5Q9TN{! z#vavkJQOQCn}zd3j*!Yh>*)+8Qpe0y+VV2j-tnscKU=1tT3hhmDwaEUQcj*fr*inV zET_6UOHBOi(;45zXa3B0+V8(>%b6Bm^P?eY?oN{gCM?^{lpl8}$??GR^sOp$RE>oL=T7c;qMY9S*KiG=DdA1w|cjl08_lLlZfNn_vxHbYky5WCnsC$ zeIYB?&p_ss-n?&r&px#e+`=|rJz(DQ{hW_C>RI{+D|j~4+3OqJYHWB_(y&_l?l%)w zJG+w5%I&lHf9w2Xa7>!e@P6KJ9bkG_Epd$~Nl7e8wMs5Z1yT$~21bUu29~-8CLu;f uRwhPPrY713237_JGs?ByP&DM`r(~v8;@0p|YceP|GI+ZBxvX2G4mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VW5Sk`!X@$_|Nf6B=suA=O8^20O+2F72WE{-7;x8Ba)oyFuR(fVKX z&El(vrnxn3Hxauf;W_ivx%N|&e=w|Eti;iokg1rFywHtWnh%%kCaq{^hs9 zOrG7d**|RKEwQ>W^Le_$?9}o)h>6rbXCt;p@!L&qn7=ER=-U1Fs;@%HV6L){%QF%bs}G?H$= z(OT1TgY^a{=eu_|R4Znl*HsXTjAN<&G4hWXD^%J)%oRj<1Le=7c)$b&nsUU z!z$LfXObr{VW^h4MwFx^mZVxG7o`Fz1|tI_LtO()T?3O4BV#LLGb>|LZ36=<0|Qn~ gS56cSx%nxXX_dG&l$8A43e>>h>FVdQ&MBb@08wj4>Hq)$ literal 0 HcmV?d00001 diff --git a/src/main/java/resources/Images/minus.png b/src/main/java/resources/Images/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..c2db0b1d3b171e83752ba06a2a7d1d992cfd6328 GIT binary patch literal 568 zcmeAS@N?(olHy`uVBq!ia0vp^4j?SR0we=Iq>2G4mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VW5Sk`!X@$_|Nf6B=srX|(XYp>40z^Lu%;uunK>+N;Ju0sJLtq+Tn z7aJ%9t~ui65-nK1@b`tK9XtASTxXYDREoMeOZepw-K0dtrXt4%U!zm0Xkxq!^40j0|-R zEOiY`LX3>8OpL6I%(M**tPBiTb&bnVH00)|WTsW()=*N=eF~_7!PC{xWt~$(69C-I B)eQgu literal 0 HcmV?d00001 diff --git a/src/main/java/resources/MainUI.fxml b/src/main/java/resources/MainUI.fxml new file mode 100644 index 0000000..60b4813 --- /dev/null +++ b/src/main/java/resources/MainUI.fxml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
diff --git a/src/main/java/resources/Timer.fxml b/src/main/java/resources/Timer.fxml new file mode 100644 index 0000000..c9c7330 --- /dev/null +++ b/src/main/java/resources/Timer.fxml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
diff --git a/src/main/java/resources/bundles/TaskTimer_ar_SA.properties b/src/main/java/resources/bundles/TaskTimer_ar_SA.properties new file mode 100644 index 0000000..ad19cf2 --- /dev/null +++ b/src/main/java/resources/bundles/TaskTimer_ar_SA.properties @@ -0,0 +1,13 @@ +Hibernate=إسبات +Restart=إعادة تشغيل +ShutDown=إيقاف تشغيل +Sleep=سكون +Hours=ساعات +Seconds=ثواني +Minutes=دقائق +Start=البدء +tskLbl=ادخل الوقت للمهمة +tskShutDownLbl=أدخل الوقت المراد ل إيقاف التشغيل +tskRestartLbl=أدخل الوقت المراد ل إعادة التشغيل +tskHibernateLbl=أدخل الوقت المراد للإسبات +tskSleepLbl=أدخل الوقت المراد للسكون \ No newline at end of file diff --git a/src/main/java/resources/bundles/TaskTimer_en_US.properties b/src/main/java/resources/bundles/TaskTimer_en_US.properties new file mode 100644 index 0000000..e0f36d5 --- /dev/null +++ b/src/main/java/resources/bundles/TaskTimer_en_US.properties @@ -0,0 +1,13 @@ +Hibernate=Hibernate +Restart=Restart +ShutDown=ShutDown +Sleep=Sleep +Hours=Hours +Seconds=Seconds +Minutes=Minutes +Start=Start +tskLbl=Enter Time to Task +tskShutDownLbl=Enter Time to ShutDown +tskRestartLbl=Enter Time to Restart +tskHibernateLbl=Enter Time to Hibernate +tskSleepLbl=Enter Time to Sleep