diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcApp.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcApp.java index d4eec5b..3e43960 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcApp.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcApp.java @@ -6,6 +6,7 @@ import org.nanoboot.utils.timecalc.swing.windows.MainWindow; import org.nanoboot.utils.timecalc.utils.common.DateFormats; import org.nanoboot.utils.timecalc.utils.common.FileConstants; import org.nanoboot.utils.timecalc.utils.common.Utils; +import org.nanoboot.utils.timecalc.utils.property.Property; import org.nanoboot.utils.timecalc.utils.property.ReadOnlyProperty; import org.nanoboot.utils.timecalc.utils.property.StringProperty; @@ -34,7 +35,8 @@ public class TimeCalcApp { = new StringProperty("timeCalcApp.visibilityProperty", Visibility.WEAKLY_COLORED.name()); private long startNanoTime = 0l; - public ReadOnlyProperty allowOnlyBasicFeaturesProperty = new ReadOnlyProperty<>("allowOnlyBasicFeatures", false); + private Property allowOnlyBasicFeaturesReadWriteProperty = new Property<>("allowOnlyBasicFeaturesReadWriteProperty", false); + public ReadOnlyProperty allowOnlyBasicFeaturesProperty = new ReadOnlyProperty<>(allowOnlyBasicFeaturesReadWriteProperty); @Getter private SqliteConnectionFactory sqliteConnectionFactory; @@ -58,14 +60,19 @@ public class TimeCalcApp { e.printStackTrace(); } if(FileConstants.BASIC_TXT.exists()) { - allowOnlyBasicFeaturesProperty.setValue(true); + allowOnlyBasicFeaturesReadWriteProperty.setValue(true); } while (true) { + if(!allowOnlyBasicFeaturesProperty.getValue() && FileConstants.BASIC_TXT.exists()) { + allowOnlyBasicFeaturesReadWriteProperty.setValue(true); + } + MainWindow timeCalcMainWindow = null; try { timeCalcMainWindow = new MainWindow(this); } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Error: " + e.getMessage(), e.getMessage(), JOptionPane.ERROR_MESSAGE); e.printStackTrace(); diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/TimeCalcKeyAdapter.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/TimeCalcKeyAdapter.java index 1bfadb0..a5f7738 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/TimeCalcKeyAdapter.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/TimeCalcKeyAdapter.java @@ -18,6 +18,7 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.FileInputStream; import java.io.IOException; +import java.util.Arrays; import java.util.Calendar; import java.util.Properties; import lombok.Setter; @@ -29,6 +30,10 @@ import org.nanoboot.utils.timecalc.utils.common.NumberFormats; */ public class TimeCalcKeyAdapter extends KeyAdapter { + private static final int[] ALLOWED_KEY_CODES = + {KeyEvent.VK_R, KeyEvent.VK_X, KeyEvent.VK_W, KeyEvent.VK_A, KeyEvent.VK_Z,KeyEvent.VK_O}; + private static final String EXTENDED_FEATURES_ARE_DISABLED = + "Extended features are disabled"; private final TimeCalcConfiguration timeCalcConfiguration; private final TimeCalcApp timeCalcApp; private final MainWindow mainWindow; @@ -174,6 +179,10 @@ public class TimeCalcKeyAdapter extends KeyAdapter { break; } case KeyEvent.VK_Q: { + if(mainWindow.allowOnlyBasicFeaturesProperty.getValue()) { + showWarningExtendedFeaturesAreDisabled(); + return; + } double oldSpeed = this.mainWindow.getSpeed(); if (oldSpeed < 0) { oldSpeed = 1.0d; @@ -242,6 +251,10 @@ public class TimeCalcKeyAdapter extends KeyAdapter { break; } case KeyEvent.VK_P: { + if(mainWindow.allowOnlyBasicFeaturesProperty.getValue()) { + showWarningExtendedFeaturesAreDisabled(); + break; + } if (increase) { mainWindow.increasePause(changeTTime); } @@ -268,7 +281,12 @@ public class TimeCalcKeyAdapter extends KeyAdapter { } } -// private void processMetaKeyCodes(int keyCode) { + private void showWarningExtendedFeaturesAreDisabled() { + + Utils.showNotification(EXTENDED_FEATURES_ARE_DISABLED); + } + + // private void processMetaKeyCodes(int keyCode) { // // switch (keyCode) { // case KeyEvent.VK_S: { @@ -285,6 +303,10 @@ public class TimeCalcKeyAdapter extends KeyAdapter { private void updateProperty(IntegerProperty integerProperty, boolean increase, boolean decrease, boolean reset, int timeUnit, int value) { + if(mainWindow.allowOnlyBasicFeaturesProperty.getValue()) { + showWarningExtendedFeaturesAreDisabled(); + return; + } if (value == 0) { //nothing to do return; @@ -444,6 +466,12 @@ public class TimeCalcKeyAdapter extends KeyAdapter { "Warning: There is no profile assigned to Key with number, you pressed."); } + if(mainWindow.allowOnlyBasicFeaturesProperty.getValue()) { + if(!Arrays.stream(ALLOWED_KEY_CODES).filter(k->k== keyCode).findFirst().isPresent()){ + showWarningExtendedFeaturesAreDisabled(); + return; + } + } switch (keyCode) { case KeyEvent.VK_UP: { @@ -709,13 +737,28 @@ public class TimeCalcKeyAdapter extends KeyAdapter { break; } case KeyEvent.VK_O: { - if (timeCalcConfiguration.testEnabledProperty.isDisabled()) { - if (!Utils.askYesNo(null, "Do you really want to enable \"Test mode\"? If yes, then you will be allowed to set custom time.", "Enabling \"Test mode\"")) { + if (mainWindow.allowOnlyBasicFeaturesProperty.getValue()) { + Utils.showNotification("Extended features are already disabled."); + } else { + String question = + "Do you really want to disable the extended features of this application? Only the basic features will be enabled."; + if (!Utils.askYesNo(null, question, "Disabling \"Extended features\" of this app")) { break; } + try { + FileConstants.BASIC_TXT.createNewFile(); + + String msg = "Warning: " + "You disabled the extended features of this application. Only the basic features are enabled. To enable the extended features, please: 1. stop this application 2. delete manually this file: " + FileConstants.BASIC_TXT.getAbsolutePath() + " 3. start this application again."; + Utils.showNotification(msg, 30000, 400); + + this.mainWindow.doRestart(); + } catch (IOException e) { + e.printStackTrace(); + break; + } + break; } - timeCalcConfiguration.testEnabledProperty.flip(); - Utils.showNotification((timeCalcConfiguration.testEnabledProperty.isEnabled() ? "Enabled" : "Disabled") + " \"Test mode\"."); + break; } case KeyEvent.VK_COMMA: { @@ -735,8 +778,14 @@ public class TimeCalcKeyAdapter extends KeyAdapter { } } - if (numberKeyWasPressed && FileConstants.TIME_CALC_PROFILES_TXT_FILE - .exists()) { + boolean profileSwitch = + numberKeyWasPressed && FileConstants.TIME_CALC_PROFILES_TXT_FILE + .exists(); + if(profileSwitch && mainWindow.allowOnlyBasicFeaturesProperty.getValue()) { + showWarningExtendedFeaturesAreDisabled(); + } + + if (profileSwitch && !mainWindow.allowOnlyBasicFeaturesProperty.getValue()) { Properties properties = new Properties(); try { diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Toaster.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Toaster.java index b479ecf..a2770a4 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Toaster.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Toaster.java @@ -115,10 +115,10 @@ public class Toaster { * Show a toaster with the specified message and the associated icon. */ public void showToaster(Icon icon, String msg) { - if (notificationsVisibleProperty.isDisabled()) { - //nothing to do - return; - } +// if (notificationsVisibleProperty.isDisabled()) { +// //nothing to do +// return; +// } SingleToaster singleToaster = new SingleToaster(); if (icon != null) { singleToaster.iconLabel.setIcon(icon); diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/weather/A.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/weather/A.java deleted file mode 100644 index e5aa21c..0000000 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/weather/A.java +++ /dev/null @@ -1,239 +0,0 @@ -package org.nanoboot.utils.timecalc.swing.progress.weather; - -import java.util.Arrays; - -/** - * @author pc00289 - * @since 25.03.2024 - */ -public class A { - public static void main(String[] args) { - String a = "\n" - + " case KeyEvent.VK_UP: {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(onlyGreyOrNone ? Visibility.GRAY.name()\n" - + " : Visibility.STRONGLY_COLORED.name());\n" - + " break;\n" - + " }\n" - + "\n" - + " case KeyEvent.VK_DOWN:\n" - + " case KeyEvent.VK_PERIOD: {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(Visibility.NONE.name());\n" - + " break;\n" - + " }\n" - + "\n" - + " case KeyEvent.VK_G: {\n" - + " if (visibility.isGray() && !onlyGreyOrNone) {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(Visibility.WEAKLY_COLORED.name());\n" - + " } else {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(Visibility.GRAY.name());\n" - + " }\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_C: {\n" - + " if (!onlyGreyOrNone) {\n" - + " if (visibility.isStronglyColored()) {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(Visibility.WEAKLY_COLORED.name());\n" - + " } else {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(\n" - + " Visibility.STRONGLY_COLORED.name());\n" - + " }\n" - + " } else {\n" - + " timeCalcApp.visibilityProperty.setValue(Visibility.GRAY\n" - + " .name());\n" - + " }\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_V:\n" - + "\n" - + " case KeyEvent.VK_H: {\n" - + " if (visibility.isNone()) {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(onlyGreyOrNone ? Visibility.GRAY.name()\n" - + " : Visibility.STRONGLY_COLORED.name());\n" - + " } else {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(Visibility.NONE.name());\n" - + " }\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_SPACE: {\n" - + " if (visibility.isStronglyColored()) {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(onlyGreyOrNone ? Visibility.GRAY.name()\n" - + " : Visibility.WEAKLY_COLORED.name());\n" - + " }\n" - + " if (visibility.isWeaklyColored()) {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(Visibility.GRAY.name());\n" - + " }\n" - + " if (visibility.isGray()) {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(Visibility.NONE.name());\n" - + " }\n" - + " if (visibility.isNone()) {\n" - + " timeCalcApp.visibilityProperty\n" - + " .setValue(onlyGreyOrNone ? Visibility.GRAY.name()\n" - + " : Visibility.STRONGLY_COLORED.name());\n" - + " }\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_F2: {\n" - + " mainWindow.doCommand();\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_R: {\n" - + " mainWindow.doRestart();\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_N: {\n" - + " timeCalcConfiguration.notificationsVisibleProperty.flip();\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_W: {\n" - + " mainWindow.openWorkDaysWindow();\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_A: {\n" - + " mainWindow.openActivitiesWindow();\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_X: {\n" - + " mainWindow.doExit();\n" - + " break;\n" - + " }\n" - + "\n" - + " case KeyEvent.VK_S: {\n" - + " mainWindow.openConfigWindow();\n" - + " break;\n" - + " }\n" - + "\n" - + " case KeyEvent.VK_J: {\n" - + " if (timeCalcConfiguration.jokesVisibleProperty.isEnabled()) {\n" - + " Jokes.showRandom();\n" - + " break;\n" - + " }\n" - + "\n" - + " }\n" - + "\n" - + " case KeyEvent.VK_P:\n" - + " case KeyEvent.VK_F1: {\n" - + " mainWindow.openHelpWindow();\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_U: {\n" - + " mainWindow.doEnableEverything();\n" - + " break;\n" - + "\n" - + " }\n" - + " case KeyEvent.VK_I: {\n" - + " mainWindow.doDisableAlmostEverything();\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_E: {\n" - + " timeCalcConfiguration.batteryWavesVisibleProperty.flip();\n" - + " break;\n" - + " }\n" - + "\n" - + " case KeyEvent.VK_B: {\n" - + " MainWindow.hideShowFormsCheckBox\n" - + " .setSelected(!MainWindow.hideShowFormsCheckBox.isSelected());\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_F: {\n" - + "\n" - + " if (FileConstants.TIME_CALC_PROFILES_TXT_FILE.exists()) {\n" - + " try {\n" - + " Utils.showNotification(Utils.readTextFromFile(\n" - + " FileConstants.TIME_CALC_PROFILES_TXT_FILE),\n" - + " 15000, 200);\n" - + " } catch (IOException ioException) {\n" - + " ioException.printStackTrace();\n" - + " Utils.showNotification(\n" - + " \"Error: \" + ioException.getMessage());\n" - + " }\n" - + " } else {\n" - + " Utils.showNotification(\n" - + " \"Warning: There are no numbers assigned to profiles. Update file: \"\n" - + " + FileConstants.TIME_CALC_PROFILES_TXT_FILE\n" - + " .getAbsolutePath() + \".\");\n" - + " }\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_Q: {\n" - + " timeCalcConfiguration.squareVisibleProperty.flip();\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_L: {\n" - + " timeCalcConfiguration.circleVisibleProperty.flip();\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_Y: {\n" - + " timeCalcConfiguration.smileysVisibleOnlyIfMouseMovingOverProperty\n" - + " .flip();\n" - + " if (timeCalcConfiguration.smileysVisibleOnlyIfMouseMovingOverProperty.isDisabled() && timeCalcConfiguration.smileysVisibleProperty.isDisabled()) {\n" - + " timeCalcConfiguration.smileysVisibleProperty.enable();\n" - + " }\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_M: {\n" - + " timeCalcConfiguration.walkingHumanVisibleProperty.flip();\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_LEFT: {\n" - + " switchProfile(true, false);\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_RIGHT: {\n" - + " switchProfile(false, true);\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_D: {\n" - + " timeCalcConfiguration.testYearCustomProperty.setValue(Integer.MAX_VALUE);\n" - + " timeCalcConfiguration.testMonthCustomProperty.setValue(Integer.MAX_VALUE);\n" - + " timeCalcConfiguration.testDayCustomProperty.setValue(Integer.MAX_VALUE);\n" - + " timeCalcConfiguration.testHourCustomProperty.setValue(Integer.MAX_VALUE);\n" - + " timeCalcConfiguration.testMinuteCustomProperty.setValue(Integer.MAX_VALUE);\n" - + " timeCalcConfiguration.testSecondCustomProperty.setValue(Integer.MAX_VALUE);\n" - + " timeCalcConfiguration.testMillisecondCustomProperty.setValue(Integer.MAX_VALUE);\n" - + " Utils.showNotification(timeCalcConfiguration.print(), 15000, 400);\n" - + " this.mainWindow.resetSpeed();\n" - + " break;\n" - + " }\n" - + "\n" - + " case KeyEvent.VK_K: {\n" - + " if (timeCalcConfiguration.clockVisibleProperty.isEnabled()) {\n" - + " timeCalcConfiguration.clockVisibleProperty.disable();\n" - + " } else {\n" - + " timeCalcConfiguration.clockVisibleProperty.enable();\n" - + " timeCalcConfiguration.clockHandsLongVisibleProperty.enable();\n" - + " timeCalcConfiguration.clockHandsColoredProperty.enable();\n" - + " timeCalcConfiguration.clockHandsHourVisibleProperty.enable();\n" - + " timeCalcConfiguration.clockHandsMinuteVisibleProperty.enable();\n" - + " timeCalcConfiguration.clockHandsSecondVisibleProperty.enable();\n" - + " timeCalcConfiguration.clockHandsMillisecondVisibleProperty.enable();\n" - + " timeCalcConfiguration.clockBorderVisibleProperty.enable();\n" - + " timeCalcConfiguration.clockBorderOnlyHoursProperty.disable();\n" - + " timeCalcConfiguration.clockNumbersVisibleProperty.enable();\n" - + " timeCalcConfiguration.clockCircleVisibleProperty.enable();\n" - + " timeCalcConfiguration.clockCircleStrongBorderProperty.disable();\n" - + " timeCalcConfiguration.clockCircleBorderColorProperty.setValue(\"0,0,255\");\n" - + " timeCalcConfiguration.clockCentreCircleVisibleProperty.enable();\n" - + " timeCalcConfiguration.clockCentreCircleBlackProperty.disable();\n" - + " timeCalcConfiguration.clockProgressVisibleOnlyIfMouseMovingOverProperty.disable();\n" - + " timeCalcConfiguration.clockDateVisibleOnlyIfMouseMovingOverProperty.disable();\n" - + " }\n" - + " break;\n" - + " }\n" - + " case KeyEvent.VK_Z: {"; - Arrays.stream(a.split("\n")).filter(l->l.contains("VK_")) - .map(l->l.replace("case KeyEvent.VK_","")) - .map(l->l.replace(": {","")).sorted() - .forEach(System.out::println); - } -} diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/weather/UtilityWhichKeysAreUsed.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/weather/UtilityWhichKeysAreUsed.java new file mode 100644 index 0000000..60adde8 --- /dev/null +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/weather/UtilityWhichKeysAreUsed.java @@ -0,0 +1,17 @@ +package org.nanoboot.utils.timecalc.swing.progress.weather; + +import java.util.Arrays; + +/** + * @author pc00289 + * @since 25.03.2024 + */ +public class UtilityWhichKeysAreUsed { + public static void main(String[] args) { + String javaCode = ""; + Arrays.stream(javaCode.split("\n")).filter(l->l.contains("VK_")) + .map(l->l.replace("case KeyEvent.VK_","")) + .map(l->l.replace(": {","")).sorted() + .forEach(System.out::println); + } +} diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/ConfigWindow.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/ConfigWindow.java index c70aabe..5a5b3d3 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/ConfigWindow.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/ConfigWindow.java @@ -382,7 +382,7 @@ public class ConfigWindow extends TWindow { button.addActionListener(e -> { visibilityDefaultProperty - .setSelectedItem(Visibility.STRONGLY_COLORED.name()); + .setSelectedItem(Visibility.GRAY.name()); clockVisibleProperty.setSelected(true); clockHandsHourVisibleProperty.setSelected(enable); clockHandsMinuteVisibleProperty.setSelected(enable); diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java index 1328139..748f2d2 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java @@ -70,6 +70,7 @@ import java.util.List; import java.util.stream.Collectors; import javax.swing.Timer; import org.nanoboot.utils.timecalc.swing.progress.ProgressDot; +import org.nanoboot.utils.timecalc.utils.property.ReadOnlyProperty; /** * @author Robert Vokac @@ -81,6 +82,8 @@ public class MainWindow extends TWindow { public static final Color FOREGROUND_COLOR = new Color(210, 210, 210); public static final JCheckBox hideShowFormsCheckBox = new JCheckBox(); private static final int BATTERY_WIDTH = 140; + private static final String BACKUP = "_backup"; + private static final String BASIC_FEATURE__ = "__only_basic_features__"; private final TButton workDaysButton; private final TButton activitiesButton; private final TButton exitButton; @@ -123,6 +126,8 @@ public class MainWindow extends TWindow { private double msRemaining = 0d; private final Time timeAlwaysReal; + public final ReadOnlyProperty allowOnlyBasicFeaturesProperty; + { ChangeListener valueMustBeTime = (property, oldValue, newValue) -> new TTime((String) newValue); @@ -141,6 +146,7 @@ public class MainWindow extends TWindow { // ToolTipManager ttm = ToolTipManager.sharedInstance(); // ttm.setInitialDelay(0); // ttm.setDismissDelay(10000); + allowOnlyBasicFeaturesProperty = timeCalcApp.allowOnlyBasicFeaturesProperty; setFocusable(true); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); addWindowListener(new java.awt.event.WindowAdapter() { @@ -152,6 +158,7 @@ public class MainWindow extends TWindow { }); timeCalcConfiguration .loadFromTimeCalcProperties(TimeCalcProperties.getInstance()); + timeCalcConfiguration.mainWindowCustomTitleProperty.addListener(e -> { setTitle(getWindowTitle()); }); @@ -187,12 +194,45 @@ public class MainWindow extends TWindow { } }); this.configButton = new TButton("Config"); - this.workDaysButton = new TButton("Work Days"); - this.activitiesButton = new TButton("Activities" - + ""); - this.restartButton = new TButton("Restart"); + configButton.addActionListener(e -> { + if (configWindow == null) { + this.configWindow = new ConfigWindow(timeCalcConfiguration); + } + configWindow.setVisible(true); + configWindow.setLocationRelativeTo(this); + configWindow.setLocation(100, 100); + }); + if(allowOnlyBasicFeaturesProperty.getValue()) { + if(!timeCalcConfiguration.profileNameProperty.getValue().equals(BASIC_FEATURE__)) { + timeCalcConfiguration.profileNameProperty.setValue( + timeCalcConfiguration.profileNameProperty.getValue() + + BACKUP); + timeCalcConfiguration.saveToTimeCalcProperties(); + + timeCalcConfiguration.profileNameProperty.setValue(BASIC_FEATURE__); + timeCalcConfiguration.saveToTimeCalcProperties(); + } + timeCalcConfiguration.profileNameProperty.setValue(BASIC_FEATURE__); + timeCalcConfiguration.mainWindowCustomTitleProperty.setValue("Report"); + this.doDisableAlmostEverything(); + // + //timeCalcConfiguration.batteryNameVisibleProperty.enable(); + timeCalcConfiguration.batteryPercentProgressProperty.enable(); + //timeCalcConfiguration.batteryCircleProgressProperty.enable(); + // +// timeCalcConfiguration.clockHandsHourVisibleProperty.setValue(true); +// timeCalcConfiguration.clockHandsMinuteVisibleProperty.setValue(true); + timeCalcConfiguration.clockVisibleProperty.setValue(true); +// timeCalcConfiguration.clockHandsLongVisibleProperty.setValue(true); + timeCalcConfiguration.notificationsVisibleProperty.setValue(true); + // + timeCalcConfiguration.saveToTimeCalcProperties(); + } + this.workDaysButton = new TButton(allowOnlyBasicFeaturesProperty.getValue() ? " " : "Work Days"); + this.activitiesButton = new TButton(allowOnlyBasicFeaturesProperty.getValue() ? " " : "Activities"); + this.restartButton = new TButton(allowOnlyBasicFeaturesProperty.getValue() ? " " : "Restart"); this.exitButton = new TButton("Exit"); - this.focusButton = new TButton("Focus"); + this.focusButton = new TButton(allowOnlyBasicFeaturesProperty.getValue() ? " " : "Focus"); this.helpButton = new TButton("Help"); this.weatherButton = new TButton("Weather"); this.commandButton = new TButton("Command"); @@ -200,11 +240,17 @@ public class MainWindow extends TWindow { this.aboutButton = new AboutButton(); //window.add(weatherButton); - addAll(configButton, workDaysButton, activitiesButton, restartButton, - exitButton, focusButton, helpButton, commandButton, jokeButton, - hideShowFormsCheckBox); + addAll(workDaysButton, activitiesButton, restartButton,focusButton); + if(!allowOnlyBasicFeaturesProperty.getValue()) { + addAll(configButton, commandButton,jokeButton,helpButton, + exitButton, + hideShowFormsCheckBox); + } + if(allowOnlyBasicFeaturesProperty.getValue()) { + timeOffCheckBox.setText(""); + } - timeCalcApp.visibilityProperty + timeCalcApp.visibilityProperty .bindTo(timeCalcConfiguration.visibilityDefaultProperty); if (!timeCalcConfiguration.visibilitySupportedColoredProperty .isEnabled()) { @@ -458,25 +504,27 @@ public class MainWindow extends TWindow { timeOffCheckBox.setBoundsFromLeft(noteTextField); // - add(arrivalTextFieldLabel); + if(!allowOnlyBasicFeaturesProperty.getValue()) add(arrivalTextFieldLabel); add(arrivalTextField); add(arrivalIncreaseButton); add(arrivalDecreaseButton); - add(overtimeTextFieldLabel); + if(!allowOnlyBasicFeaturesProperty.getValue()) add(overtimeTextFieldLabel); add(overtimeTextField); add(overtimeIncreaseButton); add(overtimeDecreaseButton); - add(workingTimeInMinutesTextFieldLabel); + if(!allowOnlyBasicFeaturesProperty.getValue()) add(workingTimeInMinutesTextFieldLabel); add(workingTimeTextField); add(workingIncreaseButton); add(workingDecreaseButton); - add(pauseTimeInMinutesFieldLabel); - add(pauseTimeTextField); - add(pauseIncreaseButton); - add(pauseDecreaseButton); + if(!allowOnlyBasicFeaturesProperty.getValue()) { + add(pauseTimeInMinutesFieldLabel); + add(pauseTimeTextField); + add(pauseIncreaseButton); + add(pauseDecreaseButton); + } arrivalIncreaseButton.addActionListener(e -> increaseArrival(TTime.T_TIME_ONE_MINUTE)); arrivalDecreaseButton.addActionListener(e -> decreaseArrival(TTime.T_TIME_ONE_MINUTE)); @@ -487,7 +535,7 @@ public class MainWindow extends TWindow { pauseIncreaseButton.addActionListener(e -> increasePause(TTime.T_TIME_ONE_MINUTE)); pauseDecreaseButton.addActionListener(e -> decreasePause(TTime.T_TIME_ONE_MINUTE)); - add(noteTextFieldLabel); + if(!allowOnlyBasicFeaturesProperty.getValue()) add(noteTextFieldLabel); add(noteTextField); add(timeOffCheckBox); // @@ -513,13 +561,17 @@ public class MainWindow extends TWindow { saveButton.setBoundsFromLeft(remainingTextField); // - add(departureTextFieldLabel); + if(!allowOnlyBasicFeaturesProperty.getValue()) add(departureTextFieldLabel); add(departureTextField); - add(elapsedTextFieldLabel); - add(elapsedTextField); - add(remainingTextFieldLabel); - add(remainingTextField); - add(saveButton); + if(!allowOnlyBasicFeaturesProperty.getValue()) { + add(elapsedTextFieldLabel); + add(elapsedTextField); + add(remainingTextFieldLabel); + add(remainingTextField); + } + if(!allowOnlyBasicFeaturesProperty.getValue()) { + add(saveButton); + } this.workingDayRepository = new WorkingDayRepositorySQLiteImpl(timeCalcApp.getSqliteConnectionFactory()); this.activityRepository = new ActivityRepositorySQLiteImpl(timeCalcApp.getSqliteConnectionFactory()); @@ -575,26 +627,18 @@ public class MainWindow extends TWindow { }); workDaysButton.addActionListener(e -> { if (workingDaysWindow == null) { - this.workingDaysWindow = new WorkingDaysWindow(workingDayRepository, time, 7d); + this.workingDaysWindow = new WorkingDaysWindow(workingDayRepository, time, 7d, allowOnlyBasicFeaturesProperty.getValue()); } workingDaysWindow.setVisible(true); }); activitiesButton.addActionListener(e -> { if (activitiesWindow == null) { - this.activitiesWindow = new ActivitiesWindow(this.activityRepository, time, timeCalcConfiguration); + this.activitiesWindow = new ActivitiesWindow(this.activityRepository, time, + timeCalcConfiguration); } activitiesWindow.setVisible(true); }); - configButton.addActionListener(e -> { - if (configWindow == null) { - this.configWindow = new ConfigWindow(timeCalcConfiguration); - } - configWindow.setVisible(true); - configWindow.setLocationRelativeTo(this); - configWindow.setLocation(100, 100); - }); - helpButton.addActionListener(e -> { if (helpWindow == null) { this.helpWindow = new HelpWindow(); @@ -690,7 +734,8 @@ public class MainWindow extends TWindow { .bindTo(timeCalcConfiguration.batteryLabelVisibleProperty); battery.blinkingIfCriticalLowVisibleProperty .bindTo(timeCalcConfiguration.batteryQuarterIconVisibleProperty); - battery.quarterIconVisibleProperty.bindTo(timeCalcConfiguration.batteryQuarterIconVisibleProperty); + battery.quarterIconVisibleProperty.bindTo( + timeCalcConfiguration.batteryQuarterIconVisibleProperty); switch (battery.getName()) { case MinuteBattery.MINUTE: battery.visibleProperty @@ -952,8 +997,28 @@ public class MainWindow extends TWindow { }).start(); + if(allowOnlyBasicFeaturesProperty.getValue() && !FileConstants.BASIC_TXT.exists()) { + String msg = + "You deleted the file " + FileConstants.BASIC_TXT + + ", extended features are disabled until the next stop and start of this application. Please, stop and start this application to enable extended features."; + Utils.showNotification(msg, 30000); + } + if(allowOnlyBasicFeaturesProperty.getValue()) { + String msg = "Warning: " + "You disabled the extended features of this application. Only the basic features are enabled. To enable the extended features, please: 1. stop this application 2. delete manually this file: " + FileConstants.BASIC_TXT.getAbsolutePath() + " 3. start this application again."; + Utils.showNotification(msg, 30000, 200); + } + while (true) { + if(allowOnlyBasicFeaturesProperty.getValue()) { + if(timeCalcConfiguration.batteryDayVisibleProperty.isDisabled()) { + timeCalcConfiguration.batteryDayVisibleProperty.enable(); + } + + if(timeCalcConfiguration.batteryWeekVisibleProperty.isDisabled()) { + timeCalcConfiguration.batteryDayVisibleProperty.enable(); + } + } if (Math.random() > 0.99) { File dbFileBackup = new File( FileConstants.DB_FILE.getAbsolutePath() + ".backup." diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/WorkingDaysWindow.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/WorkingDaysWindow.java index b5a237b..81ebfa5 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/WorkingDaysWindow.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/WorkingDaysWindow.java @@ -61,6 +61,7 @@ public class WorkingDaysWindow extends TWindow { private final TCheckBox enableMa14; private final TCheckBox enableMa28; private final TCheckBox enableMa56; + private final boolean extendedFeaturesAreDisabled; private ArrivalChart arrivalChart; private JTable table = null; @@ -70,12 +71,12 @@ public class WorkingDaysWindow extends TWindow { private InvalidationListener invalidationHeightListener; public WorkingDaysWindow(WorkingDayRepositoryApi workingDayRepository, - Time time, double target) { - + Time time, double target, boolean extendedFeaturesAreDisabled) { setTitle("Work Days"); this.workingDayRepository = workingDayRepository; this.time = time; this.target = target; + this.extendedFeaturesAreDisabled = extendedFeaturesAreDisabled; int year = time.yearProperty.getValue(); this.setLayout(null); @@ -530,7 +531,9 @@ public class WorkingDaysWindow extends TWindow { this.widthProperty.addListener(invalidationWidthListener); this.heightProperty.addListener(invalidationHeightListener); arrivalChart.setBounds(bounds); - tp.add(arrivalChart, "Chart"); + if(!extendedFeaturesAreDisabled) { + tp.add(arrivalChart, "Chart"); + } tp.switchTo(currentTitle); arrivalChart.widthProperty.setValue(tp.getWidth() - 30); arrivalChart.heightProperty.setValue(tp.getHeight() - 10); diff --git a/modules/time-calc-app/src/main/resources/help/Readme.md b/modules/time-calc-app/src/main/resources/help/Readme.md index 7a57fbe..b3da12e 100644 --- a/modules/time-calc-app/src/main/resources/help/Readme.md +++ b/modules/time-calc-app/src/main/resources/help/Readme.md @@ -186,6 +186,7 @@ Smileys can be colored or white-black (can be set in configuration) * COMMA - Switch between foreward and backward speed * T - Enable or disable floating speed * D - Reset custom time values to the real time +* O - Disable many features, let enable only the basic features of "Time Calc" application. * SHIFT + A - Increase arrival time * CTRL + A - Decrease arrival time * SHIFT + O - Increase overtime