├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── build_linux.yml │ ├── build_mac.yml │ ├── build_windows.yml │ └── test.yml ├── .gitignore ├── .gitmodules ├── .idea ├── .gitignore ├── compiler.xml ├── dataSources.xml ├── encodings.xml ├── jarRepositories.xml ├── misc.xml ├── modules.xml ├── runConfigurations │ ├── EmbedControlApp.xml │ ├── EmbeddedJavaDemoApp.xml │ ├── TcMenuDesigner_IntTests.xml │ ├── TcMenuDesigner_Single_Test.xml │ ├── TcMenuDesigner_Tests.xml │ ├── TcMenu_Designer_UI.xml │ └── tcMenuJavaAPI_Tests.xml ├── uiDesigner.xml └── vcs.xml ├── FUNDING.yml ├── LICENSE ├── README.md ├── embedCONTROLCore ├── README.md ├── pom.xml └── src │ ├── main │ ├── java │ │ ├── com │ │ │ └── thecoderscorner │ │ │ │ └── embedcontrol │ │ │ │ ├── core │ │ │ │ ├── controlmgr │ │ │ │ │ ├── BaseBoolEditorComponent.java │ │ │ │ │ ├── BaseEditorComponent.java │ │ │ │ │ ├── BaseTextEditorComponent.java │ │ │ │ │ ├── BaseUpDownIntEditorComponent.java │ │ │ │ │ ├── ComponentPositioning.java │ │ │ │ │ ├── ComponentSettings.java │ │ │ │ │ ├── ComponentSettingsBuilder.java │ │ │ │ │ ├── ControlType.java │ │ │ │ │ ├── EditorComponent.java │ │ │ │ │ ├── MenuComponentControl.java │ │ │ │ │ ├── MenuEditorFactory.java │ │ │ │ │ ├── MenuGridComponent.java │ │ │ │ │ ├── NavigationManager.java │ │ │ │ │ ├── PanelPresentable.java │ │ │ │ │ ├── RedrawingMode.java │ │ │ │ │ ├── ThreadMarshaller.java │ │ │ │ │ └── color │ │ │ │ │ │ ├── ConditionalColoring.java │ │ │ │ │ │ ├── ControlColor.java │ │ │ │ │ │ └── NullConditionalColoring.java │ │ │ │ ├── creators │ │ │ │ │ ├── ConnectionCreator.java │ │ │ │ │ ├── ManualLanConnectionCreator.java │ │ │ │ │ ├── RemotePanelDisplayable.java │ │ │ │ │ ├── Rs232ConnectionCreator.java │ │ │ │ │ └── SimulatorConnectionCreator.java │ │ │ │ ├── rs232 │ │ │ │ │ ├── Rs232ControllerBuilder.java │ │ │ │ │ ├── Rs232RemoteConnector.java │ │ │ │ │ └── Rs232SerialFactory.java │ │ │ │ ├── serial │ │ │ │ │ ├── PlatformSerialFactory.java │ │ │ │ │ ├── SerialPortInfo.java │ │ │ │ │ └── SerialPortType.java │ │ │ │ ├── service │ │ │ │ │ ├── AppDataStore.java │ │ │ │ │ ├── CoreControlAppConfig.java │ │ │ │ │ ├── DatabaseAppDataStore.java │ │ │ │ │ ├── GlobalSettings.java │ │ │ │ │ ├── TcMenuPersistedConnection.java │ │ │ │ │ ├── TcPreferencesColor.java │ │ │ │ │ └── TcPreferencesPersistence.java │ │ │ │ ├── simulator │ │ │ │ │ └── SimulatedRemoteConnection.java │ │ │ │ └── util │ │ │ │ │ ├── BaseMenuConfig.java │ │ │ │ │ ├── DataException.java │ │ │ │ │ ├── FieldMapping.java │ │ │ │ │ ├── FieldType.java │ │ │ │ │ ├── MenuAppVersion.java │ │ │ │ │ ├── ProvideStore.java │ │ │ │ │ ├── ResultSetConsumer.java │ │ │ │ │ ├── StringHelper.java │ │ │ │ │ ├── TableMapping.java │ │ │ │ │ ├── TcApiDefinitions.java │ │ │ │ │ ├── TcComponent.java │ │ │ │ │ └── TccDatabaseUtilities.java │ │ │ │ ├── customization │ │ │ │ ├── ApplicationThemeManager.java │ │ │ │ ├── ColorCustomizable.java │ │ │ │ ├── FontInformation.java │ │ │ │ ├── GlobalColorCustomizable.java │ │ │ │ ├── InvalidItemChangeException.java │ │ │ │ ├── MenuFormItem.java │ │ │ │ ├── MenuItemFormItem.java │ │ │ │ ├── MenuItemStore.java │ │ │ │ ├── NamedColorCustomizable.java │ │ │ │ ├── SpaceFormItem.java │ │ │ │ ├── TextFormItem.java │ │ │ │ └── customdraw │ │ │ │ │ ├── BooleanCustomDrawingConfiguration.java │ │ │ │ │ ├── CustomDrawablesSelectionController.java │ │ │ │ │ ├── CustomDrawingConfiguration.java │ │ │ │ │ ├── EditCustomDrawablesController.java │ │ │ │ │ ├── NumberCustomDrawingConfiguration.java │ │ │ │ │ ├── SelectCustomDrawablesPresentable.java │ │ │ │ │ └── StringCustomDrawingConfiguration.java │ │ │ │ └── jfx │ │ │ │ └── controlmgr │ │ │ │ ├── AnalogMeterComponent.java │ │ │ │ ├── BoolButtonEditorComponent.java │ │ │ │ ├── CanvasDrawableContext.java │ │ │ │ ├── HorizontalSliderAnalogComponent.java │ │ │ │ ├── IntegerUpDownEditorComponent.java │ │ │ │ ├── JfxMenuEditorFactory.java │ │ │ │ ├── JfxMenuPresentable.java │ │ │ │ ├── JfxNavigationHeader.java │ │ │ │ ├── JfxNavigationManager.java │ │ │ │ ├── JfxTextEditorComponentBase.java │ │ │ │ ├── ListEditorComponent.java │ │ │ │ ├── MenuSelectButtonEditorComponent.java │ │ │ │ ├── ResizableCanvas.java │ │ │ │ ├── SafeNavigator.java │ │ │ │ ├── ScrollUpDownEditorComponent.java │ │ │ │ ├── TextFieldEditorComponent.java │ │ │ │ ├── TitleWidget.java │ │ │ │ ├── TitleWidgetListener.java │ │ │ │ ├── UpDownEditorComponentBase.java │ │ │ │ ├── UpdatablePanel.java │ │ │ │ ├── panels │ │ │ │ ├── AddAuthEntryController.java │ │ │ │ ├── AuthIoTMonitorController.java │ │ │ │ ├── AuthIoTMonitorPresentable.java │ │ │ │ ├── BaseCustomMenuPanel.java │ │ │ │ ├── BaseDialogSupport.java │ │ │ │ ├── ColorSettingsController.java │ │ │ │ ├── ColorSettingsPresentable.java │ │ │ │ └── NewColorSetDialogController.java │ │ │ │ └── texted │ │ │ │ ├── DateFieldEditHandler.java │ │ │ │ ├── FieldEditHandler.java │ │ │ │ ├── RgbFieldEditHandler.java │ │ │ │ ├── TextFieldEditHandler.java │ │ │ │ └── TimeFieldEditHandler.java │ │ └── module-info.java │ └── resources │ │ ├── core_fxml │ │ ├── addAuthEntry.fxml │ │ ├── authIoTMonitor.fxml │ │ ├── customDrawingSelection.fxml │ │ ├── editFormComponent.fxml │ │ ├── formCustomDrawingChoices.fxml │ │ ├── formCustomDrawingEditor.fxml │ │ ├── formEditor.fxml │ │ ├── formEditorProperties.fxml │ │ ├── generalSettings.fxml │ │ ├── newColorSetDialog.fxml │ │ └── simui-styles.css │ │ ├── ec_lang │ │ ├── coreLanguage.properties │ │ └── coreLanguage_fr.properties │ │ └── img-core │ │ ├── con-fail.png │ │ ├── green-led-icon.png │ │ ├── layout-off.png │ │ ├── layout-on.png │ │ ├── orange-led-icon.png │ │ ├── red-led-icon.png │ │ ├── save-icon.png │ │ ├── settings-cog.png │ │ ├── wifi-fair.png │ │ ├── wifi-full.png │ │ ├── wifi-low.png │ │ └── wifi-poor.png │ └── test │ ├── java │ └── com │ │ └── thecoderscorner │ │ └── embedcontrol │ │ ├── core │ │ └── util │ │ │ ├── BaseMenuConfigTest.java │ │ │ ├── PersistenceTestObj.java │ │ │ └── TccDatabaseUtilitiesTest.java │ │ └── customization │ │ ├── MenuFormItemTest.java │ │ └── MenuItemStoreTest.java │ └── resources │ ├── unittest_app.properties │ └── unittest_app_dev.properties ├── tcMenuGenerator ├── README.md ├── menuEditorUI.iml ├── pom.xml ├── scripts │ ├── buildTcMenuWin.cmd │ ├── designerscript.iss │ ├── i18n-readme.md │ ├── packager-all-platforms.md │ ├── tcmenudev │ └── tcmenudev.bat └── src │ ├── it │ └── com │ │ └── thecoderscorner │ │ └── menu │ │ └── uitests │ │ ├── AboutDialogTestCases.java │ │ ├── AddDialogTestCases.java │ │ ├── BackupManagerTest.java │ │ ├── EditEEPROMTestCase.java │ │ ├── EditFontTestCase.java │ │ ├── GenerateCodeDialogTest.java │ │ ├── IoExpanderDialogTestCases.java │ │ ├── MenuEditorTestCases.java │ │ ├── MenuInMenuEditorTestCases.java │ │ ├── NewProjectDialogTestCases.java │ │ ├── RomLayoutDialogTestCases.java │ │ ├── TccProjectWatcherImplTest.java │ │ ├── UICodePluginItemMatcher.java │ │ ├── UIColorPaletteControlUnitTest.java │ │ └── uimenuitem │ │ ├── UIActionItemAndCoreTest.java │ │ ├── UIAnalogMenuItemTest.java │ │ ├── UIBooleanMenuItemTest.java │ │ ├── UIEnumMenuItemTest.java │ │ ├── UILargeNumberItemTest.java │ │ ├── UIMenuItemTestBase.java │ │ ├── UIRemoteAndFloatMenuItemTest.java │ │ ├── UIRgbAndScrollEditorTest.java │ │ ├── UIRuntimeListMenuItemTest.java │ │ └── UITextMenuItemTest.java │ ├── main │ ├── assembly │ │ └── zipUpPlugins.xml │ ├── deploy │ │ └── emf_schema.json │ ├── java │ │ ├── com │ │ │ └── thecoderscorner │ │ │ │ └── menu │ │ │ │ └── editorui │ │ │ │ ├── MenuEditorApp.java │ │ │ │ ├── MenuEditorContext.java │ │ │ │ ├── cli │ │ │ │ ├── ApiTestCommand.java │ │ │ │ ├── CliVersionProvider.java │ │ │ │ ├── CodeGeneratorCommand.java │ │ │ │ ├── CodeVerificationCommand.java │ │ │ │ ├── ConfigureI18nCommand.java │ │ │ │ ├── ConvertExtAsciiUtf8Command.java │ │ │ │ ├── CreateItemCommand.java │ │ │ │ ├── CreateProjectCommand.java │ │ │ │ ├── DeleteItemCommand.java │ │ │ │ ├── GetConfigCommand.java │ │ │ │ ├── ListPlatformsCommand.java │ │ │ │ ├── OnlineHelpCommand.java │ │ │ │ ├── SetConfigCommand.java │ │ │ │ ├── StartUICommand.java │ │ │ │ ├── TcMenuDesignerCmd.java │ │ │ │ ├── VersionCommand.java │ │ │ │ └── WrapWebServerFilesCommand.java │ │ │ │ ├── controller │ │ │ │ ├── AboutController.java │ │ │ │ ├── AddFlashRemoteController.java │ │ │ │ ├── ChooseAuthenticatorController.java │ │ │ │ ├── ChooseFontController.java │ │ │ │ ├── ChooseIoExpanderController.java │ │ │ │ ├── ConfigureExpanderController.java │ │ │ │ ├── ConfigureLocalesController.java │ │ │ │ ├── EditFunctionController.java │ │ │ │ ├── EditMenuInMenuController.java │ │ │ │ ├── EditMenuInMenuItemController.java │ │ │ │ ├── EepromTypeSelectionController.java │ │ │ │ ├── GeneralSettingsController.java │ │ │ │ ├── MenuEditorController.java │ │ │ │ ├── NewItemController.java │ │ │ │ ├── NewProjectController.java │ │ │ │ ├── RegistrationController.java │ │ │ │ ├── RomLayoutController.java │ │ │ │ ├── SearchMenuItemController.java │ │ │ │ ├── SelectUnicodeRangesController.java │ │ │ │ ├── SplashScreenController.java │ │ │ │ └── fontsel │ │ │ │ │ ├── DefaultFontChoices.java │ │ │ │ │ ├── FontChoice.java │ │ │ │ │ └── FontType.java │ │ │ │ ├── dialog │ │ │ │ ├── AboutDialog.java │ │ │ │ ├── AddFlashRemoteDialog.java │ │ │ │ ├── AppInformationPanel.java │ │ │ │ ├── BaseDialogSupport.java │ │ │ │ ├── ChooseFontDialog.java │ │ │ │ ├── ChooseIoExpanderDialog.java │ │ │ │ ├── ConfigureIoExpanderDialog.java │ │ │ │ ├── ConfigureLocalesDialog.java │ │ │ │ ├── EditCallbackFunctionDialog.java │ │ │ │ ├── EditMenuInMenuDialog.java │ │ │ │ ├── EditMenuInMenuItemDialog.java │ │ │ │ ├── GeneralSettingsDialog.java │ │ │ │ ├── NewItemDialog.java │ │ │ │ ├── NewProjectDialog.java │ │ │ │ ├── RomLayoutDialog.java │ │ │ │ ├── SearchMenuItemDialog.java │ │ │ │ ├── SelectAuthenticatorTypeDialog.java │ │ │ │ ├── SelectEepromTypeDialog.java │ │ │ │ ├── SelectUnicodeRangesDialog.java │ │ │ │ └── SplashScreenDialog.java │ │ │ │ ├── embed │ │ │ │ ├── AboutController.java │ │ │ │ ├── ConnectionPairingPresentable.java │ │ │ │ ├── EditConnectionDialog.java │ │ │ │ ├── EmbedControlContext.java │ │ │ │ ├── GeneralSettingsController.java │ │ │ │ ├── NewConnectionController.java │ │ │ │ ├── PairingController.java │ │ │ │ ├── RemoteConnectionPanel.java │ │ │ │ ├── RemoteMenuComponentControl.java │ │ │ │ ├── RemoteUiEmbedControlContext.java │ │ │ │ ├── SettingsPanelPresentable.java │ │ │ │ └── WaitingForConnectionPanel.java │ │ │ │ ├── generator │ │ │ │ ├── AppVersionDetector.java │ │ │ │ ├── CodeGeneratorOptions.java │ │ │ │ ├── CodeGeneratorOptionsBuilder.java │ │ │ │ ├── CodeGeneratorSupplier.java │ │ │ │ ├── GitHubAppVersionChecker.java │ │ │ │ ├── ProjectSaveLocation.java │ │ │ │ ├── applicability │ │ │ │ │ ├── AlwaysApplicable.java │ │ │ │ │ ├── CodeApplicability.java │ │ │ │ │ ├── EqualityApplicability.java │ │ │ │ │ ├── MatchesApplicability.java │ │ │ │ │ ├── NestedApplicability.java │ │ │ │ │ └── NeverApplicable.java │ │ │ │ ├── arduino │ │ │ │ │ ├── ArduinoGenerator.java │ │ │ │ │ ├── ArduinoLibraryInstaller.java │ │ │ │ │ ├── ArduinoSketchFileAdjuster.java │ │ │ │ │ ├── CallbackRequirement.java │ │ │ │ │ └── MenuItemToEmbeddedGenerator.java │ │ │ │ ├── core │ │ │ │ │ ├── BuildStructInitializer.java │ │ │ │ │ ├── CodeConversionContext.java │ │ │ │ │ ├── CodeGenerator.java │ │ │ │ │ ├── CodeVariableCppExtractor.java │ │ │ │ │ ├── CodeVariableExtractor.java │ │ │ │ │ ├── CoreCodeGenerator.java │ │ │ │ │ ├── CreatorProperty.java │ │ │ │ │ ├── HeaderDefinition.java │ │ │ │ │ ├── NameAndKey.java │ │ │ │ │ ├── PluginRequiredFileProcessor.java │ │ │ │ │ ├── SizeBasedEEPROMCodeCapable.java │ │ │ │ │ ├── SketchFileAdjuster.java │ │ │ │ │ ├── SubSystem.java │ │ │ │ │ ├── TcMenuConversionException.java │ │ │ │ │ └── VariableNameGenerator.java │ │ │ │ ├── ejava │ │ │ │ │ ├── EmbeddedJavaGenerator.java │ │ │ │ │ ├── EmbeddedJavaPluginCreator.java │ │ │ │ │ ├── EmbeddedJavaProject.java │ │ │ │ │ ├── GeneratedJavaField.java │ │ │ │ │ ├── GeneratedJavaMethod.java │ │ │ │ │ ├── GeneratedStatement.java │ │ │ │ │ ├── JavaClassBuilder.java │ │ │ │ │ ├── JavaCodeGeneratorCapableWrapper.java │ │ │ │ │ ├── ModuleFilePatcher.java │ │ │ │ │ └── RegularStringStatement.java │ │ │ │ ├── mbed │ │ │ │ │ ├── MbedGenerator.java │ │ │ │ │ └── MbedSketchFileAdjuster.java │ │ │ │ ├── parameters │ │ │ │ │ ├── AuthenticatorDefinition.java │ │ │ │ │ ├── CodeGeneratorCapable.java │ │ │ │ │ ├── CodeParameter.java │ │ │ │ │ ├── EepromDefinition.java │ │ │ │ │ ├── FontCodeParameter.java │ │ │ │ │ ├── FontDefinition.java │ │ │ │ │ ├── IoExpanderCodeParameter.java │ │ │ │ │ ├── IoExpanderDefinition.java │ │ │ │ │ ├── IoExpanderDefinitionCollection.java │ │ │ │ │ ├── LambdaCodeParameter.java │ │ │ │ │ ├── LambdaDefinition.java │ │ │ │ │ ├── MenuInMenuCollection.java │ │ │ │ │ ├── MenuInMenuDefinition.java │ │ │ │ │ ├── ReferenceCodeParameter.java │ │ │ │ │ ├── auth │ │ │ │ │ │ ├── EepromAuthenticatorDefinition.java │ │ │ │ │ │ ├── NoAuthenticatorDefinition.java │ │ │ │ │ │ └── ReadOnlyAuthenticatorDefinition.java │ │ │ │ │ ├── eeprom │ │ │ │ │ │ ├── AVREepromDefinition.java │ │ │ │ │ │ ├── ArduinoClassEepromDefinition.java │ │ │ │ │ │ ├── At24EepromDefinition.java │ │ │ │ │ │ ├── BspStm32EepromDefinition.java │ │ │ │ │ │ └── NoEepromDefinition.java │ │ │ │ │ └── expander │ │ │ │ │ │ ├── Aw9523DeviceExpander.java │ │ │ │ │ │ ├── CustomDeviceExpander.java │ │ │ │ │ │ ├── InternalDeviceExpander.java │ │ │ │ │ │ ├── Mcp23017DeviceExpander.java │ │ │ │ │ │ ├── Pcf8574DeviceExpander.java │ │ │ │ │ │ └── Pcf8575DeviceExpander.java │ │ │ │ ├── plugin │ │ │ │ │ ├── CodePluginConfig.java │ │ │ │ │ ├── CodePluginItem.java │ │ │ │ │ ├── CodePluginManager.java │ │ │ │ │ ├── CodeReplacement.java │ │ │ │ │ ├── CodeVariable.java │ │ │ │ │ ├── DefaultXmlPluginLoader.java │ │ │ │ │ ├── EmbeddedPlatform.java │ │ │ │ │ ├── EmbeddedPlatforms.java │ │ │ │ │ ├── FunctionDefinition.java │ │ │ │ │ ├── LibraryUpgradeException.java │ │ │ │ │ ├── PluginEmbeddedPlatformsImpl.java │ │ │ │ │ ├── RequiredSourceFile.java │ │ │ │ │ ├── RequiredZipFile.java │ │ │ │ │ └── VariableDefinitionMode.java │ │ │ │ ├── ui │ │ │ │ │ ├── CodeGenLoggingController.java │ │ │ │ │ ├── CodeGeneratorRunner.java │ │ │ │ │ ├── DefaultCodeGeneratorRunner.java │ │ │ │ │ ├── GenerateCodeDialog.java │ │ │ │ │ ├── LogLine.java │ │ │ │ │ └── UICodePluginItem.java │ │ │ │ ├── util │ │ │ │ │ └── LibraryStatus.java │ │ │ │ └── validation │ │ │ │ │ ├── BooleanPropertyValidationRules.java │ │ │ │ │ ├── CannedPropertyValidators.java │ │ │ │ │ ├── ChoiceDescription.java │ │ │ │ │ ├── ChoicesPropertyValidationRules.java │ │ │ │ │ ├── FontPropertyValidationRules.java │ │ │ │ │ ├── IntegerPropertyValidationRules.java │ │ │ │ │ ├── IoExpanderPropertyValidationRules.java │ │ │ │ │ ├── MenuItemValidationRules.java │ │ │ │ │ ├── PinPropertyValidationRules.java │ │ │ │ │ ├── PropertyValidationRules.java │ │ │ │ │ └── StringPropertyValidationRules.java │ │ │ │ ├── gfxui │ │ │ │ ├── CreateBitmapWidgetController.java │ │ │ │ ├── CreateBitmapWidgetToolDialog.java │ │ │ │ ├── CreateFontUtilityController.java │ │ │ │ ├── CreateFontUtilityDialog.java │ │ │ │ ├── LoadedImage.java │ │ │ │ ├── NativeFreeFontGlyphGenerator.java │ │ │ │ ├── NoFontGlyphGenerator.java │ │ │ │ ├── font │ │ │ │ │ ├── EmbeddedFont.java │ │ │ │ │ ├── EmbeddedFontExporter.java │ │ │ │ │ ├── EmbeddedFontGlyph.java │ │ │ │ │ ├── FontCreationController.java │ │ │ │ │ ├── FontEncoder.java │ │ │ │ │ ├── FontGlyphGenerator.java │ │ │ │ │ └── UnicodeBlockMapping.java │ │ │ │ ├── imgedit │ │ │ │ │ ├── ImageDrawingGrid.java │ │ │ │ │ ├── SimpleImageEditor.java │ │ │ │ │ └── SimpleImagePane.java │ │ │ │ └── pixmgr │ │ │ │ │ ├── BitmapImportPopup.java │ │ │ │ │ ├── BmpDataManager.java │ │ │ │ │ ├── NBppBitPacker.java │ │ │ │ │ ├── NativeBitmapExporter.java │ │ │ │ │ ├── NativeBmpBitPacker.java │ │ │ │ │ ├── NativePixelFormat.java │ │ │ │ │ ├── SwatchPaletteControl.java │ │ │ │ │ └── UIColorPaletteControl.java │ │ │ │ ├── project │ │ │ │ ├── BulkRemoveItemChange.java │ │ │ │ ├── CurrentEditorProject.java │ │ │ │ ├── EditedItemChange.java │ │ │ │ ├── FileBasedProjectPersistor.java │ │ │ │ ├── ItemMovedChangeCommand.java │ │ │ │ ├── JsonCodeGeneratorOptionsSerialisation.java │ │ │ │ ├── MenuIdChooser.java │ │ │ │ ├── MenuIdChooserImpl.java │ │ │ │ ├── MenuItemChange.java │ │ │ │ ├── MenuItemTreeCell.java │ │ │ │ ├── MenuTreeWithCodeOptions.java │ │ │ │ ├── PastedItemChange.java │ │ │ │ ├── PersistableStringList.java │ │ │ │ ├── PersistedProject.java │ │ │ │ ├── ProjectPersistor.java │ │ │ │ ├── TccProjectWatcher.java │ │ │ │ └── TccProjectWatcherImpl.java │ │ │ │ ├── simui │ │ │ │ └── SimulatorUI.java │ │ │ │ ├── storage │ │ │ │ ├── ArduinoDirectoryChangeListener.java │ │ │ │ ├── ConfigurationStorage.java │ │ │ │ ├── JdbcTcMenuConfigurationStore.java │ │ │ │ ├── MenuEditorConfig.java │ │ │ │ ├── PrefsConfigurationStorage.java │ │ │ │ ├── RecentProject.java │ │ │ │ ├── TcConfigEntry.java │ │ │ │ └── TcConfigEntryType.java │ │ │ │ ├── uimodel │ │ │ │ ├── CurrentProjectEditorUI.java │ │ │ │ ├── CurrentProjectEditorUIImpl.java │ │ │ │ ├── TextFormatterUtils.java │ │ │ │ ├── UIActionMenuItem.java │ │ │ │ ├── UIAnalogMenuItem.java │ │ │ │ ├── UIBooleanMenuItem.java │ │ │ │ ├── UICustomMenuItem.java │ │ │ │ ├── UIEnumMenuItem.java │ │ │ │ ├── UIFloatMenuItem.java │ │ │ │ ├── UILargeNumberMenuItem.java │ │ │ │ ├── UIMenuItem.java │ │ │ │ ├── UIRgb32MenuItem.java │ │ │ │ ├── UIRuntimeListMenuItem.java │ │ │ │ ├── UIScrollChoiceMenuItem.java │ │ │ │ ├── UISubMenuItem.java │ │ │ │ ├── UITextMenuItem.java │ │ │ │ └── UrlsForDocumentation.java │ │ │ │ └── util │ │ │ │ ├── AlertUtil.java │ │ │ │ ├── BackupManager.java │ │ │ │ ├── EnumWithStringValue.java │ │ │ │ ├── IHttpClient.java │ │ │ │ ├── SafeNavigator.java │ │ │ │ ├── SimpleHttpClient.java │ │ │ │ ├── StringHelper.java │ │ │ │ ├── TcNativeLibrary.java │ │ │ │ ├── UpdateProgressGlassPane.java │ │ │ │ └── ZipUtils.java │ │ └── module-info.java │ └── resources │ │ ├── ecui │ │ ├── form-style.css │ │ ├── formManager.fxml │ │ ├── newConnection.fxml │ │ ├── pairingDialog.fxml │ │ └── waitingForConnection.fxml │ │ ├── fximg │ │ ├── MyIcon.icns │ │ ├── embedCONTROL.ico │ │ ├── ethernet-connection.jpg │ │ ├── icnsSrc │ │ │ ├── Icon1024.png │ │ │ ├── embedCONTROL-icon.xcf │ │ │ └── iconbuild.txt │ │ ├── large_icon.png │ │ └── pairingExample.jpg │ │ ├── i18n │ │ ├── TcMenuUIText.properties │ │ ├── TcMenuUIText_cs.properties │ │ ├── TcMenuUIText_fr.properties │ │ └── TcMenuUIText_sk.properties │ │ ├── img │ │ ├── AppIcon.icns │ │ ├── darkModeSnap.png │ │ ├── disk-save.png │ │ ├── edit-pencil.png │ │ ├── green-tick.png │ │ ├── lightModeSnap.png │ │ ├── logo.png │ │ ├── menu-icon-large.png │ │ ├── menu-icon-sm.png │ │ ├── menu-icon.png │ │ ├── red-cross.png │ │ ├── tcMenuDesigner-install.ico │ │ ├── tcMenuDesigner.ico │ │ ├── tree-add.png │ │ ├── tree-copy.png │ │ ├── tree-cut.png │ │ ├── tree-down.png │ │ ├── tree-paste.png │ │ ├── tree-remove.png │ │ ├── tree-search.png │ │ ├── tree-up.png │ │ └── tree-wand.png │ │ ├── logconf │ │ ├── dev-logging.properties │ │ └── logging.properties │ │ ├── packaged-plugins │ │ ├── embeddedJavaUI-snap.zip │ │ ├── empty-project.emf │ │ └── packaged-readme.md │ │ ├── ui │ │ ├── ImageToNativeBitmapConverter.fxml │ │ ├── aboutDialog.fxml │ │ ├── addNewFlashRemote.fxml │ │ ├── authenticationSelectionDialog.fxml │ │ ├── chooseIoExpander.fxml │ │ ├── configureIoExpander.fxml │ │ ├── configureLocales.fxml │ │ ├── createFontPanel.fxml │ │ ├── createNewProject.fxml │ │ ├── editFunctionCallback.fxml │ │ ├── eepromTypeSelectionDialog.fxml │ │ ├── fontSelectionDialog.fxml │ │ ├── generatorLog.fxml │ │ ├── menuEditor.fxml │ │ ├── menuInMenuEditor.fxml │ │ ├── menuInMenuItemEditor.fxml │ │ ├── newItemDialog.fxml │ │ ├── romLayoutDialog.fxml │ │ ├── searchItems.fxml │ │ ├── selectUnicodeRanges.fxml │ │ ├── settingsDialog.fxml │ │ ├── splashScreen.fxml │ │ └── tcmenu-extras.css │ │ └── version.properties │ └── test │ ├── java │ └── com │ │ └── thecoderscorner │ │ └── menu │ │ └── editorui │ │ ├── generator │ │ ├── OnlineLibraryVersionDetectorTest.java │ │ ├── arduino │ │ │ ├── ArduinoDirectoryStructureHelper.java │ │ │ ├── ArduinoGeneratorTest.java │ │ │ ├── ArduinoItemGeneratorTest.java │ │ │ ├── ArduinoLibraryInstallerTest.java │ │ │ └── ArduinoSketchFileAdjusterTest.java │ │ ├── core │ │ │ ├── CodeVariableCppExtractorTest.java │ │ │ ├── TcMenuConversionExceptionTest.java │ │ │ └── VariableNameGeneratorTest.java │ │ ├── ejava │ │ │ ├── EmbeddedJavaGeneratorFileData.java │ │ │ ├── EmbeddedJavaGeneratorTest.java │ │ │ ├── GeneratedStatementTest.java │ │ │ ├── JavaClassBuilderTest.java │ │ │ └── JavaCodeGeneratorCapableWrapperTest.java │ │ ├── font │ │ │ └── EmbeddedFontExporterTest.java │ │ ├── mbed │ │ │ └── MbedGeneratorTest.java │ │ ├── parameters │ │ │ ├── AuthenticatorDefinitionTest.java │ │ │ ├── CodeParameterTest.java │ │ │ ├── EepromDefinitionTest.java │ │ │ ├── FontDefinitionTest.java │ │ │ ├── IoExpanderDefinitionTest.java │ │ │ └── MenuInMenuCollectionTest.java │ │ ├── plugin │ │ │ ├── DefaultXmlPluginLoaderTest.java │ │ │ └── PluginEmbeddedPlatformsImplTest.java │ │ └── validation │ │ │ └── CannedPropertyValidatorsTest.java │ │ ├── gfxui │ │ ├── font │ │ │ └── EmbeddedFontTest.java │ │ └── pixmgr │ │ │ ├── NBppBitPackerTest.java │ │ │ ├── NativeBitmapExporterTest.java │ │ │ └── NativeBmpBitPackerTest.java │ │ ├── project │ │ ├── CurrentEditorProjectTest.java │ │ ├── FileBasedProjectPersistorTest.java │ │ └── MenuIdChooserImplTest.java │ │ └── util │ │ ├── MenuItemDataSets.java │ │ ├── StringHelperTest.java │ │ └── TestUtils.java │ └── resources │ ├── cannedProject │ └── unitTestProject.emf │ ├── generator │ ├── template.cpp │ ├── template.h │ ├── template32.cpp │ ├── template32.h │ ├── templateMbed.cpp │ └── templateMbed.h │ ├── gfxui │ └── opensansBold12.xml │ └── plugins │ ├── TestPlugin.xml │ ├── TestPluginVersionAllowed.xml │ ├── TestPluginVersionTooLow.xml │ ├── java-test-plugin.xml │ ├── joystick.jpg │ ├── tcmenu-plugin-small.xml │ ├── tcmenu-plugin.xml │ ├── test-remote-item-plugin.xml │ └── test-theme-item-plugin.xml ├── tcMenuJavaApi ├── pom.xml └── src │ ├── main │ ├── java │ │ ├── com │ │ │ └── thecoderscorner │ │ │ │ └── menu │ │ │ │ ├── auth │ │ │ │ ├── MenuAuthenticator.java │ │ │ │ ├── PreDefinedAuthenticator.java │ │ │ │ └── PropertiesAuthenticator.java │ │ │ │ ├── domain │ │ │ │ ├── ActionMenuItem.java │ │ │ │ ├── ActionMenuItemBuilder.java │ │ │ │ ├── AnalogMenuItem.java │ │ │ │ ├── AnalogMenuItemBuilder.java │ │ │ │ ├── BooleanMenuItem.java │ │ │ │ ├── BooleanMenuItemBuilder.java │ │ │ │ ├── CustomBuilderMenuItem.java │ │ │ │ ├── CustomBuilderMenuItemBuilder.java │ │ │ │ ├── EditItemType.java │ │ │ │ ├── EditableLargeNumberMenuItem.java │ │ │ │ ├── EditableLargeNumberMenuItemBuilder.java │ │ │ │ ├── EditableTextMenuItem.java │ │ │ │ ├── EditableTextMenuItemBuilder.java │ │ │ │ ├── EnumMenuItem.java │ │ │ │ ├── EnumMenuItemBuilder.java │ │ │ │ ├── FloatMenuItem.java │ │ │ │ ├── FloatMenuItemBuilder.java │ │ │ │ ├── MenuItem.java │ │ │ │ ├── MenuItemBuilder.java │ │ │ │ ├── Rgb32MenuItem.java │ │ │ │ ├── Rgb32MenuItemBuilder.java │ │ │ │ ├── RuntimeListMenuItem.java │ │ │ │ ├── RuntimeListMenuItemBuilder.java │ │ │ │ ├── ScrollChoiceMenuItem.java │ │ │ │ ├── ScrollChoiceMenuItemBuilder.java │ │ │ │ ├── SubMenuItem.java │ │ │ │ ├── SubMenuItemBuilder.java │ │ │ │ ├── state │ │ │ │ │ ├── AnyMenuState.java │ │ │ │ │ ├── BigDecimalMenuState.java │ │ │ │ │ ├── BooleanMenuState.java │ │ │ │ │ ├── CurrentScrollPosition.java │ │ │ │ │ ├── CurrentScrollPositionMenuState.java │ │ │ │ │ ├── FloatMenuState.java │ │ │ │ │ ├── IntegerMenuState.java │ │ │ │ │ ├── ListResponse.java │ │ │ │ │ ├── MenuState.java │ │ │ │ │ ├── MenuTree.java │ │ │ │ │ ├── PortableColor.java │ │ │ │ │ ├── PortableColorMenuState.java │ │ │ │ │ ├── StringListMenuState.java │ │ │ │ │ └── StringMenuState.java │ │ │ │ └── util │ │ │ │ │ ├── AbstractMenuItemVisitor.java │ │ │ │ │ ├── DomainFixtures.java │ │ │ │ │ ├── MenuItemFormatException.java │ │ │ │ │ ├── MenuItemFormatter.java │ │ │ │ │ ├── MenuItemHelper.java │ │ │ │ │ ├── MenuItemVisitor.java │ │ │ │ │ └── PortablePalette.java │ │ │ │ ├── mgr │ │ │ │ ├── DialogManager.java │ │ │ │ ├── DialogShowMode.java │ │ │ │ ├── EmptyDialogManager.java │ │ │ │ ├── MenuCallback.java │ │ │ │ ├── MenuInMenu.java │ │ │ │ ├── MenuManagerListener.java │ │ │ │ ├── MenuManagerServer.java │ │ │ │ ├── MenuTreeStructureChangeListener.java │ │ │ │ ├── NewServerConnectionListener.java │ │ │ │ ├── NoDialogFacilities.java │ │ │ │ ├── ScrollChoiceValueRetriever.java │ │ │ │ ├── ServerConnection.java │ │ │ │ ├── ServerConnectionManager.java │ │ │ │ └── ServerConnectionMode.java │ │ │ │ ├── persist │ │ │ │ ├── JsonMenuItemSerializer.java │ │ │ │ ├── LocaleMappingHandler.java │ │ │ │ ├── MenuStateSerialiser.java │ │ │ │ ├── NoLocaleEnabledLocalHandler.java │ │ │ │ ├── PersistedMenu.java │ │ │ │ ├── PropertiesLocaleEnabledHandler.java │ │ │ │ ├── PropertiesMenuStateSerialiser.java │ │ │ │ ├── ReleaseType.java │ │ │ │ ├── ResourceBundleMappingHandler.java │ │ │ │ ├── SafeBundleLoader.java │ │ │ │ ├── VersionInfo.java │ │ │ │ └── XMLDOMHelper.java │ │ │ │ └── remote │ │ │ │ ├── AuthStatus.java │ │ │ │ ├── ConnectMode.java │ │ │ │ ├── ConnectionChangeListener.java │ │ │ │ ├── ConnectorFactory.java │ │ │ │ ├── LocalIdentifier.java │ │ │ │ ├── MenuCommandProtocol.java │ │ │ │ ├── NamedDaemonThreadFactory.java │ │ │ │ ├── RemoteConnector.java │ │ │ │ ├── RemoteConnectorListener.java │ │ │ │ ├── RemoteControllerListener.java │ │ │ │ ├── RemoteDevice.java │ │ │ │ ├── RemoteInformation.java │ │ │ │ ├── RemoteMenuController.java │ │ │ │ ├── SharedStreamConnection.java │ │ │ │ ├── StreamRemoteConnector.java │ │ │ │ ├── commands │ │ │ │ ├── AckStatus.java │ │ │ │ ├── BootItemMenuCommand.java │ │ │ │ ├── CommandFactory.java │ │ │ │ ├── DialogMode.java │ │ │ │ ├── FormDataRequestCommand.java │ │ │ │ ├── FormDataResponseCommand.java │ │ │ │ ├── FormGetNamesRequestCommand.java │ │ │ │ ├── FormGetNamesResponseCommand.java │ │ │ │ ├── MenuAcknowledgementCommand.java │ │ │ │ ├── MenuActionBootCommand.java │ │ │ │ ├── MenuAnalogBootCommand.java │ │ │ │ ├── MenuBooleanBootCommand.java │ │ │ │ ├── MenuBootstrapCommand.java │ │ │ │ ├── MenuButtonType.java │ │ │ │ ├── MenuChangeCommand.java │ │ │ │ ├── MenuCommand.java │ │ │ │ ├── MenuCommandType.java │ │ │ │ ├── MenuDialogCommand.java │ │ │ │ ├── MenuEnumBootCommand.java │ │ │ │ ├── MenuFloatBootCommand.java │ │ │ │ ├── MenuHeartbeatCommand.java │ │ │ │ ├── MenuJoinCommand.java │ │ │ │ ├── MenuLargeNumBootCommand.java │ │ │ │ ├── MenuPairingCommand.java │ │ │ │ ├── MenuRgb32BootCommand.java │ │ │ │ ├── MenuRuntimeListBootCommand.java │ │ │ │ ├── MenuScrollChoiceBootCommand.java │ │ │ │ ├── MenuSubBootCommand.java │ │ │ │ └── MenuTextBootCommand.java │ │ │ │ ├── encryption │ │ │ │ ├── AESEncryptionHandlerFactory.java │ │ │ │ ├── AESProtocolEncryptionHandler.java │ │ │ │ ├── EncryptMode.java │ │ │ │ ├── EncryptionHandlerFactory.java │ │ │ │ ├── NoEncryptionHandlerFactory.java │ │ │ │ └── ProtocolEncryptionHandler.java │ │ │ │ ├── mgrclient │ │ │ │ ├── ClientBasedConnectionManager.java │ │ │ │ ├── SocketServerConnection.java │ │ │ │ └── SocketServerConnectionManager.java │ │ │ │ ├── protocol │ │ │ │ ├── ApiPlatform.java │ │ │ │ ├── CommandProtocol.java │ │ │ │ ├── ConfigurableProtocolConverter.java │ │ │ │ ├── CorrelationId.java │ │ │ │ ├── MessageField.java │ │ │ │ ├── PairingHelper.java │ │ │ │ ├── ProtocolHelper.java │ │ │ │ ├── ProtocolOutgoingMsgConverter.java │ │ │ │ ├── ProtocolUtil.java │ │ │ │ ├── RawProtocolIncomingMsgConverter.java │ │ │ │ ├── TagValMenuCommandProcessors.java │ │ │ │ ├── TagValMenuFields.java │ │ │ │ ├── TagValProtocolIncomingMsgConverter.java │ │ │ │ ├── TagValTextParser.java │ │ │ │ ├── TcProtocolException.java │ │ │ │ └── TcUnknownMessageException.java │ │ │ │ ├── socket │ │ │ │ ├── SocketBasedConnector.java │ │ │ │ ├── SocketClientRemoteConnector.java │ │ │ │ ├── SocketClientRemoteServer.java │ │ │ │ ├── SocketClientServerListener.java │ │ │ │ └── SocketControllerBuilder.java │ │ │ │ └── states │ │ │ │ ├── AwaitingBootstrapState.java │ │ │ │ ├── BaseMessageProcessingState.java │ │ │ │ ├── BootstrapInProgressState.java │ │ │ │ ├── ConnectionHasFailedState.java │ │ │ │ ├── ConnectionReadyState.java │ │ │ │ ├── JoinMessageArrivedState.java │ │ │ │ ├── NoOperationInitialState.java │ │ │ │ ├── PairingAuthFailedState.java │ │ │ │ ├── PairingAuthSuccessState.java │ │ │ │ ├── RemoteConnectorContext.java │ │ │ │ ├── RemoteConnectorState.java │ │ │ │ ├── SendPairingMessageState.java │ │ │ │ ├── SerialAwaitFirstMsgState.java │ │ │ │ ├── SocketAwaitJoinState.java │ │ │ │ └── StreamNotConnectedState.java │ │ └── module-info.java │ └── resources │ │ └── japi-version.properties │ └── test │ ├── java │ └── com │ │ └── thecoderscorner │ │ └── menu │ │ ├── auth │ │ └── PreDefinedAuthenticatorTest.java │ │ ├── domain │ │ ├── MenuItemTest.java │ │ ├── state │ │ │ ├── CurrentScrollPositionTest.java │ │ │ ├── ListResponseTest.java │ │ │ ├── MenuTreeTest.java │ │ │ └── PortableColorTest.java │ │ └── util │ │ │ ├── AbstractMenuItemVisitorTest.java │ │ │ ├── MenuItemFormatterTest.java │ │ │ ├── MenuItemHelperTest.java │ │ │ └── PortablePaletteTest.java │ │ ├── driver │ │ └── NativeDriverJavaClient.java │ │ ├── mgr │ │ ├── DialogManagerTest.java │ │ ├── MenuInMenuTest.java │ │ └── MenuManagerServerTest.java │ │ ├── persist │ │ ├── JsonMenuItemSerializerTest.java │ │ ├── NoLocaleHandlerTest.java │ │ ├── PropertiesMenuStateSerialiserTest.java │ │ ├── ResourceBundleMappingHandlerTest.java │ │ ├── SafeBundleLoaderTest.java │ │ ├── VersionInfoTest.java │ │ └── XMLDOMHelperTest.java │ │ └── remote │ │ ├── integration │ │ └── MenuServerSocketIntegrationTest.java │ │ └── protocol │ │ ├── BinaryDataCommand.java │ │ ├── CorrelationIdTest.java │ │ ├── SpannerCommand.java │ │ ├── TagValMenuCommandProtocolTest.java │ │ └── TagValTextParserTest.java │ └── resources │ ├── auth.properties │ └── testBundle │ ├── test.properties │ ├── test_fr.properties │ └── test_fr_CA.properties ├── tcMenuNative ├── .idea │ ├── .gitignore │ ├── editor.xml │ ├── fontGlyphGenerator.iml │ ├── misc.xml │ ├── modules.xml │ └── vcs.xml ├── CMakeLists.txt ├── FreeFontHandler.cpp ├── FreeFontHandler.h ├── README.md ├── fontTest │ ├── CMakeLists.txt │ └── main.cpp ├── library.cpp ├── library.h └── packaged │ ├── mac │ ├── libtcMenuNative.dylib │ └── macos.md │ ├── ubu │ └── libtcMenuNative.so │ └── win │ ├── freetype.lib │ ├── tcMenuNative.dll │ ├── tcMenuNative.lib │ └── windows.md ├── xmlPlugins ├── README.md ├── core-display │ ├── ArduinoTouchLibraryIntegration.xml │ ├── Images │ │ ├── DfRobotShield.jpg │ │ ├── adagfx-color.jpg │ │ ├── custom-display.jpg │ │ ├── embedded-java.png │ │ ├── esp8266.jpg │ │ ├── joystick.jpg │ │ ├── lcd-display.jpg │ │ ├── matrix-keyboard.jpg │ │ ├── no-display.png │ │ ├── oled-display.jpg │ │ ├── resistive-touch.jpg │ │ ├── rotary-encoder.jpg │ │ ├── ssd1306ascii.jpg │ │ ├── touch-pad-sensor.jpg │ │ ├── up-down-encoder.jpg │ │ └── user-button.jpg │ ├── adaArduinoSimpleBuilder.xml │ ├── adaGfxDisplay.xml │ ├── adaGfxDriver │ │ ├── tcMenuAdaFruitGfx.cpp │ │ ├── tcMenuAdaFruitGfx.h │ │ ├── tcMenuAdaFruitGfxMono.cpp │ │ └── tcMenuAdaFruitGfxMono.h │ ├── adaMbedOled.xml │ ├── adaTouchDriver │ │ └── tcMenuAdaTouchDriver.h │ ├── adafruitTrueCpp.xml │ ├── analogJoystickInput.xml │ ├── analogResistiveTouchScreen.xml │ ├── customDisplay.xml │ ├── customDrawable.xml │ ├── dfRobotJoystick.xml │ ├── dfRobotLcd.xml │ ├── emptyDrawable │ │ └── CustomDisplayDrawable.h │ ├── esp32TouchSensor.xml │ ├── fullLcd │ │ ├── tcMenuLiquidCrystal.cpp │ │ └── tcMenuLiquidCrystal.h │ ├── i18n │ │ ├── plugin-lang.properties │ │ ├── plugin-lang_cs.properties │ │ ├── plugin-lang_fr.properties │ │ └── plugin-lang_sk.properties │ ├── i2cLiquidCrystalDisplay.xml │ ├── liquidCrystalDisplay.xml │ ├── matrixKeyboard.xml │ ├── mbedStm32Bsp │ │ ├── BspUserSettings.h │ │ ├── tcMenuStChromaArt.cpp │ │ └── tcMenuStChromaArt.h │ ├── noDisplay.xml │ ├── noInput.xml │ ├── oneButtonSwitchesInput.xml │ ├── rotaryEncoderInput.xml │ ├── ssd1306AsciiSupport │ │ ├── ssd1306asciiRenderer.cpp │ │ └── ssd1306asciiRenderer.h │ ├── ssd1306asciiDisplay.xml │ ├── ssd1306asciiDisplayQuickStart.xml │ ├── stm32BspFrameBuffer.xml │ ├── tcmenu-plugin.xml │ ├── tftSpiDisplay.xml │ ├── tfteSpi │ │ ├── tcMenuTfteSpi.cpp │ │ └── tcMenuTfteSpi.h │ ├── twoButtonSwitchesInput.xml │ ├── u8g2Display.xml │ ├── u8g2Driver │ │ ├── tcMenuU8g2.cpp │ │ └── tcMenuU8g2.h │ ├── u8g2SimpleBuilder.xml │ ├── unoLcd │ │ ├── tcMenuLiquidCrystal.cpp │ │ └── tcMenuLiquidCrystal.h │ └── upDownSwitchesInput.xml ├── core-remote │ ├── Images │ │ ├── embedCONTROL.png │ │ ├── embedCONTROLJS.png │ │ ├── esp8266.jpg │ │ ├── ethernet-shield.jpg │ │ ├── mbed-ethernet.jpg │ │ ├── menu-in-menu.png │ │ ├── no-display.png │ │ ├── serial-connection.jpg │ │ └── simhub.jpg │ ├── clientRemoteEthernet.xml │ ├── ethernetSrc │ │ ├── ClientEthernetTransport.cpp │ │ ├── ClientEthernetTransport.h │ │ ├── EthernetTransport.cpp │ │ └── EthernetTransport.h │ ├── mbedEthernet │ │ ├── MBedEthernetTransport.cpp │ │ └── MBedEthernetTransport.h │ ├── noRemote.xml │ ├── remoteEthernet.xml │ ├── remoteMbedEthernet.xml │ ├── remoteSerial.xml │ ├── remoteSerialESP.xml │ ├── remoteStdio.xml │ ├── remoteWifiESP.xml │ ├── serialSrc │ │ ├── SerialTransport.cpp │ │ ├── SerialTransport.h │ │ ├── StdioTransport.cpp │ │ └── StdioTransport.h │ ├── simhub │ │ ├── SimhubConnector.cpp │ │ └── SimhubConnector.h │ ├── simhubConnector.xml │ └── tcmenu-plugin.xml ├── core-themes │ ├── CoolBlueModern.xml │ ├── CoolBlueModernBuilder.xml │ ├── CoolBlueTraditional.xml │ ├── CoolBlueTraditionalBuilder.xml │ ├── DarkModeModern.xml │ ├── DarkModeModernBuilder.xml │ ├── DarkModeTraditional.xml │ ├── DarkModeTraditionalBuilder.xml │ ├── Images │ │ ├── no-theme.png │ │ ├── theme-cool-blue-modern.jpg │ │ ├── theme-cool-blue-traditional.jpg │ │ ├── theme-dark-mode-modern.jpg │ │ ├── theme-dark-mode-traditional.jpg │ │ ├── theme-oled-bordered.jpg │ │ └── theme-oled-inverse.jpg │ ├── ManualTheme.xml │ ├── MonoBorderedTitle.xml │ ├── MonoBorderedTitleBuilder.xml │ ├── MonoInverseTitle.xml │ ├── MonoInverseTitleBuilder.xml │ ├── NoThemeSelected.xml │ ├── coolBlue │ │ ├── ThemeCoolBlueModern.h │ │ ├── ThemeCoolBlueModernBuilder.h │ │ ├── ThemeCoolBlueTraditional.h │ │ └── ThemeCoolBlueTraditionalBuilder.h │ ├── darkMode │ │ ├── ThemeDarkModeModern.h │ │ ├── ThemeDarkModeModernBuilder.h │ │ ├── ThemeDarkModeTraditional.h │ │ └── ThemeDarkModeTraditionalBuilder.h │ ├── i18n │ │ ├── plugin-lang.properties │ │ ├── plugin-lang_cs.properties │ │ ├── plugin-lang_fr.properties │ │ └── plugin-lang_sk.properties │ ├── monoThemes │ │ ├── ThemeMonoBordered.h │ │ ├── ThemeMonoBorderedBuilder.h │ │ ├── ThemeMonoInverse.h │ │ └── ThemeMonoInverseBuilder.h │ └── tcmenu-plugin.xml ├── examples │ ├── applicability-definitions.md │ ├── code-generator-and-plugins.md │ ├── example-plugin-item.xml │ ├── example-plugin.xml │ ├── plugin-definition-file.md │ └── plugin-item-file.md ├── tcmenu-plugin-item.xsd ├── tcmenu-plugin.xsd └── xmlPlugins.iml └── zMedia ├── design-menu-for-arduino.jpg ├── generate-code-for-your-platform.jpg ├── menu-on-lcd-avr.jpg ├── tcmenu-java-local-dev.md ├── theme-cool-blue-modern.jpg ├── theme-dark-mode-modern.jpg └── theme-oled-bordered.jpg /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | Please make sure this is an actual bug first, if not sure open a discussion. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior, if a UI issue please detail all steps and include an example project if needed. If a library issue provide whatever is needed in order for me to quickly identify the cause. 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots - optional** 20 | If applicable, add screenshots to help explain your problem. 21 | 22 | **Desktop UI issue (please complete the following information):** 23 | - OS: [e.g. macOS/Windows/Linux] 24 | - Version [e.g. Ventura/Win11] 25 | - Output of diagnostics from tcMenuDesigner 26 | - Designer Version and any other relevant details 27 | 28 | **Embedded environment - if applicable** 29 | Provide as much information as possible about the board configuration here. 30 | 31 | **Additional context - optional** 32 | Add any other context about the problem here. 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | push: 5 | pull_request: 6 | branches: [ "main" ] 7 | 8 | jobs: 9 | test: 10 | 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: actions/checkout@v4 15 | - name: Set up JDK 22 16 | uses: actions/setup-java@v4 17 | with: 18 | java-version: '22' 19 | distribution: 'liberica' 20 | cache: maven 21 | 22 | - name: Build and test tcMenuJavaApi 23 | run: mvn -B install -Dgpg.skip=true --file tcMenuJavaApi/pom.xml 24 | 25 | - name: Build and test embedCONTROLCore 26 | run: mvn -B install -Dgpg.skip=true --file embedCONTROLCore/pom.xml 27 | 28 | - name: Build and test tcMenuGenerator 29 | run: mvn -B install -Dgpg.skip=true --file tcMenuGenerator/pom.xml 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | target/ 3 | **/.vscode 4 | **/Output 5 | **/cmake-build-debug-visual-studio/ 6 | **/cmake-build-release-visual-studio/ 7 | pom.xml.tag 8 | pom.xml.releaseBackup 9 | pom.xml.versionsBackup 10 | pom.xml.next 11 | release.properties 12 | dependency-reduced-pom.xml 13 | buildNumber.properties 14 | .mvn/timing.properties 15 | builtPlugins 16 | .idea/ 17 | 18 | # Avoid ignoring Maven wrapper jar file (.jar files are usually ignored) 19 | !/.mvn/wrapper/maven-wrapper.jar 20 | 21 | 22 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "embedded/LiquidCrystalIO"] 2 | path = embedded/LiquidCrystalIO 3 | url = https://github.com/TcMenu/LiquidCrystalIO.git 4 | [submodule "embedded/IoAbstraction"] 5 | path = embedded/IoAbstraction 6 | url = https://github.com/TcMenu/IoAbstraction.git 7 | [submodule "embedded/tcMenu"] 8 | path = embedded/tcMenu 9 | url = https://github.com/TcMenu/tcMenuLib.git 10 | [submodule "embedded/TaskManagerIO"] 11 | path = embedded/TaskManagerIO 12 | url = https://github.com/TcMenu/TaskManagerIO.git 13 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | -------------------------------------------------------------------------------- /.idea/dataSources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | hsqldb.local 6 | true 7 | org.hsqldb.jdbc.JDBCDriver 8 | jdbc:hsqldb:file:$USER_HOME$/.tcmenu/h2db/tcmenuConfig;ifexists=true 9 | 10 | 11 | 12 | $ProjectFileDir$ 13 | 14 | 15 | hsqldb.local 16 | true 17 | org.hsqldb.jdbc.JDBCDriver 18 | jdbc:hsqldb:file:$USER_HOME$/temp/bug/h2db/tcmenuConfig;ifexists=true 19 | 20 | 21 | 22 | $ProjectFileDir$ 23 | 24 | 25 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations/EmbedControlApp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /.idea/runConfigurations/EmbeddedJavaDemoApp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /.idea/runConfigurations/TcMenuDesigner_IntTests.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 21 | -------------------------------------------------------------------------------- /.idea/runConfigurations/TcMenuDesigner_Single_Test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 21 | -------------------------------------------------------------------------------- /.idea/runConfigurations/TcMenuDesigner_Tests.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 21 | -------------------------------------------------------------------------------- /.idea/runConfigurations/TcMenu_Designer_UI.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /.idea/runConfigurations/tcMenuJavaAPI_Tests.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 18 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [davetcc] 2 | -------------------------------------------------------------------------------- /embedCONTROLCore/README.md: -------------------------------------------------------------------------------- 1 | ## embedCONTROL core library 2 | 3 | This library contains most of the logic to do with managing embedCONTROL connections, and the core code to do with arranging the items onto the display. However, this does not contain any platform specific logic. 4 | 5 | This library is kept on Java 11 so that it can be shared with Android and used with the Objective-C cross-compiler. If need be, we will de-sugar this source code to keep it compatible with the cross-compiler. 6 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/controlmgr/RedrawingMode.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.controlmgr; 2 | 3 | /// How the text of the item should be rendered onto the display, it is interpreted by the [MenuEditorFactory] in 4 | /// order to present the item as intended. 5 | public enum RedrawingMode { 6 | /// show the name only with no value 7 | SHOW_NAME, 8 | /// Show the value only with no name 9 | SHOW_VALUE, 10 | /// show the name and value 11 | SHOW_NAME_VALUE, 12 | /// Hide this item completely 13 | HIDDEN 14 | } 15 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/controlmgr/ThreadMarshaller.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.controlmgr; 2 | 3 | /** 4 | * When runOnUiThread is called with a Runnable, the run method should be called on the UI thread. For example 5 | * the JavaFX implementation of this is simply Platform::runLater because that ensures that the work is moved onto 6 | * the UI thread. 7 | */ 8 | @FunctionalInterface 9 | public interface ThreadMarshaller { 10 | void runOnUiThread(Runnable toRun); 11 | } 12 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/controlmgr/color/NullConditionalColoring.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.controlmgr.color; 2 | 3 | import com.thecoderscorner.menu.domain.state.PortableColor; 4 | 5 | import static com.thecoderscorner.embedcontrol.core.controlmgr.EditorComponent.RenderingStatus; 6 | 7 | /** 8 | * Any empty implementation of conditional coloring that returns WHITE background, BLACK text always. 9 | */ 10 | public class NullConditionalColoring implements ConditionalColoring { 11 | @Override 12 | public PortableColor backgroundFor(RenderingStatus status, ColorComponentType ty) { 13 | return ControlColor.WHITE; 14 | } 15 | 16 | @Override 17 | public ControlColor colorFor(RenderingStatus status, ColorComponentType ty) { 18 | return new ControlColor(ControlColor.BLACK, ControlColor.WHITE); 19 | } 20 | 21 | @Override 22 | public PortableColor foregroundFor(RenderingStatus status, ColorComponentType ty) { 23 | return ControlColor.BLACK; 24 | } 25 | } -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/creators/RemotePanelDisplayable.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.creators; 2 | 3 | import java.util.UUID; 4 | 5 | /** 6 | * Allows various UI elements to get hold of the data provided by the creator 7 | */ 8 | public interface RemotePanelDisplayable { 9 | /** 10 | * @return the actual underlying creator 11 | */ 12 | ConnectionCreator getCreator(); 13 | 14 | /** 15 | * @return the UUID associated with this connection 16 | */ 17 | UUID getUuid(); 18 | 19 | /** 20 | * @return the name of the connection. 21 | */ 22 | String getPanelName(); 23 | } 24 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/serial/SerialPortType.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.serial; 2 | 3 | /** 4 | * Indicates the type of serial port 5 | */ 6 | public enum SerialPortType { 7 | /** A Regular USB serial port */ 8 | REGULAR_USB_SERIAL, 9 | /** A bluetooth serial port */ 10 | BLUETOOTH_SERIAL, 11 | /** A BLE serial port */ 12 | BLE_SERIAL, 13 | /** Special enumeration only for searching that represents all possible ports */ 14 | ALL_PORTS 15 | } 16 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/util/DataException.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.util; 2 | 3 | public class DataException extends Exception { 4 | public DataException(String queryObject, Exception ex) { 5 | super(queryObject, ex); 6 | } 7 | 8 | public DataException(String queryObject) { 9 | super(queryObject); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/util/FieldMapping.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.util; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface FieldMapping { 8 | String fieldName(); 9 | boolean primaryKey() default false; 10 | FieldType fieldType() default FieldType.VARCHAR; 11 | } 12 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/util/FieldType.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.util; 2 | 3 | public enum FieldType { 4 | VARCHAR, INTEGER, ISO_DATE, ENUM, LARGE_TEXT, BOOLEAN 5 | } 6 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/util/MenuAppVersion.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.util; 2 | 3 | import com.thecoderscorner.menu.persist.VersionInfo; 4 | 5 | /** 6 | * Represents the build and version information of the application. 7 | */ 8 | public class MenuAppVersion { 9 | private final VersionInfo versionInfo; 10 | private final String buildStamp; 11 | private final String buildGroup; 12 | private final String buildArtifact; 13 | 14 | public MenuAppVersion(VersionInfo versionInfo, String buildStamp, String buildGroup, String buildArtifact) { 15 | this.versionInfo = versionInfo; 16 | this.buildStamp = buildStamp; 17 | this.buildGroup = buildGroup; 18 | this.buildArtifact = buildArtifact; 19 | } 20 | 21 | public VersionInfo getVersionInfo() { 22 | return versionInfo; 23 | } 24 | 25 | public String getBuildStamp() { 26 | return buildStamp; 27 | } 28 | 29 | public String getBuildGroup() { 30 | return buildGroup; 31 | } 32 | 33 | public String getBuildArtifact() { 34 | return buildArtifact; 35 | } 36 | 37 | @Override 38 | public String toString() { 39 | return versionInfo + " built on " + buildStamp; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/util/ProvideStore.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.util; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface ProvideStore { 8 | } 9 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/util/ResultSetConsumer.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.util; 2 | 3 | import java.sql.ResultSet; 4 | 5 | @FunctionalInterface 6 | public interface ResultSetConsumer { 7 | void processResults(ResultSet rs) throws Exception; 8 | } 9 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/util/StringHelper.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.util; 2 | 3 | public class StringHelper { 4 | public static boolean isStringEmptyOrNull(String str) { 5 | return str == null || str.isEmpty(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/util/TableMapping.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.util; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | /// Within TcMenu framework is a very basic table mapping system. It is extremely lightweight and performance is not 7 | /// considered critical, its main purpose is for reading configuration and other settings. 8 | /// This describes a table mapping and should be applied to a value class. 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface TableMapping { 11 | String tableName(); 12 | String uniqueKeyField(); 13 | } 14 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/util/TcApiDefinitions.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.util; 2 | 3 | import com.thecoderscorner.menu.domain.state.MenuTree; 4 | import com.thecoderscorner.menu.persist.JsonMenuItemSerializer; 5 | 6 | /** 7 | * Used by the Java embedded device support, classes that extend this interface can provide a menu tree and a serializer 8 | * for menu items. It also provides any menu in menu arrangements 9 | */ 10 | public interface TcApiDefinitions { 11 | MenuTree getMenuTree(); 12 | void configureMenuInMenuComponents(BaseMenuConfig config); 13 | JsonMenuItemSerializer getJsonSerializer(); 14 | } 15 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/core/util/TcComponent.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.core.util; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Methods within a MenuConfig annotated with this method will be called during construction and the returned result 10 | * will be added to componentMap so as to be available with its getBean method. 11 | */ 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Target(ElementType.METHOD) 14 | public @interface TcComponent { 15 | } 16 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/customization/ApplicationThemeManager.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.customization; 2 | 3 | public class ApplicationThemeManager { 4 | private String themeName; 5 | 6 | public ApplicationThemeManager() { 7 | themeName = "lightMode"; 8 | } 9 | 10 | public String getThemeName() { 11 | return themeName; 12 | } 13 | 14 | public void setThemeName(String themeName) { 15 | this.themeName = themeName; 16 | } 17 | 18 | public boolean isDarkMode() { 19 | return "darkMode".equals(themeName); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/customization/ColorCustomizable.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.customization; 2 | 3 | import com.thecoderscorner.embedcontrol.core.controlmgr.color.ControlColor; 4 | 5 | import static com.thecoderscorner.embedcontrol.core.controlmgr.color.ConditionalColoring.ColorComponentType; 6 | 7 | public interface ColorCustomizable { 8 | enum ColorStatus { NOT_PROVIDED, PROVIDED_NOT_AVAILABLE, AVAILABLE } 9 | 10 | boolean isRepresentingGlobal(); 11 | ColorStatus getColorStatus(ColorComponentType componentType); 12 | ControlColor getColorFor(ColorComponentType componentType); 13 | default ControlColor getActualUnderlyingColor(ColorComponentType componentType) { 14 | return getColorFor(componentType); 15 | } 16 | 17 | void setColorFor(ColorComponentType componentType, ControlColor controlColor); 18 | void clearColorFor(ColorComponentType componentType); 19 | 20 | /** 21 | * Get the name of this color scheme for saving and loading. 22 | * @return the name of the scheme 23 | */ 24 | String getColorSchemeName(); 25 | } 26 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/customization/InvalidItemChangeException.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.customization; 2 | 3 | public class InvalidItemChangeException extends Exception { 4 | public InvalidItemChangeException(String message) { 5 | super(message); 6 | } 7 | 8 | public InvalidItemChangeException(String message, Throwable cause) { 9 | super(message, cause); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/customization/SpaceFormItem.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.customization; 2 | 3 | import com.thecoderscorner.embedcontrol.core.controlmgr.ComponentPositioning; 4 | 5 | public class SpaceFormItem extends MenuFormItem { 6 | private int verticalSpace; 7 | 8 | public SpaceFormItem(ColorCustomizable settings, ComponentPositioning positioning, int verticalSpace) { 9 | super(settings, positioning); 10 | this.verticalSpace = verticalSpace; 11 | } 12 | 13 | public int getVerticalSpace() { 14 | return verticalSpace; 15 | } 16 | 17 | public void setVerticalSpace(int verticalSpace) { 18 | this.verticalSpace = verticalSpace; 19 | } 20 | 21 | @Override 22 | public boolean isValid() { 23 | return verticalSpace != 0; 24 | } 25 | 26 | @Override 27 | public String getDescription() { 28 | return "Edit Space"; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/jfx/controlmgr/CanvasDrawableContext.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.jfx.controlmgr; 2 | 3 | import com.thecoderscorner.embedcontrol.core.controlmgr.ComponentSettings; 4 | import com.thecoderscorner.embedcontrol.core.controlmgr.EditorComponent; 5 | import com.thecoderscorner.menu.domain.MenuItem; 6 | 7 | /** 8 | * Interface representing the context required for a drawable canvas component. It encapsulates 9 | * the necessary information needed to render a component within a canvas, including the menu 10 | * item, drawing settings, rendering status, and a general value. 11 | */ 12 | public interface CanvasDrawableContext { 13 | public MenuItem getItem(); 14 | public ComponentSettings getDrawingSettings(); 15 | public EditorComponent.RenderingStatus getStatus(); 16 | Object getValue(); 17 | } 18 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/jfx/controlmgr/IntegerUpDownEditorComponent.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.jfx.controlmgr; 2 | 3 | import com.thecoderscorner.embedcontrol.core.controlmgr.ComponentSettings; 4 | import com.thecoderscorner.embedcontrol.core.controlmgr.MenuComponentControl; 5 | import com.thecoderscorner.embedcontrol.core.controlmgr.ThreadMarshaller; 6 | import com.thecoderscorner.menu.domain.MenuItem; 7 | 8 | /** 9 | * IntegerUpDownEditorComponent is a concrete implementation of the 10 | * UpDownEditorComponentBase class that specifically handles Integer values. 11 | * It provides the basic UI components required for editing integer menu items 12 | * with increment and decrement buttons. 13 | */ 14 | public class IntegerUpDownEditorComponent extends UpDownEditorComponentBase { 15 | public IntegerUpDownEditorComponent(MenuItem item, MenuComponentControl remote, ComponentSettings settings, ThreadMarshaller marshaller) { 16 | super(item, remote, settings, marshaller); 17 | } 18 | } -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/jfx/controlmgr/TitleWidgetListener.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.jfx.controlmgr; 2 | 3 | /** 4 | * This interface is used to listen for updates on title widgets, you register with the title widget directly. 5 | * @param usually a javafx image 6 | */ 7 | @FunctionalInterface 8 | public interface TitleWidgetListener { 9 | /** 10 | * Called when a title widget has changed, you may not be on the UI thread at this point, if that matters you 11 | * should marshall the update accordingly. 12 | * @param widget the widget that has changed 13 | */ 14 | void titleWidgetHasChanged(TitleWidget widget); 15 | } 16 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/jfx/controlmgr/panels/NewColorSetDialogController.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.jfx.controlmgr.panels; 2 | 3 | import com.thecoderscorner.embedcontrol.core.util.StringHelper; 4 | import javafx.event.ActionEvent; 5 | import javafx.scene.Scene; 6 | import javafx.scene.control.TextField; 7 | import javafx.stage.Stage; 8 | 9 | import java.util.Optional; 10 | 11 | public class NewColorSetDialogController { 12 | 13 | private Optional result = Optional.empty(); 14 | public TextField colorSetName; 15 | 16 | public void onCreateColorSet(ActionEvent actionEvent) { 17 | if(StringHelper.isStringEmptyOrNull(colorSetName.getText())) return; 18 | result = Optional.ofNullable(colorSetName.getText()); 19 | ((Stage)(colorSetName.getScene().getWindow())).close(); 20 | } 21 | 22 | public void onClose(ActionEvent actionEvent) { 23 | ((Stage)(colorSetName.getScene().getWindow())).close(); 24 | } 25 | 26 | public Optional getResult() { 27 | return result; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/com/thecoderscorner/embedcontrol/jfx/controlmgr/texted/FieldEditHandler.java: -------------------------------------------------------------------------------- 1 | package com.thecoderscorner.embedcontrol.jfx.controlmgr.texted; 2 | 3 | import javafx.scene.Node; 4 | 5 | public interface FieldEditHandler { 6 | Node getEditorComponent(); 7 | boolean isCurrentlyValid(); 8 | String getValueAsString(); 9 | void markInvalid(); 10 | } 11 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | module com.thecoderscorner.embedcontrol.core { 2 | requires java.logging; 3 | requires com.google.gson; 4 | requires com.fazecast.jSerialComm; 5 | requires com.thecoderscorner.tcmenu.javaapi; 6 | requires javafx.graphics; 7 | requires javafx.base; 8 | requires javafx.controls; 9 | requires java.prefs; 10 | requires java.desktop; 11 | requires javafx.fxml; 12 | 13 | requires java.sql; 14 | requires org.hsqldb; 15 | 16 | opens com.thecoderscorner.embedcontrol.core.service; 17 | 18 | exports com.thecoderscorner.embedcontrol.core.controlmgr; 19 | exports com.thecoderscorner.embedcontrol.core.serial; 20 | exports com.thecoderscorner.embedcontrol.core.service; 21 | exports com.thecoderscorner.embedcontrol.core.util; 22 | exports com.thecoderscorner.embedcontrol.core.creators; 23 | exports com.thecoderscorner.embedcontrol.core.rs232; 24 | exports com.thecoderscorner.embedcontrol.core.controlmgr.color; 25 | exports com.thecoderscorner.embedcontrol.jfx.controlmgr; 26 | exports com.thecoderscorner.embedcontrol.customization; 27 | exports com.thecoderscorner.embedcontrol.jfx.controlmgr.panels; 28 | exports com.thecoderscorner.embedcontrol.customization.customdraw; 29 | } 30 | -------------------------------------------------------------------------------- /embedCONTROLCore/src/main/resources/core_fxml/newColorSetDialog.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 |
11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 |