From 8f79a291036402a35ece39b470bf474ce4abc1f4 Mon Sep 17 00:00:00 2001
From: Alexey <248997@gmail.com>
Date: Mon, 16 Sep 2024 10:25:00 +0500
Subject: [PATCH] feat: Init commit
---
.github/workflows/nuget_windows.yml | 73 ++
.github/workflows/release-debug-version.yml | 69 ++
.github/workflows/release-pre-version.yml | 74 ++
.../.idea/workspace.xml | 216 +++++
.../.idea.Asv.Drones.Gui.Api/.idea/.gitignore | 10 +
src/Asv.Drones.Gui.Api.Design/App.axaml | 13 +
src/Asv.Drones.Gui.Api.Design/App.axaml.cs | 26 +
.../Asv.Drones.Gui.Api.Design.csproj | 21 +
src/Asv.Drones.Gui.Api.Design/Program.cs | 23 +
src/Asv.Drones.Gui.Api.Design/app.manifest | 18 +
src/Asv.Drones.Gui.Api.sln | 30 +
src/Asv.Drones.Gui.Api/App.axaml | 16 +
.../Asv.Drones.Gui.Api.csproj | 92 ++
.../Asv.Drones.Gui.Api.csproj.DotSettings | 68 ++
.../CompatibilitySuppressions.xml | 109 +++
src/Asv.Drones.Gui.Api/FodyWeavers.xml | 3 +
src/Asv.Drones.Gui.Api/RS.Designer.cs | 548 ++++++++++++
src/Asv.Drones.Gui.Api/RS.resx | 190 ++++
src/Asv.Drones.Gui.Api/RS.ru.resx | 186 ++++
.../Services/AppHost/IAppArgs.cs | 12 +
.../Services/AppHost/IAppInfo.cs | 34 +
.../Services/AppHost/IAppPathInfo.cs | 15 +
.../Services/AppHost/IApplicationHost.cs | 78 ++
.../Services/AppHost/IThemeInfo.cs | 10 +
.../Services/DialogService/IDialogService.cs | 45 +
.../Localization/ILocalizationService.cs | 182 ++++
.../Services/Localization/IMeasureUnit.cs | 147 ++++
.../Localization/IReadOnlyMeasureUnit.cs | 15 +
.../Localization/LocalizationHelper.cs | 48 +
.../Services/Localization/MeasureUnitBase.cs | 99 +++
.../Services/LogService/ILogService.cs | 74 ++
.../Services/LogService/NullLogService.cs | 45 +
.../Services/Map/IMapService.cs | 16 +
.../Mavlink/IMavlinkDevicesService.cs | 68 ++
.../Services/Mavlink/MavlinkHelper.cs | 63 ++
.../MissionPlaning/IPlaningMission.cs | 22 +
.../MissionPlaning/PlaningMissionFile.cs | 31 +
.../MissionPlaning/PlaningMissionModel.cs | 59 ++
.../Services/Plugins/ILocalPluginInfo.cs | 38 +
.../Services/Plugins/IPluginEntryPoint.cs | 32 +
.../Services/Plugins/IPluginManager.cs | 56 ++
.../Plugins/IPluginManuallyInstallable.cs | 7 +
.../Services/Plugins/NullPluginManager.cs | 59 ++
.../Plugins/PluginEntryPointAttribute.cs | 23 +
.../Services/SdrStore/ISdrStoreService.cs | 17 +
.../Services/ServiceWithConfigBase.cs | 35 +
.../ISoundNotificationService.cs | 6 +
.../Shell/Header/DefaultHeaderMenuProvider.cs | 15 +
.../Shell/Header/IMenuItem.cs | 21 +
.../Shell/Header/MenuItem.cs | 30 +
src/Asv.Drones.Gui.Api/Shell/IShell.cs | 11 +
.../Shell/Menu/IShellMenuItem.cs | 39 +
.../Shell/Menu/ShellMenuItem.cs | 59 ++
.../Shell/Pages/ExportShellPageAttribute.cs | 17 +
.../Shell/Pages/IShellPage.cs | 24 +
.../Shell/Pages/LogViewer/LogItemViewModel.cs | 34 +
.../Converters/DefaultPacketConverter.cs | 44 +
.../Converters/IPacketConverter.cs | 49 ++
.../Converters/StatusTextConverter.cs | 57 ++
.../Pages/Settings/ISettingsPageContext.cs | 6 +
.../Shell/Pages/ShellPage.cs | 39 +
.../Shell/Status/IShellStatusItem.cs | 13 +
.../Shell/Status/ShellStatusItem.cs | 15 +
.../LostFocusUpdateBindingBehavior.cs | 87 ++
.../Controls/Attitude/AttitudeIndicator.axaml | 428 +++++++++
.../Attitude/AttitudeIndicator.axaml.cs | 828 ++++++++++++++++++
.../HierarchicalStoreEntryTagViewModel.cs | 14 +
.../HierarchicalStoreEntryViewModel.cs | 207 +++++
.../HierarchicalStoreView.axaml | 278 ++++++
.../HierarchicalStoreView.axaml.cs | 11 +
.../HierarchicalStoreViewModel.cs | 370 ++++++++
.../Indicators/BatteryIndicator.axaml | 48 +
.../Indicators/BatteryIndicator.axaml.cs | 102 +++
.../Indicators/ConnectionQuality.axaml | 49 ++
.../Indicators/ConnectionQuality.axaml.cs | 100 +++
.../Controls/Indicators/DigitIndicator.axaml | 28 +
.../Indicators/DigitIndicator.axaml.cs | 119 +++
.../Indicators/GpsStatusIndicator.axaml | 48 +
.../Indicators/GpsStatusIndicator.axaml.cs | 91 ++
.../Controls/Indicators/IndicatorBase.cs | 60 ++
.../Controls/Indicators/LevelIndicator.axaml | 137 +++
.../Indicators/LevelIndicator.axaml.cs | 119 +++
.../Controls/Indicators/StringIndicator.axaml | 18 +
.../Indicators/StringIndicator.axaml.cs | 34 +
.../Tools/Controls/Map/Actions/IMapAction.cs | 27 +
.../Controls/Map/Actions/MapActionBase.cs | 31 +
.../Actions/Mover/MapMoverActionView.axaml | 34 +
.../Actions/Mover/MapMoverActionView.axaml.cs | 12 +
.../Actions/Mover/MapMoverActionViewModel.cs | 31 +
.../Actions/Ruler/MapRulerActionView.axaml | 29 +
.../Actions/Ruler/MapRulerActionView.axaml.cs | 12 +
.../Actions/Ruler/MapRulerActionViewModel.cs | 188 ++++
.../Map/Actions/Zoom/MapZoomActionView.axaml | 37 +
.../Actions/Zoom/MapZoomActionView.axaml.cs | 12 +
.../Actions/Zoom/MapZoomActionViewModel.cs | 53 ++
.../Tools/Controls/Map/Anchors/IMapAnchor.cs | 17 +
.../Controls/Map/Anchors/MapAnchorBase.cs | 53 ++
.../Tools/Controls/Map/Header/IMapMenuItem.cs | 25 +
.../Tools/Controls/Map/IMap.cs | 69 ++
.../Tools/Controls/Map/MapPageView.axaml | 145 +++
.../Tools/Controls/Map/MapPageView.axaml.cs | 70 ++
.../Tools/Controls/Map/MapPageViewModel.cs | 278 ++++++
.../Controls/Map/Status/IMapStatusItem.cs | 25 +
.../AnchorEditor/AnchorsEditorView.axaml | 174 ++++
.../AnchorEditor/AnchorsEditorView.axaml.cs | 35 +
.../AnchorEditor/AnchorsEditorViewModel.cs | 279 ++++++
.../Tools/Controls/Map/Widgets/IMapWidget.cs | 47 +
.../Controls/Map/Widgets/MapWidgetBase.cs | 32 +
.../OptionsDisplayItem/OptionsDisplayItem.cs | 181 ++++
.../OptionsDisplayItemStyles.axaml | 195 +++++
.../Tools/Controls/Params/ParamItemView.axaml | 76 ++
.../Controls/Params/ParamItemView.axaml.cs | 18 +
.../Controls/Params/ParamItemViewModel.cs | 255 ++++++
.../Tools/Controls/Params/ParamPageView.axaml | 96 ++
.../Controls/Params/ParamPageView.axaml.cs | 18 +
.../Controls/Params/ParamPageViewModel.cs | 289 ++++++
.../DesignTime/TreePageExampleView.axaml | 8 +
.../DesignTime/TreePageExampleView.axaml.cs | 12 +
.../DesignTime/TreePageExampleViewModel.cs | 69 ++
.../DesignTime/TreePageExplorerDesignTime.cs | 47 +
.../Tools/Controls/TreePage/ITreePage.cs | 45 +
.../Controls/TreePage/ITreePageContext.cs | 6 +
.../Controls/TreePage/ITreePageExplorer.cs | 9 +
.../Controls/TreePage/ITreePageMenuItem.cs | 68 ++
.../Controls/TreePage/TreeGroupView.axaml | 82 ++
.../Controls/TreePage/TreeGroupView.axaml.cs | 12 +
.../Controls/TreePage/TreeGroupViewModel.cs | 53 ++
.../TreePage/TreePageExplorerView.axaml | 200 +++++
.../TreePage/TreePageExplorerView.axaml.cs | 56 ++
.../TreePage/TreePageExplorerViewModel.cs | 264 ++++++
.../Tools/Converters/AddDoubleConverter.cs | 30 +
.../AddPer\321\201entDoubleConverter.cs" | 30 +
.../Converters/EnumToBooleanConverter.cs | 18 +
.../Tools/Converters/MaterialIconConverter.cs | 41 +
.../Converters/MultipleIsNotNullConverter.cs | 19 +
.../Converters/StringToDecimalConverter.cs | 22 +
src/Asv.Drones.Gui.Api/Tools/DesignTime.cs | 14 +
.../Tools/ExportViewAttribute.cs | 28 +
.../Tools/ProgressMessage.cs | 7 +
.../Tools/PropertyComparer.cs | 20 +
.../ViewModel/DisposableReactiveObject.cs | 76 ++
.../DisposableReactiveObjectWithValidation.cs | 76 ++
.../Tools/ViewModel/IViewModelProvider.cs | 60 ++
.../Tools/ViewModel/RemoteLogMessageProxy.cs | 47 +
src/Asv.Drones.Gui.Api/Tools/WindowHelper.cs | 157 ++++
src/Asv.Drones.Gui.Api/WellKnownUri.cs | 158 ++++
src/Directory.Build.props | 19 +
147 files changed, 11366 insertions(+)
create mode 100644 .github/workflows/nuget_windows.yml
create mode 100644 .github/workflows/release-debug-version.yml
create mode 100644 .github/workflows/release-pre-version.yml
create mode 100644 .idea/.idea.Asv.Drones.Gui.Api/.idea/workspace.xml
create mode 100644 src/.idea/.idea.Asv.Drones.Gui.Api/.idea/.gitignore
create mode 100644 src/Asv.Drones.Gui.Api.Design/App.axaml
create mode 100644 src/Asv.Drones.Gui.Api.Design/App.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api.Design/Asv.Drones.Gui.Api.Design.csproj
create mode 100644 src/Asv.Drones.Gui.Api.Design/Program.cs
create mode 100644 src/Asv.Drones.Gui.Api.Design/app.manifest
create mode 100644 src/Asv.Drones.Gui.Api.sln
create mode 100644 src/Asv.Drones.Gui.Api/App.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Asv.Drones.Gui.Api.csproj
create mode 100644 src/Asv.Drones.Gui.Api/Asv.Drones.Gui.Api.csproj.DotSettings
create mode 100644 src/Asv.Drones.Gui.Api/CompatibilitySuppressions.xml
create mode 100644 src/Asv.Drones.Gui.Api/FodyWeavers.xml
create mode 100644 src/Asv.Drones.Gui.Api/RS.Designer.cs
create mode 100644 src/Asv.Drones.Gui.Api/RS.resx
create mode 100644 src/Asv.Drones.Gui.Api/RS.ru.resx
create mode 100644 src/Asv.Drones.Gui.Api/Services/AppHost/IAppArgs.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/AppHost/IAppInfo.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/AppHost/IAppPathInfo.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/AppHost/IApplicationHost.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/AppHost/IThemeInfo.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/DialogService/IDialogService.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Localization/ILocalizationService.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Localization/IMeasureUnit.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Localization/IReadOnlyMeasureUnit.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Localization/LocalizationHelper.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Localization/MeasureUnitBase.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/LogService/ILogService.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/LogService/NullLogService.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Map/IMapService.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Mavlink/IMavlinkDevicesService.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Mavlink/MavlinkHelper.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/MissionPlaning/IPlaningMission.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/MissionPlaning/PlaningMissionFile.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/MissionPlaning/PlaningMissionModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Plugins/ILocalPluginInfo.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Plugins/IPluginEntryPoint.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Plugins/IPluginManager.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Plugins/IPluginManuallyInstallable.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Plugins/NullPluginManager.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/Plugins/PluginEntryPointAttribute.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/SdrStore/ISdrStoreService.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/ServiceWithConfigBase.cs
create mode 100644 src/Asv.Drones.Gui.Api/Services/SoundNotification/ISoundNotificationService.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Header/DefaultHeaderMenuProvider.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Header/IMenuItem.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Header/MenuItem.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/IShell.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Menu/IShellMenuItem.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Menu/ShellMenuItem.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Pages/ExportShellPageAttribute.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Pages/IShellPage.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Pages/LogViewer/LogItemViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Pages/PacketViewer/Converters/DefaultPacketConverter.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Pages/PacketViewer/Converters/IPacketConverter.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Pages/PacketViewer/Converters/StatusTextConverter.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Pages/Settings/ISettingsPageContext.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Pages/ShellPage.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Status/IShellStatusItem.cs
create mode 100644 src/Asv.Drones.Gui.Api/Shell/Status/ShellStatusItem.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Behavior/LostFocusUpdateBindingBehavior.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Attitude/AttitudeIndicator.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Attitude/AttitudeIndicator.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/HierarchicalStore/HierarchicalStoreEntryTagViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/HierarchicalStore/HierarchicalStoreEntryViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/HierarchicalStore/HierarchicalStoreView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/HierarchicalStore/HierarchicalStoreView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/HierarchicalStore/HierarchicalStoreViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/BatteryIndicator.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/BatteryIndicator.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/ConnectionQuality.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/ConnectionQuality.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/DigitIndicator.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/DigitIndicator.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/GpsStatusIndicator.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/GpsStatusIndicator.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/IndicatorBase.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/LevelIndicator.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/LevelIndicator.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/StringIndicator.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Indicators/StringIndicator.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/IMapAction.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/MapActionBase.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/Mover/MapMoverActionView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/Mover/MapMoverActionView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/Mover/MapMoverActionViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/Ruler/MapRulerActionView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/Ruler/MapRulerActionView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/Ruler/MapRulerActionViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/Zoom/MapZoomActionView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/Zoom/MapZoomActionView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Actions/Zoom/MapZoomActionViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Anchors/IMapAnchor.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Anchors/MapAnchorBase.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Header/IMapMenuItem.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/IMap.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/MapPageView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/MapPageView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/MapPageViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Status/IMapStatusItem.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Widgets/AnchorEditor/AnchorsEditorView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Widgets/AnchorEditor/AnchorsEditorView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Widgets/AnchorEditor/AnchorsEditorViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Widgets/IMapWidget.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Map/Widgets/MapWidgetBase.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/OptionsDisplayItem/OptionsDisplayItem.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/OptionsDisplayItem/OptionsDisplayItemStyles.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Params/ParamItemView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Params/ParamItemView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Params/ParamItemViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Params/ParamPageView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Params/ParamPageView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/Params/ParamPageViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/DesignTime/TreePageExampleView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/DesignTime/TreePageExampleView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/DesignTime/TreePageExampleViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/DesignTime/TreePageExplorerDesignTime.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/ITreePage.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/ITreePageContext.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/ITreePageExplorer.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/ITreePageMenuItem.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/TreeGroupView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/TreeGroupView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/TreeGroupViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/TreePageExplorerView.axaml
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/TreePageExplorerView.axaml.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Controls/TreePage/TreePageExplorerViewModel.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Converters/AddDoubleConverter.cs
create mode 100644 "src/Asv.Drones.Gui.Api/Tools/Converters/AddPer\321\201entDoubleConverter.cs"
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Converters/EnumToBooleanConverter.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Converters/MaterialIconConverter.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Converters/MultipleIsNotNullConverter.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/Converters/StringToDecimalConverter.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/DesignTime.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/ExportViewAttribute.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/ProgressMessage.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/PropertyComparer.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/ViewModel/DisposableReactiveObject.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/ViewModel/DisposableReactiveObjectWithValidation.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/ViewModel/IViewModelProvider.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/ViewModel/RemoteLogMessageProxy.cs
create mode 100644 src/Asv.Drones.Gui.Api/Tools/WindowHelper.cs
create mode 100644 src/Asv.Drones.Gui.Api/WellKnownUri.cs
create mode 100644 src/Directory.Build.props
diff --git a/.github/workflows/nuget_windows.yml b/.github/workflows/nuget_windows.yml
new file mode 100644
index 0000000..84ef3ff
--- /dev/null
+++ b/.github/workflows/nuget_windows.yml
@@ -0,0 +1,73 @@
+name: Deploy Nuget
+
+on:
+ push:
+ tags:
+ - 'v[0-9]+.[0-9]+.[0-9]+'
+
+env:
+ PATH_TO_PROJECTS: ${{ github.workspace }}\src
+ PACKAGE_OUTPUT_DIRECTORY: ${{ github.workspace }}\output\
+ NUGET_SOURCE_URL: 'https://api.nuget.org/v3/index.json'
+ GITHUB_PACKAGES_URL: 'https://nuget.pkg.github.com/asv-soft/index.json'
+
+jobs:
+ deploy:
+ name: 'Deploy'
+ runs-on: windows-2019
+ if: startsWith(github.ref, 'refs/tags/v')
+ steps:
+ - name: 'Checkout'
+ uses: actions/checkout@v3
+
+ - name: Setup .Net
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: |
+ 8.x.x
+
+ - name: Get version
+ id: version
+ uses: battila7/get-version-action@v2
+
+ - name: Check version
+ run: echo ${{ steps.version.outputs.version-without-v }}
+
+ - name: Set project version
+ run: |
+ dotnet tool install -g dotnet-setversion
+ setversion ${{ steps.version.outputs.version-without-v }} ${{ env.PATH_TO_PROJECTS }}\Asv.Drones.Gui.Api\Asv.Drones.Gui.Api.csproj
+
+ - name: Add NuGet source
+ run: |
+ dotnet nuget add source ${{ env.GITHUB_PACKAGES_URL }} --username '${{ secrets.USER_NAME }}' --password '${{ secrets.GIHUB_NUGET_AUTH_TOKEN }}' --store-password-in-clear-text
+
+ - name: Restore dependencies
+ run: |
+ cd src
+ dotnet restore
+
+ - name: Build projects
+ run: |
+ cd src
+ dotnet build -c Release --no-restore
+
+ - name: Running all tests
+ run: |
+ cd src
+ dotnet test --no-restore --verbosity normal
+
+ - name: Pack projects to Nuget
+ run: |
+ cd src
+ dotnet pack -c Release --no-build --no-restore -p:PackageVersion=${{ steps.version.outputs.version-without-v }} --output ${{ env.PACKAGE_OUTPUT_DIRECTORY }}
+
+ - name: Push packages to Nuget
+ run: |
+ cd src
+ dotnet nuget push ${{ env.PACKAGE_OUTPUT_DIRECTORY }}Asv.Drones.Gui.Api.${{ steps.version.outputs.version-without-v }}.nupkg -k ${{ secrets.NUGET_AUTH_TOKEN }} -s ${{ env.NUGET_SOURCE_URL }}
+
+ - name: Push packages to Github
+ run: |
+ cd src
+ dotnet nuget push ${{ env.PACKAGE_OUTPUT_DIRECTORY }}Asv.Drones.Gui.Api.${{ steps.version.outputs.version-without-v }}.nupkg -k ${{ secrets.GIHUB_NUGET_AUTH_TOKEN }} -s ${{ env.GITHUB_PACKAGES_URL }}
diff --git a/.github/workflows/release-debug-version.yml b/.github/workflows/release-debug-version.yml
new file mode 100644
index 0000000..8a42f1a
--- /dev/null
+++ b/.github/workflows/release-debug-version.yml
@@ -0,0 +1,69 @@
+name: Build and Publish Debug Version
+
+on:
+ push:
+ tags:
+ - "v[0-9]+.[0-9]+.[0-9]+-dev.[0-9]+"
+ - "v[0-9]+.[0-9]+.[0-9]+-dev"
+
+env:
+ PATH_TO_PROJECTS: ${{ github.workspace }}\src
+ PACKAGE_OUTPUT_DIRECTORY: ${{ github.workspace }}\output\
+ NUGET_SOURCE_URL: 'https://api.nuget.org/v3/index.json'
+ GITHUB_PACKAGES_URL: 'https://nuget.pkg.github.com/asv-soft/index.json'
+
+jobs:
+ deploy:
+ name: 'Deploy'
+ runs-on: windows-2019
+ if: startsWith(github.ref, 'refs/tags/v')
+ steps:
+ - name: 'Checkout'
+ uses: actions/checkout@v3
+
+ - name: Setup .Net
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: |
+ 8.x.x
+
+ - name: Get version
+ id: version
+ uses: battila7/get-version-action@v2
+
+ - name: Check version
+ run: echo ${{ steps.version.outputs.version-without-v }}
+
+ - name: Set project version
+ run: |
+ dotnet tool install -g dotnet-setversion
+ setversion ${{ steps.version.outputs.version-without-v }} ${{ env.PATH_TO_PROJECTS }}\Asv.Drones.Gui.Api\Asv.Drones.Gui.Api.csproj
+
+ - name: Add NuGet source
+ run: |
+ dotnet nuget add source ${{ env.GITHUB_PACKAGES_URL }} --username '${{ secrets.USER_NAME }}' --password '${{ secrets.GIHUB_NUGET_AUTH_TOKEN }}' --store-password-in-clear-text
+
+ - name: Restore dependencies
+ run: |
+ cd src
+ dotnet restore
+
+ - name: Build projects
+ run: |
+ cd src
+ dotnet build -c Release --no-restore
+
+ - name: Running all tests
+ run: |
+ cd src
+ dotnet test --no-restore --verbosity normal
+
+ - name: Pack projects to Nuget
+ run: |
+ cd src
+ dotnet pack -c Release --no-build --no-restore -p:PackageVersion=${{ steps.version.outputs.version-without-v }} --output ${{ env.PACKAGE_OUTPUT_DIRECTORY }}
+
+ - name: Push packages to Github
+ run: |
+ cd src
+ dotnet nuget push ${{ env.PACKAGE_OUTPUT_DIRECTORY }}Asv.Drones.Gui.Api.${{ steps.version.outputs.version-without-v }}.nupkg -k ${{ secrets.GIHUB_NUGET_AUTH_TOKEN }} -s ${{ env.GITHUB_PACKAGES_URL }}
diff --git a/.github/workflows/release-pre-version.yml b/.github/workflows/release-pre-version.yml
new file mode 100644
index 0000000..32c01d5
--- /dev/null
+++ b/.github/workflows/release-pre-version.yml
@@ -0,0 +1,74 @@
+name: Build and Publish Pre-Release Version
+
+on:
+ push:
+ tags:
+ - "v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+"
+ - "v[0-9]+.[0-9]+.[0-9]+-rc"
+
+env:
+ PATH_TO_PROJECTS: ${{ github.workspace }}\src
+ PACKAGE_OUTPUT_DIRECTORY: ${{ github.workspace }}\output\
+ NUGET_SOURCE_URL: 'https://api.nuget.org/v3/index.json'
+ GITHUB_PACKAGES_URL: 'https://nuget.pkg.github.com/asv-soft/index.json'
+
+jobs:
+ deploy:
+ name: 'Deploy'
+ runs-on: windows-2019
+ if: startsWith(github.ref, 'refs/tags/v')
+ steps:
+ - name: 'Checkout'
+ uses: actions/checkout@v3
+
+ - name: Setup .Net
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: |
+ 8.x.x
+
+ - name: Get version
+ id: version
+ uses: battila7/get-version-action@v2
+
+ - name: Check version
+ run: echo ${{ steps.version.outputs.version-without-v }}
+
+ - name: Set project version
+ run: |
+ dotnet tool install -g dotnet-setversion
+ setversion ${{ steps.version.outputs.version-without-v }} ${{ env.PATH_TO_PROJECTS }}\Asv.Drones.Gui.Api\Asv.Drones.Gui.Api.csproj
+
+ - name: Add NuGet source
+ run: |
+ dotnet nuget add source ${{ env.GITHUB_PACKAGES_URL }} --username '${{ secrets.USER_NAME }}' --password '${{ secrets.GIHUB_NUGET_AUTH_TOKEN }}' --store-password-in-clear-text
+
+ - name: Restore dependencies
+ run: |
+ cd src
+ dotnet restore
+
+ - name: Build projects
+ run: |
+ cd src
+ dotnet build -c Release --no-restore
+
+ - name: Running all tests
+ run: |
+ cd src
+ dotnet test --no-restore --verbosity normal
+
+ - name: Pack projects to Nuget
+ run: |
+ cd src
+ dotnet pack -c Release --no-build --no-restore -p:PackageVersion=${{ steps.version.outputs.version-without-v }} --output ${{ env.PACKAGE_OUTPUT_DIRECTORY }}
+
+ - name: Push packages to Nuget
+ run: |
+ cd src
+ dotnet nuget push ${{ env.PACKAGE_OUTPUT_DIRECTORY }}Asv.Drones.Gui.Api.${{ steps.version.outputs.version-without-v }}.nupkg -k ${{ secrets.NUGET_AUTH_TOKEN }} -s ${{ env.NUGET_SOURCE_URL }} --prerelease
+
+ - name: Push packages to Github
+ run: |
+ cd src
+ dotnet nuget push ${{ env.PACKAGE_OUTPUT_DIRECTORY }}Asv.Drones.Gui.Api.${{ steps.version.outputs.version-without-v }}.nupkg -k ${{ secrets.GIHUB_NUGET_AUTH_TOKEN }} -s ${{ env.GITHUB_PACKAGES_URL }} --prerelease
diff --git a/.idea/.idea.Asv.Drones.Gui.Api/.idea/workspace.xml b/.idea/.idea.Asv.Drones.Gui.Api/.idea/workspace.xml
new file mode 100644
index 0000000..dc0cb84
--- /dev/null
+++ b/.idea/.idea.Asv.Drones.Gui.Api/.idea/workspace.xml
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1726462703553
+
+
+ 1726462703553
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/.idea.Asv.Drones.Gui.Api/.idea/.gitignore b/src/.idea/.idea.Asv.Drones.Gui.Api/.idea/.gitignore
new file mode 100644
index 0000000..79b7c64
--- /dev/null
+++ b/src/.idea/.idea.Asv.Drones.Gui.Api/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/projectSettingsUpdater.xml
+/contentModel.xml
+/.idea.Asv.Drones.Gui.Api.iml
+/modules.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/src/Asv.Drones.Gui.Api.Design/App.axaml b/src/Asv.Drones.Gui.Api.Design/App.axaml
new file mode 100644
index 0000000..f2789d8
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api.Design/App.axaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api.Design/App.axaml.cs b/src/Asv.Drones.Gui.Api.Design/App.axaml.cs
new file mode 100644
index 0000000..1c222a6
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api.Design/App.axaml.cs
@@ -0,0 +1,26 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Markup.Xaml;
+using Avalonia.Styling;
+
+namespace Asv.Drones.Gui.Api.Design;
+
+public partial class App : Application
+{
+ public override void Initialize()
+ {
+ AvaloniaXamlLoader.Load(this);
+ RequestedThemeVariant = ThemeVariant.Dark;
+ }
+
+ public override void OnFrameworkInitializationCompleted()
+ {
+ if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+ {
+ desktop.MainWindow = new Window() { };
+ }
+
+ base.OnFrameworkInitializationCompleted();
+ }
+}
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api.Design/Asv.Drones.Gui.Api.Design.csproj b/src/Asv.Drones.Gui.Api.Design/Asv.Drones.Gui.Api.Design.csproj
new file mode 100644
index 0000000..676ffe4
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api.Design/Asv.Drones.Gui.Api.Design.csproj
@@ -0,0 +1,21 @@
+
+
+ WinExe
+ net8.0
+ enable
+ true
+ app.manifest
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Asv.Drones.Gui.Api.Design/Program.cs b/src/Asv.Drones.Gui.Api.Design/Program.cs
new file mode 100644
index 0000000..03836aa
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api.Design/Program.cs
@@ -0,0 +1,23 @@
+using Avalonia;
+using System;
+using Avalonia.ReactiveUI;
+
+namespace Asv.Drones.Gui.Api.Design;
+
+class Program
+{
+ // Initialization code. Don't use any Avalonia, third-party APIs or any
+ // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
+ // yet and stuff might break.
+ [STAThread]
+ public static void Main(string[] args) => BuildAvaloniaApp()
+ .StartWithClassicDesktopLifetime(args);
+
+ // Avalonia configuration, don't remove; also used by visual designer.
+ public static AppBuilder BuildAvaloniaApp()
+ => AppBuilder.Configure()
+ .UsePlatformDetect()
+ .WithInterFont()
+ .LogToTrace()
+ .UseReactiveUI();
+}
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api.Design/app.manifest b/src/Asv.Drones.Gui.Api.Design/app.manifest
new file mode 100644
index 0000000..94d82de
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api.Design/app.manifest
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Asv.Drones.Gui.Api.sln b/src/Asv.Drones.Gui.Api.sln
new file mode 100644
index 0000000..c79aeb3
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api.sln
@@ -0,0 +1,30 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Asv.Drones.Gui.Api", "Asv.Drones.Gui.Api\Asv.Drones.Gui.Api.csproj", "{232EF70A-616D-47F2-9CA5-04A3D18F2C95}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solutions items", "Solutions items", "{A8CD2F07-B6AA-44CC-8548-CDC3AC6F35B3}"
+ ProjectSection(SolutionItems) = preProject
+ Directory.Build.props = Directory.Build.props
+ ..\.github\workflows\nuget_windows.yml = ..\.github\workflows\nuget_windows.yml
+ ..\.github\workflows\release-debug-version.yml = ..\.github\workflows\release-debug-version.yml
+ ..\.github\workflows\release-pre-version.yml = ..\.github\workflows\release-pre-version.yml
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Asv.Drones.Gui.Api.Design", "Asv.Drones.Gui.Api.Design\Asv.Drones.Gui.Api.Design.csproj", "{8019E3DE-D23C-4CB9-AC23-74B84D436A30}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {232EF70A-616D-47F2-9CA5-04A3D18F2C95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {232EF70A-616D-47F2-9CA5-04A3D18F2C95}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {232EF70A-616D-47F2-9CA5-04A3D18F2C95}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {232EF70A-616D-47F2-9CA5-04A3D18F2C95}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8019E3DE-D23C-4CB9-AC23-74B84D436A30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8019E3DE-D23C-4CB9-AC23-74B84D436A30}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8019E3DE-D23C-4CB9-AC23-74B84D436A30}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8019E3DE-D23C-4CB9-AC23-74B84D436A30}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/src/Asv.Drones.Gui.Api/App.axaml b/src/Asv.Drones.Gui.Api/App.axaml
new file mode 100644
index 0000000..efc3b28
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/App.axaml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/Asv.Drones.Gui.Api.csproj b/src/Asv.Drones.Gui.Api/Asv.Drones.Gui.Api.csproj
new file mode 100644
index 0000000..e807925
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/Asv.Drones.Gui.Api.csproj
@@ -0,0 +1,92 @@
+
+
+
+ net8.0
+ enable
+ enable
+ $(ProductVersion)
+ $(ProductVersion)
+ $(ProductVersion)
+ true
+ https://github.com/asv-soft/asv-drones-gui-api
+ git
+ asv-drones;api;mavlink;drone;PX4;Ardupilot;.net
+ https://github.com/asv-soft/asv-drones-gui-api
+
+ https://github.com/asv-soft
+ API reference for Asv.Drones GUI application
+ https://github.com/asv-soft
+ true
+ true
+ $(ProductPrevVersion)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ all
+
+
+
+
+ PublicResXFileCodeGenerator
+ RS.Designer.cs
+
+
+
+
+ True
+ True
+ RS.resx
+
+
+ Code
+ AttitudeIndicator.axaml
+
+
+ TreePageExampleView.axaml
+ Code
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Asv.Drones.Gui.Api/Asv.Drones.Gui.Api.csproj.DotSettings b/src/Asv.Drones.Gui.Api/Asv.Drones.Gui.Api.csproj.DotSettings
new file mode 100644
index 0000000..6df4da7
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/Asv.Drones.Gui.Api.csproj.DotSettings
@@ -0,0 +1,68 @@
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/CompatibilitySuppressions.xml b/src/Asv.Drones.Gui.Api/CompatibilitySuppressions.xml
new file mode 100644
index 0000000..0e4b9f2
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/CompatibilitySuppressions.xml
@@ -0,0 +1,109 @@
+
+
+
+
+ CP0001
+ T:Asv.Drones.Gui.Api.LogMessageType
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0002
+ M:Asv.Drones.Gui.Api.LogItemViewModel.#ctor(System.Int32,System.String,Asv.Drones.Gui.Api.LogMessageType,System.DateTime,System.String,System.String)
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0002
+ M:Asv.Drones.Gui.Api.LogItemViewModel.get_Level
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0002
+ M:Asv.Drones.Gui.Api.LogItemViewModel.get_ThreadId
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0002
+ M:Asv.Drones.Gui.Api.LogItemViewModel.set_Message(System.String)
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0002
+ M:Asv.Drones.Gui.Api.LogMessage.#ctor(System.DateTime,Asv.Drones.Gui.Api.LogMessageType,System.String,System.String,System.String)
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0002
+ M:Asv.Drones.Gui.Api.LogMessage.get_DateTime
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0002
+ M:Asv.Drones.Gui.Api.LogMessage.get_Source
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0002
+ M:Asv.Drones.Gui.Api.LogMessage.get_Type
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0006
+ M:Asv.Drones.Gui.Api.IPluginManager.InstallManually(System.String,System.IProgress{Asv.Drones.Gui.Api.ProgressMessage},System.Threading.CancellationToken)
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0006
+ M:Asv.Drones.Gui.Api.IPluginManager.ListPluginVersions(Asv.Drones.Gui.Api.SearchQuery,System.String,System.Threading.CancellationToken)
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0006
+ P:Asv.Drones.Gui.Api.IApplicationHost.Dialogs
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0006
+ P:Asv.Drones.Gui.Api.ILocalPluginInfo.Icon
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0006
+ P:Asv.Drones.Gui.Api.IPluginSearchInfo.Dependencies
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
+ CP0006
+ P:Asv.Drones.Gui.Api.IPluginSpecification.IsVerified
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ lib/net8.0/Asv.Drones.Gui.Api.dll
+ true
+
+
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/FodyWeavers.xml b/src/Asv.Drones.Gui.Api/FodyWeavers.xml
new file mode 100644
index 0000000..63fc148
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/RS.Designer.cs b/src/Asv.Drones.Gui.Api/RS.Designer.cs
new file mode 100644
index 0000000..cf9ec6b
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/RS.Designer.cs
@@ -0,0 +1,548 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Asv.Drones.Gui.Api {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class RS {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal RS() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Asv.Drones.Gui.Api.RS", typeof(RS).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Vibration and clipping of UAV.
+ ///
+ public static string AltitudeIndicator_Vibration_ToolTip {
+ get {
+ return ResourceManager.GetString("AltitudeIndicator_Vibration_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Actions.
+ ///
+ public static string AnchorsEditorView_TextBlock_Actions {
+ get {
+ return ResourceManager.GetString("AnchorsEditorView_TextBlock_Actions", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Altitude.
+ ///
+ public static string AnchorsEditorView_TextBlock_Altitude_Text {
+ get {
+ return ResourceManager.GetString("AnchorsEditorView_TextBlock_Altitude_Text", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Latitude.
+ ///
+ public static string AnchorsEditorView_TextBlock_Latitude_Text {
+ get {
+ return ResourceManager.GetString("AnchorsEditorView_TextBlock_Latitude_Text", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Longitude.
+ ///
+ public static string AnchorsEditorView_TextBlock_Longitude_Text {
+ get {
+ return ResourceManager.GetString("AnchorsEditorView_TextBlock_Longitude_Text", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Anchor Editor.
+ ///
+ public static string AnchorsEditorViewModel_Title {
+ get {
+ return ResourceManager.GetString("AnchorsEditorViewModel_Title", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Altitude.
+ ///
+ public static string AttitudeIndicator_Altitude_ToolTip {
+ get {
+ return ResourceManager.GetString("AttitudeIndicator_Altitude_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Compass.
+ ///
+ public static string AttitudeIndicator_Compass_ToolTip {
+ get {
+ return ResourceManager.GetString("AttitudeIndicator_Compass_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Velocity.
+ ///
+ public static string AttitudeIndicator_Velocity_ToolTip {
+ get {
+ return ResourceManager.GetString("AttitudeIndicator_Velocity_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Value must be a number.
+ ///
+ public static string DistanceMeasureUnit_ErrorMessage_NotANumber {
+ get {
+ return ResourceManager.GetString("DistanceMeasureUnit_ErrorMessage_NotANumber", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Invalid value.
+ ///
+ public static string DistanceMeasureUnit_ErrorMessage_NotValid {
+ get {
+ return ResourceManager.GetString("DistanceMeasureUnit_ErrorMessage_NotValid", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Value can't be null or white space.
+ ///
+ public static string DistanceMeasureUnit_ErrorMessage_NullOrWhiteSpace {
+ get {
+ return ResourceManager.GetString("DistanceMeasureUnit_ErrorMessage_NullOrWhiteSpace", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Rename.
+ ///
+ public static string HierarchicalStoreView_Button_EditFileName {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_Button_EditFileName", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Create New File.
+ ///
+ public static string HierarchicalStoreView_Button_ToolTip_CreateNewFile {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_Button_ToolTip_CreateNewFile", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Create New Folder.
+ ///
+ public static string HierarchicalStoreView_Button_ToolTip_CreateNewFolder {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_Button_ToolTip_CreateNewFolder", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Refresh .
+ ///
+ public static string HierarchicalStoreView_Button_ToolTip_Refresh {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_Button_ToolTip_Refresh", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Delete File.
+ ///
+ public static string HierarchicalStoreView_File_Button_DeleteFile {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_File_Button_DeleteFile", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Move File.
+ ///
+ public static string HierarchicalStoreView_File_Button_MoveFile {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_File_Button_MoveFile", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Delete Folder.
+ ///
+ public static string HierarchicalStoreView_Folder_Button_DeleteFolder {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_Folder_Button_DeleteFolder", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Rename Folder.
+ ///
+ public static string HierarchicalStoreView_Folder_Button_EditFolderName {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_Folder_Button_EditFolderName", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Move Folder.
+ ///
+ public static string HierarchicalStoreView_Folder_Button_MoveFolderToFolder {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_Folder_Button_MoveFolderToFolder", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Cancel.
+ ///
+ public static string HierarchicalStoreView_TextBlock_Text_Cancel {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_TextBlock_Text_Cancel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Move Folder.
+ ///
+ public static string HierarchicalStoreView_TextBlock_Text_MoveFolder {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_TextBlock_Text_MoveFolder", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Move Here.
+ ///
+ public static string HierarchicalStoreView_TextBlock_Text_MoveHere {
+ get {
+ return ResourceManager.GetString("HierarchicalStoreView_TextBlock_Text_MoveHere", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Search.
+ ///
+ public static string HierarhicalStoreView_Search_Textbox_Watermark {
+ get {
+ return ResourceManager.GetString("HierarhicalStoreView_Search_Textbox_Watermark", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Move anchors.
+ ///
+ public static string MapMoverActionView_Title {
+ get {
+ return ResourceManager.GetString("MapMoverActionView_Title", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Fixed wing.
+ ///
+ public static string MavlinkHelper_GetTypeName_FixedWing {
+ get {
+ return ResourceManager.GetString("MavlinkHelper_GetTypeName_FixedWing", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Helicopter.
+ ///
+ public static string MavlinkHelper_GetTypeName_Helicopter {
+ get {
+ return ResourceManager.GetString("MavlinkHelper_GetTypeName_Helicopter", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Hexarotor.
+ ///
+ public static string MavlinkHelper_GetTypeName_HexaRotor {
+ get {
+ return ResourceManager.GetString("MavlinkHelper_GetTypeName_HexaRotor", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Octorotor.
+ ///
+ public static string MavlinkHelper_GetTypeName_OctoRotor {
+ get {
+ return ResourceManager.GetString("MavlinkHelper_GetTypeName_OctoRotor", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quadrotor.
+ ///
+ public static string MavlinkHelper_GetTypeName_QuadRotor {
+ get {
+ return ResourceManager.GetString("MavlinkHelper_GetTypeName_QuadRotor", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Tricopter.
+ ///
+ public static string MavlinkHelper_GetTypeName_TriCopter {
+ get {
+ return ResourceManager.GetString("MavlinkHelper_GetTypeName_TriCopter", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unknown type.
+ ///
+ public static string MavlinkHelper_GetTypeName_UnknownType {
+ get {
+ return ResourceManager.GetString("MavlinkHelper_GetTypeName_UnknownType", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Value must be a number.
+ ///
+ public static string MeasureUnitBase_ErrorMessage_NotANumber {
+ get {
+ return ResourceManager.GetString("MeasureUnitBase_ErrorMessage_NotANumber", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Value can't be null or white space.
+ ///
+ public static string MeasureUnitBase_ErrorMessage_NullOrWhiteSpace {
+ get {
+ return ResourceManager.GetString("MeasureUnitBase_ErrorMessage_NullOrWhiteSpace", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Value must be greater than {0} ({1}).
+ ///
+ public static string MeasureUnitExtensions_ErrorMessage_GreaterValue {
+ get {
+ return ResourceManager.GetString("MeasureUnitExtensions_ErrorMessage_GreaterValue", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Value must be less than {0} ({1}).
+ ///
+ public static string MeasureUnitExtensions_ErrorMessage_LesserValue {
+ get {
+ return ResourceManager.GetString("MeasureUnitExtensions_ErrorMessage_LesserValue", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Remove all pinned parameters.
+ ///
+ public static string ParametersEditorPageView_PinsOffButton_ToolTip {
+ get {
+ return ResourceManager.GetString("ParametersEditorPageView_PinsOffButton_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Star this parameter.
+ ///
+ public static string ParametersEditorPageView_StarButton_ToolTip {
+ get {
+ return ResourceManager.GetString("ParametersEditorPageView_StarButton_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show only starred parameters.
+ ///
+ public static string ParametersEditorPageView_StarsToggleButton_ToolTip {
+ get {
+ return ResourceManager.GetString("ParametersEditorPageView_StarsToggleButton_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update all parameters.
+ ///
+ public static string ParametersEditorPageView_UpdateButton_ToolTip {
+ get {
+ return ResourceManager.GetString("ParametersEditorPageView_UpdateButton_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Search.
+ ///
+ public static string ParametersEditorPageViewModel_Search {
+ get {
+ return ResourceManager.GetString("ParametersEditorPageViewModel_Search", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Total: {0}.
+ ///
+ public static string ParametersEditorPageViewModel_Total {
+ get {
+ return ResourceManager.GetString("ParametersEditorPageViewModel_Total", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to On/off pin for this parameter.
+ ///
+ public static string ParametersEditorParameterView_PinToggleButton_ToolTip {
+ get {
+ return ResourceManager.GetString("ParametersEditorParameterView_PinToggleButton_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reboot required.
+ ///
+ public static string ParametersEditorParameterView_RebootRequired {
+ get {
+ return ResourceManager.GetString("ParametersEditorParameterView_RebootRequired", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update.
+ ///
+ public static string ParametersEditorParameterView_UpdateButton {
+ get {
+ return ResourceManager.GetString("ParametersEditorParameterView_UpdateButton", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update this parameter from UAV.
+ ///
+ public static string ParametersEditorParameterView_UpdateButton_ToolTip {
+ get {
+ return ResourceManager.GetString("ParametersEditorParameterView_UpdateButton_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Write.
+ ///
+ public static string ParametersEditorParameterView_WriteButton {
+ get {
+ return ResourceManager.GetString("ParametersEditorParameterView_WriteButton", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Write this parameter to UAV.
+ ///
+ public static string ParametersEditorParameterView_WriteButton_ToolTip {
+ get {
+ return ResourceManager.GetString("ParametersEditorParameterView_WriteButton_ToolTip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Cancel.
+ ///
+ public static string ParamPageViewModel_DataLossDialog_CloseButtonText {
+ get {
+ return ResourceManager.GetString("ParamPageViewModel_DataLossDialog_CloseButtonText", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to You're trying to open another menu folder, but you have unsaved changes in the current one. Do you want to save them?.
+ ///
+ public static string ParamPageViewModel_DataLossDialog_Content {
+ get {
+ return ResourceManager.GetString("ParamPageViewModel_DataLossDialog_Content", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Save.
+ ///
+ public static string ParamPageViewModel_DataLossDialog_PrimaryButtonText {
+ get {
+ return ResourceManager.GetString("ParamPageViewModel_DataLossDialog_PrimaryButtonText", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Don't save.
+ ///
+ public static string ParamPageViewModel_DataLossDialog_SecondaryButtonText {
+ get {
+ return ResourceManager.GetString("ParamPageViewModel_DataLossDialog_SecondaryButtonText", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Potential data loss warning.
+ ///
+ public static string ParamPageViewModel_DataLossDialog_Title {
+ get {
+ return ResourceManager.GetString("ParamPageViewModel_DataLossDialog_Title", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/src/Asv.Drones.Gui.Api/RS.resx b/src/Asv.Drones.Gui.Api/RS.resx
new file mode 100644
index 0000000..78b6fec
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/RS.resx
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
+ PublicKeyToken=b77a5c561934e089
+
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
+ PublicKeyToken=b77a5c561934e089
+
+
+
+ Value can't be null or white space
+
+
+ Value must be a number
+
+
+ Value must be greater than {0} ({1})
+
+
+ Value must be less than {0} ({1})
+
+
+
+
+ Move anchors
+
+
+ Latitude
+
+
+ Altitude
+
+
+ Longitude
+
+
+ Vibration and clipping of UAV
+
+
+ Velocity
+
+
+ Altitude
+
+
+ Compass
+
+
+ Refresh
+
+
+ Create New Folder
+
+
+ Create New File
+
+
+ Rename Folder
+
+
+ Move Folder
+
+
+ Delete Folder
+
+
+ Delete File
+
+
+ Rename
+
+
+ Move File
+
+
+ Search
+
+
+ Move Folder
+
+
+ Move Here
+
+
+ Cancel
+
+
+ On/off pin for this parameter
+
+
+ Update this parameter from UAV
+
+
+ Write this parameter to UAV
+
+
+ Reboot required
+
+
+ Update
+
+
+ Write
+
+
+ Potential data loss warning
+
+
+ You're trying to open another menu folder, but you have unsaved changes in the current one. Do you want to save them?
+
+
+ Save
+
+
+ Don't save
+
+
+ Cancel
+
+
+ Show only starred parameters
+
+
+ Update all parameters
+
+
+ Remove all pinned parameters
+
+
+ Search
+
+
+ Total: {0}
+
+
+ Star this parameter
+
+
+ Fixed wing
+
+
+ Quadrotor
+
+
+ Hexarotor
+
+
+ Octorotor
+
+
+ Helicopter
+
+
+ Tricopter
+
+
+ Unknown type
+
+
+ Actions
+
+
+ Anchor Editor
+
+
+ Value can't be null or white space
+
+
+ Value must be a number
+
+
+ Invalid value
+
+
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/RS.ru.resx b/src/Asv.Drones.Gui.Api/RS.ru.resx
new file mode 100644
index 0000000..4f26940
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/RS.ru.resx
@@ -0,0 +1,186 @@
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
+ PublicKeyToken=b77a5c561934e089
+
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
+ PublicKeyToken=b77a5c561934e089
+
+
+
+ sdsd
+
+
+ Значение не должно быть пустым или пробелом
+
+
+ Значение должно быть числом
+
+
+ Значение должно быть больше чем {0} ({1})
+
+
+ Значение должно быть меньше чем {0} ({1})
+
+
+
+
+ Переместить якоря
+
+
+ Широта
+
+
+ Высота
+
+
+ Долгота
+
+
+ Вибрация и клиппинг БПЛА
+
+
+ Скорость
+
+
+ Высота
+
+
+ Компас
+
+
+ Обновить
+
+
+ Переименовать
+
+
+ Переместить папку
+
+
+ Переименовать папку
+
+
+ Удалить файл
+
+
+ Переместить файл
+
+
+ Удалить папку
+
+
+ Поиск
+
+
+ Переместить папку
+
+
+ Переместить сюда
+
+
+ Отмена
+
+
+ Включить/выключить закрепление этого параметра
+
+
+ Обновить этот парметр из БПЛА
+
+
+ Записать этот парметр в БПЛА
+
+
+ Требуется перезагрузка
+
+
+ Обновить
+
+
+ Записать
+
+
+ Отмена
+
+
+ Вы пытаетесь открыть другой пункт меню, но в текущем у вас есть несохраненные изменения. Хотите сохранить их?
+
+
+ Сохранить
+
+
+ Не сохранять
+
+
+ Предупреждение о возможной потере данных
+
+
+ Показать только избранные параметры
+
+
+ Обновить все параметры
+
+
+ Убрать все прикреплённые параметры
+
+
+
+ Добавить параметр в избранные
+
+
+ Найти
+
+
+ Всего: {0}
+
+
+ Создать файл
+
+
+ Создать папку
+
+
+ Неподвижное крыло
+
+
+ Вертолёт
+
+
+ Гексакоптер
+
+
+ Октокоптер
+
+
+ Квадрокоптер
+
+
+ Трикоптер
+
+
+ Неизвестный тип
+
+
+ Действия
+
+
+ Редактор якорей
+
+
+ Значение не должно быть пустым или пробелом
+
+
+ Значение должно быть числом
+
+
+ Недопустимое значение
+
+
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/Services/AppHost/IAppArgs.cs b/src/Asv.Drones.Gui.Api/Services/AppHost/IAppArgs.cs
new file mode 100644
index 0000000..8ab4986
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/Services/AppHost/IAppArgs.cs
@@ -0,0 +1,12 @@
+namespace Asv.Drones.Gui.Api;
+
+public interface IAppArgs
+{
+ IReadOnlyDictionary Args { get; }
+ IReadOnlySet Tags { get; }
+
+ bool TryParse(IEnumerable args);
+ bool TryParseFile(string argsFile = "app.args");
+
+ string this[string key, string defaultValue] { get; }
+}
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/Services/AppHost/IAppInfo.cs b/src/Asv.Drones.Gui.Api/Services/AppHost/IAppInfo.cs
new file mode 100644
index 0000000..b170420
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/Services/AppHost/IAppInfo.cs
@@ -0,0 +1,34 @@
+namespace Asv.Drones.Gui.Api;
+
+public interface IAppInfo
+{
+ ///
+ /// Application title
+ ///
+ string Name { get; }
+
+ ///
+ /// Application version
+ ///
+ string Version { get; }
+
+ ///
+ /// Authors
+ ///
+ string Author { get; }
+
+ ///
+ /// Application home page URL
+ ///
+ string AppUrl { get; }
+
+ ///
+ /// Licence name
+ ///
+ string AppLicense { get; }
+
+ ///
+ /// Avalonia UI package version
+ ///
+ string AvaloniaVersion { get; }
+}
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/Services/AppHost/IAppPathInfo.cs b/src/Asv.Drones.Gui.Api/Services/AppHost/IAppPathInfo.cs
new file mode 100644
index 0000000..a775b62
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/Services/AppHost/IAppPathInfo.cs
@@ -0,0 +1,15 @@
+namespace Asv.Drones.Gui.Api;
+
+///
+/// Information about the application's path
+///
+public interface IAppPathInfo
+{
+ ///
+ /// The folder where the application stores its data.
+ /// This is the folder where the application stores its data, such as configuration files, logs, and plugins.
+ /// Folder is created by the application if it does not exist.
+ /// The folder is created in the user's home directory and will not be deleted when the application is uninstalled or updated.
+ ///
+ string AppDataFolder { get; }
+}
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/Services/AppHost/IApplicationHost.cs b/src/Asv.Drones.Gui.Api/Services/AppHost/IApplicationHost.cs
new file mode 100644
index 0000000..53933fc
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/Services/AppHost/IApplicationHost.cs
@@ -0,0 +1,78 @@
+using System.Composition.Hosting;
+using Asv.Cfg;
+using Asv.Common;
+using Avalonia.Controls.Templates;
+
+namespace Asv.Drones.Gui.Api;
+
+///
+/// Application host
+///
+public interface IApplicationHost
+{
+ ///
+ /// Application args
+ ///
+ IAppArgs Args { get; }
+ ///
+ /// Base information about current application
+ ///
+ IAppInfo Info { get; }
+
+ ///
+ /// Path helper
+ ///
+ IAppPathInfo Paths { get; }
+
+ ///
+ /// Host for add data templates
+ ///
+ IDataTemplateHost DataTemplateHost { get; }
+
+ ///
+ /// Configuration of the application
+ ///
+ IConfiguration Configuration { get; }
+
+ ILocalizationService Localization { get; }
+ ILogService Logs { get; }
+ IPluginManager PluginManager { get; }
+
+ ///
+ /// IoC container
+ ///
+ CompositionHost Container { get; }
+
+ ///
+ /// Gets an enumerable collection of theme items.
+ ///
+ ///
+ /// An enumerable collection of theme items.
+ ///
+ IEnumerable Themes { get; }
+
+ ///
+ /// Gets the current theme of the application.
+ ///
+ ///
+ /// This property returns an instance of which represents the current theme.
+ ///
+ ///
+ /// An instance representing the current theme of the application.
+ ///
+ IRxEditableValue CurrentTheme { get; }
+ ///
+ /// Main application view. Can be NULL! before main activity is loading
+ ///
+ IShell? Shell { get; }
+ ///
+ /// Base class for all user dialogs
+ /// Can be NULL! before main activity is loading
+ ///
+ IDialogService? Dialogs { get; }
+
+ ///
+ /// Try to restart application
+ ///
+ void RestartApplication();
+}
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/Services/AppHost/IThemeInfo.cs b/src/Asv.Drones.Gui.Api/Services/AppHost/IThemeInfo.cs
new file mode 100644
index 0000000..4039c3f
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/Services/AppHost/IThemeInfo.cs
@@ -0,0 +1,10 @@
+namespace Asv.Drones.Gui.Api;
+
+///
+/// Represents a theme item.
+///
+public interface IThemeInfo
+{
+ string Id { get; }
+ string Name { get; }
+}
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/Services/DialogService/IDialogService.cs b/src/Asv.Drones.Gui.Api/Services/DialogService/IDialogService.cs
new file mode 100644
index 0000000..2a033bb
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/Services/DialogService/IDialogService.cs
@@ -0,0 +1,45 @@
+namespace Asv.Drones.Gui.Api;
+
+public interface IDialogService
+{
+ public bool IsImplementedShowOpenFileDialog { get; }
+ public bool IsImplementedShowSaveFileDialog { get; }
+ public bool IsImplementedShowSelectFolderDialog { get; }
+ public bool IsImplementedShowObserveFolderDialog { get; }
+
+ ///
+ /// Opens dialog to choose a file
+ ///
+ /// caption of the dialog
+ /// extension filter, example: "txt, *, nupkg"
+ /// directory where to start search
+ ///
+ public Task ShowOpenFileDialog(string title, string? typeFilter = null, string? initialDirectory = null);
+
+ ///
+ /// Opens dialog to save a file
+ ///
+ /// caption of the dialog
+ /// default extension of the file
+ /// extension filter, example: "txt, *, nupkg"
+ /// directory where to start search
+ ///
+ public Task ShowSaveFileDialog(string title, string? defaultExt = null, string? typeFilter = null, string? initialDirectory = null);
+
+ ///
+ /// Opens dialog to select a folder
+ ///
+ /// caption of the dialog
+ /// default path
+ ///
+ public Task ShowSelectFolderDialog(string title, string? oldPath = null);
+
+ ///
+ /// Opens dialog to observe a folder
+ ///
+ /// caption of the dialog
+ /// default path
+ ///
+ public Task ShowObserveFolderDialog(string title, string? defaultPath);
+
+}
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/Services/Localization/ILocalizationService.cs b/src/Asv.Drones.Gui.Api/Services/Localization/ILocalizationService.cs
new file mode 100644
index 0000000..d9ac76c
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/Services/Localization/ILocalizationService.cs
@@ -0,0 +1,182 @@
+using Asv.Common;
+
+namespace Asv.Drones.Gui.Api
+{
+ public interface ILocalizationService
+ {
+ ///
+ /// Allows you to select or get the current application language
+ ///
+ IRxEditableValue CurrentLanguage { get; }
+
+ ///
+ /// Returns the list of available languages
+ ///
+ IEnumerable AvailableLanguages { get; }
+
+ #region Units
+
+ ///
+ /// Convert bytes rate to short localized string
+ /// For example: 1024 => 1 KB/s
+ ///
+ ///
+ IReadOnlyMeasureUnit ByteRate { get; }
+
+ ///
+ /// Convert items rate to short localized string
+ /// For example: 1000 => 1 KHz
+ ///
+ ///
+ IReadOnlyMeasureUnit ItemsRate { get; }
+
+ ///
+ /// Convert bytes count to short localized string
+ /// For example: 1024 => 1 KB
+ ///
+ ///
+ IReadOnlyMeasureUnit ByteSize { get; }
+
+ IReadOnlyMeasureUnit RelativeTime { get; }
+
+ IReadOnlyMeasureUnit Voltage { get; }
+
+ IReadOnlyMeasureUnit Current { get; }
+ IReadOnlyMeasureUnit MAh { get; }
+
+ IMeasureUnit Altitude { get; }
+
+ IMeasureUnit Distance { get; }
+
+ IMeasureUnit Accuracy { get; } // field for gbs plugin only
+
+ IMeasureUnit Latitude { get; }
+ IMeasureUnit Longitude { get; }
+
+ IMeasureUnit Velocity { get; }
+
+ IMeasureUnit DdmLlz { get; }
+ IMeasureUnit DdmGp { get; }
+
+ IMeasureUnit Sdm { get; }
+
+ IMeasureUnit Power { get; }
+ IMeasureUnit AmplitudeModulation { get; }
+ IMeasureUnit Frequency { get; }
+ IMeasureUnit Phase { get; }
+ IMeasureUnit Bearing { get; }
+ IMeasureUnit Temperature { get; }
+ IMeasureUnit Degree { get; }
+ IMeasureUnit FieldStrength { get; }
+
+ #endregion
+
+ public GeoPoint ToSiGeoPoint(string? latitude, string? longitude, string? altitude)
+ {
+ var lat = Latitude.IsValid(latitude) ? Latitude.ConvertToSi(latitude) : double.NaN;
+ var lon = Longitude.IsValid(longitude) ? Longitude.ConvertToSi(longitude) : double.NaN;
+ var alt = Altitude.IsValid(altitude) ? Altitude.ConvertToSi(altitude) : double.NaN;
+ return new GeoPoint(lat, lon, alt);
+ }
+ }
+
+ public interface ILanguageInfo
+ {
+ string Id { get; }
+ string DisplayName { get; }
+ }
+
+ public enum AltitudeUnits
+ {
+ Meters,
+ Feets
+ }
+
+ public enum AmplitudeModulationUnits
+ {
+ Percent,
+ InParts
+ }
+
+ public enum BearingUnits
+ {
+ Degree,
+ DegreesMinutes
+ }
+
+ public enum DdmUnits
+ {
+ InParts,
+ Percent,
+ MicroAmp,
+ MicroAmpRu
+ }
+
+ public enum DegreeUnits
+ {
+ Degrees,
+ MinutesSeconds,
+ DegreesMinutesSeconds
+ }
+
+ public enum DistanceUnits
+ {
+ Meters,
+ NauticalMiles
+ }
+
+ public enum FieldStrengthUnits
+ {
+ MicroVoltsPerMeter
+ }
+
+ public enum FrequencyUnits
+ {
+ Hz,
+ KHz,
+ MHz,
+ GHz
+ }
+
+ public enum LatitudeUnits
+ {
+ Deg,
+ Dms
+ }
+
+ public enum LongitudeUnits
+ {
+ Deg,
+ Dms
+ }
+
+ public enum PhaseUnits
+ {
+ Degree,
+ Radian
+ }
+
+ public enum PowerUnits
+ {
+ Dbm
+ }
+
+ public enum SdmUnits
+ {
+ Percent
+ }
+
+ public enum TemperatureUnits
+ {
+ Celsius,
+ Farenheit,
+ Kelvin
+ }
+
+ public enum VelocityUnits
+ {
+ MetersPerSecond,
+ KilometersPerHour,
+ MilesPerHour
+ }
+}
\ No newline at end of file
diff --git a/src/Asv.Drones.Gui.Api/Services/Localization/IMeasureUnit.cs b/src/Asv.Drones.Gui.Api/Services/Localization/IMeasureUnit.cs
new file mode 100644
index 0000000..bb75e72
--- /dev/null
+++ b/src/Asv.Drones.Gui.Api/Services/Localization/IMeasureUnit.cs
@@ -0,0 +1,147 @@
+#nullable enable
+using System.Globalization;
+using Asv.Common;
+using Avalonia;
+using Avalonia.Data.Converters;
+
+namespace Asv.Drones.Gui.Api
+{
+ public interface IMeasureUnitItem
+ {
+ public string Title { get; }
+ public string Unit { get; }
+ public bool IsSiUnit { get; }
+ public TValue ConvertFromSi(TValue siValue);
+ public TValue ConvertToSi(TValue value);
+ public TValue Parse(string? value);
+ bool IsValid(string? value);
+ string GetErrorMessage(string? value);
+ string Print(TValue value);
+ string PrintWithUnits(TValue value);
+
+ public TValue ConvertToSi(string? value)
+ {
+ return ConvertToSi(Parse(value));
+ }
+
+ public string FromSiToString(TValue value)
+ {
+ return Print(ConvertFromSi(value));
+ }
+
+ public string FromSiToStringWithUnits(TValue value)
+ {
+ return PrintWithUnits(ConvertFromSi(value));
+ }
+ }
+
+ public interface IMeasureUnitItem : IMeasureUnitItem
+ {
+ public TEnum Id { get; }
+ }
+
+ public interface IMeasureUnit
+ {
+ string Title { get; }
+ string Description { get; }
+ IEnumerable> AvailableUnits { get; }
+ IRxEditableValue> CurrentUnit { get; }
+ IMeasureUnitItem SiUnit { get; }
+
+ public string FromSiToStringWithUnits(TValue value)
+ {
+ return CurrentUnit.Value.FromSiToStringWithUnits(value);
+ }
+
+ public string FromSiToString(TValue value)
+ {
+ return CurrentUnit.Value.FromSiToString(value);
+ }
+
+ public TValue ConvertFromSi(TValue value)
+ {
+ return CurrentUnit.Value.ConvertFromSi(value);
+ }
+
+ public TValue ConvertToSi(TValue value)
+ {
+ return CurrentUnit.Value.ConvertToSi(value);
+ }
+
+ public TValue ConvertToSi(string? value)
+ {
+ return CurrentUnit.Value.ConvertToSi(value);
+ }
+
+ public bool IsValid(string? value)
+ {
+ return CurrentUnit.Value.IsValid(value);
+ }
+ }
+
+ public static class MeasureUnitExtensions
+ {
+ private const string DefaultErrorMessage = "Something went wrong";
+
+ public static bool IsValid(this IMeasureUnit src, double minSiValue, double maxSiValue,
+ string value)
+ {
+ if (src.CurrentUnit.Value.IsValid(value) == false) return false;
+ if (src.CurrentUnit.Value.ConvertToSi(value) < minSiValue) return false;
+ if (src.CurrentUnit.Value.ConvertToSi(value) > maxSiValue) return false;
+ return true;
+ }
+
+ public static string GetErrorMessage(this IMeasureUnit src, string? value)
+ {
+ return src.CurrentUnit.Value.GetErrorMessage(value);
+ }
+
+ public static string GetErrorMessage(this IMeasureUnit src, double minSiValue,
+ double maxSiValue, string? value)
+ {
+ var msg = src.CurrentUnit.Value.GetErrorMessage(value);
+ if (string.IsNullOrWhiteSpace(msg) == false) return msg;
+ var siValue = src.CurrentUnit.Value.ConvertToSi(value);
+ if (siValue < minSiValue)
+ return string.Format(RS.MeasureUnitExtensions_ErrorMessage_GreaterValue,
+ src.CurrentUnit.Value.FromSiToStringWithUnits(minSiValue),
+ src.SiUnit.FromSiToStringWithUnits(siValue));
+ if (siValue > maxSiValue)
+ return string.Format(RS.MeasureUnitExtensions_ErrorMessage_LesserValue,
+ src.CurrentUnit.Value.FromSiToStringWithUnits(minSiValue),
+ src.SiUnit.FromSiToStringWithUnits(siValue));
+ return DefaultErrorMessage;
+ }
+ }
+
+
+ public static class MeasureUnitConverter
+ {
+ static MeasureUnitConverter()
+ {
+ DoubleInstance = new MeasureUnitConverter();
+ UlongInstance = new MeasureUnitConverter();
+ }
+
+ public static MeasureUnitConverter UlongInstance { get; set; }
+ public static MeasureUnitConverter DoubleInstance { get; }
+ }
+
+
+ public class MeasureUnitConverter : IMultiValueConverter
+ {
+ public object? Convert(IList