aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2018-03-14 10:34:23 +0200
committerShlomo Hecht <shlomo@twine-s.com>2018-03-14 10:34:23 +0200
commit9d04bbb2b4a2eb2eb14cc813103c856b7bde975a (patch)
tree093b1cdcd808e600f44fd8ccd5465978c572822e /Software
parent5652ed578179a7221b443d11855d555dc6ae05cd (diff)
parent37b740c1d128d694b9dcbc3669808435b5d88fec (diff)
downloadTango-9d04bbb2b4a2eb2eb14cc813103c856b7bde975a.tar.gz
Tango-9d04bbb2b4a2eb2eb14cc813103c856b7bde975a.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software')
-rw-r--r--Software/DB/Change Scripts/Cascade Machine Delete To Configuration.sqlbin0 -> 2824 bytes
-rw-r--r--Software/DB/Change Scripts/Cascade User Delete To Contact and Address.sqlbin0 -> 3816 bytes
-rw-r--r--Software/DB/Tango.mdfbin75497472 -> 75497472 bytes
-rw-r--r--Software/DB/Tango_log.ldfbin1048576 -> 1048576 bytes
-rw-r--r--Software/Graphics/controller.pngbin0 -> 1667 bytes
-rw-r--r--Software/Graphics/organization.pngbin0 -> 8799 bytes
-rw-r--r--Software/Graphics/roles.pngbin0 -> 3875 bytes
-rw-r--r--Software/Graphics/user.pngbin0 -> 20100 bytes
-rw-r--r--Software/Graphics/users-and-roles.jpgbin0 -> 79651 bytes
-rw-r--r--Software/Graphics/users.pngbin0 -> 17867 bytes
-rw-r--r--Software/PMR/Messages/ColorLab/ColorSpace.proto30
-rw-r--r--Software/PMR/Messages/ColorLab/ConversionInput.proto2
-rw-r--r--Software/PMR/Messages/ColorLab/LiquidType.proto34
-rw-r--r--Software/PMR/Messages/Common/MessageType.proto2
-rw-r--r--Software/PMR/Messages/Diagnostics/DiagnosticsMonitors.proto129
-rw-r--r--Software/PMR/Messages/Diagnostics/PushDiagnosticsResponse.proto32
-rw-r--r--Software/PMR/Messages/Diagnostics/SetComponentValueRequest.proto12
-rw-r--r--Software/PMR/Messages/Diagnostics/SetComponentValueResponse.proto9
-rw-r--r--Software/PMR/Messages/Diagnostics/ValueComponent.proto25
-rw-r--r--Software/PMR/Messages/Diagnostics/ValueComponentState.proto12
-rw-r--r--Software/PMR/Messages/Hardware/HardwareDancer.proto12
-rw-r--r--Software/PMR/Messages/Hardware/HardwareDancerType.proto19
-rw-r--r--Software/PMR/Messages/Hardware/HardwareDispenser.proto12
-rw-r--r--Software/PMR/Messages/Hardware/HardwareDispenserType.proto12
-rw-r--r--Software/PMR/Messages/Hardware/HardwareMotor.proto12
-rw-r--r--Software/PMR/Messages/Hardware/HardwareMotorType.proto26
-rw-r--r--Software/PMR/Messages/Hardware/HardwarePidControl.proto12
-rw-r--r--Software/PMR/Messages/Hardware/HardwarePidControlType.proto26
-rw-r--r--Software/PMR/Messages/Hardware/HardwareWinder.proto12
-rw-r--r--Software/PMR/Messages/Hardware/HardwareWinderType.proto13
-rw-r--r--Software/PMR/Messages/Printing/DispenserLiquidType.proto12
-rw-r--r--Software/PMR/Messages/Printing/JobSpool.proto12
-rw-r--r--Software/PMR/Messages/Printing/JobSpoolType.proto12
-rw-r--r--Software/PMR/Messages/Printing/JobWindingMethod.proto14
-rw-r--r--Software/PMR/Messages/Printing/ProcessParameters.proto12
-rw-r--r--Software/Visual_Studio/Embroidery/Tango.Embroidery/Tango.Embroidery.vcxproj6
-rw-r--r--Software/Visual_Studio/Embroidery/Tango.EmbroideryUI/Tango.EmbroideryUI.csproj2
-rw-r--r--Software/Visual_Studio/Embroidery/libEmbroideryTest/libEmbroideryTest.vcxproj5
-rw-r--r--Software/Visual_Studio/Embroidery/project-files/visualstudio/libEmbroideryVS2008.vcxproj9
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ColorLabModule.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Tango.MachineStudio.ColorLab.csproj3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataVM.cs9
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/LiquidVolumeVM.cs9
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs225
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/RgbVM.cs69
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml35
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml.cs11
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Tango.MachineStudio.DB.csproj2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/DBViews/MediaColorView.xaml8
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/DBViews/MediaColorsView.xaml6
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Tango.MachineStudio.DataCapture.csproj2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs24
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/EmbroideryImportView.xaml2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml4
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml.cs3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner.csproj2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Tango.MachineStudio.Stubs.csproj2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml140
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml.cs90
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Images/controller.pngbin0 -> 1667 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/PropertiesTemplates/ControllerTemplate.xaml41
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/PropertiesTemplates/ControllerTemplate.xaml.cs28
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Tango.MachineStudio.Technician.csproj24
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechItems/ControllerItem.cs121
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechItems/TechItem.cs1
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs72
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Views/MachineTechView.xaml3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/organization.pngbin0 -> 8799 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/roles.pngbin0 -> 3875 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/user.pngbin0 -> 20100 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/users-and-roles.jpgbin0 -> 79651 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/users.pngbin0 -> 17867 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Navigation/UsersAndRolesNavigationManager.cs22
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Navigation/UsersAndRolesNavigationView.cs15
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/AssemblyInfo.cs18
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Resources.Designer.cs62
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Resources.resx117
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Settings.Designer.cs30
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Settings.settings7
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/Place.cs31
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/PlaceAddress.cs53
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/PlacesProvider.cs47
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Tango.MachineStudio.UsersAndRoles.csproj222
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/UsersAndRolesModule.cs62
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModelLocator.cs36
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs370
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/AddressView.xaml33
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/AddressView.xaml.cs28
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/ContactView.xaml29
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/ContactView.xaml.cs28
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/MainView.xaml28
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/MainView.xaml.cs31
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml151
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml.cs34
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationSelectionView.xaml69
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationSelectionView.xaml.cs28
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml243
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml.cs57
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml23
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml.cs28
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/app.config11
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/packages.config10
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveColorPickerControl.xaml35
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveColorPickerControl.xaml.cs118
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveComboControl.xaml54
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveComboControl.xaml.cs135
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj13
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Installer/Tango.MachineStudio.Installer.vdproj1063
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindow.xaml2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/Tango.MachineStudio.Publisher.csproj2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml10
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs13
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj8
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs11
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs9
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ShutdownViewVM.cs4
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml9
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs1
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml.cs8
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml4
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Tango.MachineStudio.UpdateService.csproj5
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Updater/Tango.MachineStudio.Updater.csproj2
-rw-r--r--Software/Visual_Studio/Native/Tango.ColorLib/Tango.ColorLib.vcxproj5
-rw-r--r--Software/Visual_Studio/Native/Tango.ProtoTest/Tango.ProtoTest.vcxproj16
-rw-r--r--Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.xaml14
-rw-r--r--Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs2
-rw-r--r--Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj2
-rw-r--r--Software/Visual_Studio/SideChains/Tango.AutoComplete/Editors/Themes/Generic.xaml3
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/MediaColor.cs72
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/TechController.cs144
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/TechHeater.cs84
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/User.cs20
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/BrushStop.cs (renamed from Software/Visual_Studio/Tango.BL/ObservablesExtensions/BrushStop.cs)0
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/Cat.cs (renamed from Software/Visual_Studio/Tango.BL/ObservablesExtensions/Cat.cs)0
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/Configuration.cs (renamed from Software/Visual_Studio/Tango.BL/ObservablesExtensions/Configuration.cs)0
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/Contact.cs52
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/HardwareVersion.cs (renamed from Software/Visual_Studio/Tango.BL/ObservablesExtensions/HardwareVersion.cs)0
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/Job.cs (renamed from Software/Visual_Studio/Tango.BL/ObservablesExtensions/Job.cs)0
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/Machine.cs (renamed from Software/Visual_Studio/Tango.BL/ObservablesExtensions/Machine.cs)0
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/MachineVersion.cs (renamed from Software/Visual_Studio/Tango.BL/ObservablesExtensions/MachineVersion.cs)0
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/ProcessParametersTable.cs (renamed from Software/Visual_Studio/Tango.BL/ObservablesExtensions/ProcessParametersTable.cs)0
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/Segment.cs (renamed from Software/Visual_Studio/Tango.BL/ObservablesExtensions/Segment.cs)0
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/User.cs77
-rw-r--r--Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs12
-rw-r--r--Software/Visual_Studio/Tango.BL/Enumerations/Roles.cs12
-rw-r--r--Software/Visual_Studio/Tango.BL/Enumerations/Sensors.cs181
-rw-r--r--Software/Visual_Studio/Tango.BL/Enumerations/TechControllers.cs25
-rw-r--r--Software/Visual_Studio/Tango.BL/ExtensionMethods/MediaColor.cs33
-rw-r--r--Software/Visual_Studio/Tango.BL/IObservableEntity.cs12
-rw-r--r--Software/Visual_Studio/Tango.BL/ObservableEntity.cs34
-rw-r--r--Software/Visual_Studio/Tango.BL/ObservablesContext.cs8
-rw-r--r--Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapter.cs2
-rw-r--r--Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapterExtension.cs44
-rw-r--r--Software/Visual_Studio/Tango.BL/ObservablesExtensions/User.cs44
-rw-r--r--Software/Visual_Studio/Tango.BL/Tango.BL.csproj30
-rw-r--r--Software/Visual_Studio/Tango.BL/packages.config1
-rw-r--r--Software/Visual_Studio/Tango.BrushPicker/Tango.BrushPicker.csproj2
-rw-r--r--Software/Visual_Studio/Tango.CircularGauge/CircularGaugeControl.cs1419
-rw-r--r--Software/Visual_Studio/Tango.CircularGauge/Properties/AssemblyInfo.cs18
-rw-r--r--Software/Visual_Studio/Tango.CircularGauge/Properties/Resources.Designer.cs63
-rw-r--r--Software/Visual_Studio/Tango.CircularGauge/Properties/Resources.resx117
-rw-r--r--Software/Visual_Studio/Tango.CircularGauge/Properties/Settings.Designer.cs26
-rw-r--r--Software/Visual_Studio/Tango.CircularGauge/Properties/Settings.settings7
-rw-r--r--Software/Visual_Studio/Tango.CircularGauge/Tango.CircularGauge.csproj128
-rw-r--r--Software/Visual_Studio/Tango.CircularGauge/Themes/Generic.xaml174
-rw-r--r--Software/Visual_Studio/Tango.CircularGauge/TypeConverters.cs277
-rw-r--r--Software/Visual_Studio/Tango.CodeGeneration/ProtoMessageFile.cs6
-rw-r--r--Software/Visual_Studio/Tango.CodeGeneration/ProtoProperty.cs26
-rw-r--r--Software/Visual_Studio/Tango.CodeGeneration/Tango.CodeGeneration.csproj3
-rw-r--r--Software/Visual_Studio/Tango.CodeGeneration/Templates/ProtoEnumFile.cshtml13
-rw-r--r--Software/Visual_Studio/Tango.CodeGeneration/Templates/ProtoMessageFile.cshtml15
-rw-r--r--Software/Visual_Studio/Tango.ColorPicker/Tango.ColorPicker.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Core/ExtensionMethods/DependencyObjectExtensions.cs2
-rw-r--r--Software/Visual_Studio/Tango.Core/ExtensionMethods/StringExtensions.cs22
-rw-r--r--Software/Visual_Studio/Tango.Core/Tango.Core.csproj2
-rw-r--r--Software/Visual_Studio/Tango.DAL.Local/Tango.DAL.Local.csproj2
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/MEDIA_COLORS.cs5
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.Context.cs2
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx111
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram132
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/TECH_CONTROLLERS.cs (renamed from Software/Visual_Studio/Tango.DAL.Remote/DB/TECH_HEATERS.cs)5
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/USER.cs1
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/Tango.DAL.Remote.csproj6
-rw-r--r--Software/Visual_Studio/Tango.DragAndDrop/Tango.DragAndDrop.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Editors/StringExtensions.cs107
-rw-r--r--Software/Visual_Studio/Tango.Editors/Tango.Editors.csproj11
-rw-r--r--Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs77
-rw-r--r--Software/Visual_Studio/Tango.Emulations/Tango.Emulations.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs7
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs10
-rw-r--r--Software/Visual_Studio/Tango.Integration/Services/ExternalBridgeScanner.cs8
-rw-r--r--Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Logging/Tango.Logging.csproj2
-rw-r--r--Software/Visual_Studio/Tango.PMR/ColorLab/ColorSpace.cs4
-rw-r--r--Software/Visual_Studio/Tango.PMR/ColorLab/ConversionInput.cs65
-rw-r--r--Software/Visual_Studio/Tango.PMR/ColorLab/LiquidType.cs9
-rw-r--r--Software/Visual_Studio/Tango.PMR/Common/MessageType.cs21
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/DiagnosticsMonitors.cs1017
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/PushDiagnosticsResponse.cs353
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/SetComponentValueRequest.cs189
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/SetComponentValueResponse.cs131
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/ValueComponent.cs52
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/ValueComponentState.cs189
-rw-r--r--Software/Visual_Studio/Tango.PMR/ExtensionMethods.cs4
-rw-r--r--Software/Visual_Studio/Tango.PMR/Hardware/HardwareDancerType.cs9
-rw-r--r--Software/Visual_Studio/Tango.PMR/Hardware/HardwareMotorType.cs12
-rw-r--r--Software/Visual_Studio/Tango.PMR/Hardware/HardwarePidControlType.cs42
-rw-r--r--Software/Visual_Studio/Tango.PMR/Hardware/HardwareWinderType.cs3
-rw-r--r--Software/Visual_Studio/Tango.PMR/MessageFactory.cs25
-rw-r--r--Software/Visual_Studio/Tango.PMR/Printing/JobWindingMethod.cs6
-rw-r--r--Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj7
-rw-r--r--Software/Visual_Studio/Tango.Protobuf/Tango.Protobuf.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Scripting/Tango.Scripting.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Serialization/Tango.Serialization.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Settings/Tango.Settings.csproj2
-rw-r--r--Software/Visual_Studio/Tango.SharedUI/Controls/HiveControl.xaml.cs35
-rw-r--r--Software/Visual_Studio/Tango.SharedUI/Controls/TableGrid.cs70
-rw-r--r--Software/Visual_Studio/Tango.SharedUI/Helpers/PasswordHelper.cs98
-rw-r--r--Software/Visual_Studio/Tango.SharedUI/Tango.SharedUI.csproj4
-rw-r--r--Software/Visual_Studio/Tango.Stubs/StubBase.cs5
-rw-r--r--Software/Visual_Studio/Tango.Stubs/Tango.Stubs.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Synchronization/Tango.Synchronization.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs2
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs2
-rw-r--r--Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Transport/TransporterBase.cs9
-rw-r--r--Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Visuals/Tango.Visuals.csproj2
-rw-r--r--Software/Visual_Studio/Tango.sln79
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DBObservablesGenerator.CLI/Tango.DBObservablesGenerator.CLI.csproj2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.EmbroideryViewer/Tango.EmbroideryViewer.csproj2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.MachineEM.UI/Tango.MachineEM.UI.csproj2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.PMRGenerator.CLI/Program.cs138
-rw-r--r--Software/Visual_Studio/Utilities/Tango.PMRGenerator.CLI/Tango.PMRGenerator.CLI.csproj2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Protobuf.CLI/Tango.Protobuf.CLI.csproj2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Protobuf.UI/Tango.Protobuf.UI.csproj2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.SQLiteGenerator.CLI/Tango.SQLiteGenerator.CLI.csproj2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.ShortcutGenerator.CLI/Tango.ShortcutGenerator.CLI.csproj2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Stubs.CLI/Tango.Stubs.CLI.csproj2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Stubs.Installer/Tango.Stubs.Installer.vdproj1574
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Stubs.UI/Resources/CodeTabTemplate.cs9
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Stubs.UI/StubManager.cs56
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Stubs.UI/Tango.Stubs.UI.csproj4
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Stubs.UI/ViewModels/MainViewVM.cs122
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Stubs.UI/Views/MainView.xaml7
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Stubs.UI/Views/MainView.xaml.cs15
-rw-r--r--Software/Visual_Studio/Utilities/Tango.TransportRouter.UI/Tango.TransportRouter.UI.csproj4
-rw-r--r--Software/Visual_Studio/Utilities/Tango.UITests/Tango.UITests.csproj2
254 files changed, 10242 insertions, 2816 deletions
diff --git a/Software/DB/Change Scripts/Cascade Machine Delete To Configuration.sql b/Software/DB/Change Scripts/Cascade Machine Delete To Configuration.sql
new file mode 100644
index 000000000..a0a38b6dc
--- /dev/null
+++ b/Software/DB/Change Scripts/Cascade Machine Delete To Configuration.sql
Binary files differ
diff --git a/Software/DB/Change Scripts/Cascade User Delete To Contact and Address.sql b/Software/DB/Change Scripts/Cascade User Delete To Contact and Address.sql
new file mode 100644
index 000000000..052655968
--- /dev/null
+++ b/Software/DB/Change Scripts/Cascade User Delete To Contact and Address.sql
Binary files differ
diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf
index 0b5f81486..632ab86ed 100644
--- a/Software/DB/Tango.mdf
+++ b/Software/DB/Tango.mdf
Binary files differ
diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf
index c1c265fec..1265c49c9 100644
--- a/Software/DB/Tango_log.ldf
+++ b/Software/DB/Tango_log.ldf
Binary files differ
diff --git a/Software/Graphics/controller.png b/Software/Graphics/controller.png
new file mode 100644
index 000000000..5794f6cd8
--- /dev/null
+++ b/Software/Graphics/controller.png
Binary files differ
diff --git a/Software/Graphics/organization.png b/Software/Graphics/organization.png
new file mode 100644
index 000000000..9f7ee9851
--- /dev/null
+++ b/Software/Graphics/organization.png
Binary files differ
diff --git a/Software/Graphics/roles.png b/Software/Graphics/roles.png
new file mode 100644
index 000000000..e7955be04
--- /dev/null
+++ b/Software/Graphics/roles.png
Binary files differ
diff --git a/Software/Graphics/user.png b/Software/Graphics/user.png
new file mode 100644
index 000000000..c8b7a3b40
--- /dev/null
+++ b/Software/Graphics/user.png
Binary files differ
diff --git a/Software/Graphics/users-and-roles.jpg b/Software/Graphics/users-and-roles.jpg
new file mode 100644
index 000000000..2304e25b6
--- /dev/null
+++ b/Software/Graphics/users-and-roles.jpg
Binary files differ
diff --git a/Software/Graphics/users.png b/Software/Graphics/users.png
new file mode 100644
index 000000000..805700c66
--- /dev/null
+++ b/Software/Graphics/users.png
Binary files differ
diff --git a/Software/PMR/Messages/ColorLab/ColorSpace.proto b/Software/PMR/Messages/ColorLab/ColorSpace.proto
index 3d97f7516..f7f162d10 100644
--- a/Software/PMR/Messages/ColorLab/ColorSpace.proto
+++ b/Software/PMR/Messages/ColorLab/ColorSpace.proto
@@ -1,15 +1,29 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
+
syntax = "proto3";
package Tango.PMR.ColorLab;
-
option java_package = "com.twine.tango.pmr.colorlab";
-
enum ColorSpace
{
- Volume = 0;
- RGB = 1;
- CMYK = 2;
- LAB = 3;
- Panton = 4;
-} \ No newline at end of file
+
+ Volume = 0;
+
+ RGB = 1;
+
+ CMYK = 2;
+
+ LAB = 3;
+
+ PANTON = 4;
+
+}
diff --git a/Software/PMR/Messages/ColorLab/ConversionInput.proto b/Software/PMR/Messages/ColorLab/ConversionInput.proto
index 1c0ce472e..89dac5e7c 100644
--- a/Software/PMR/Messages/ColorLab/ConversionInput.proto
+++ b/Software/PMR/Messages/ColorLab/ConversionInput.proto
@@ -16,4 +16,6 @@ message ConversionInput
bytes ForwardData = 6;
bytes InverseData = 7;
double SegmentLength = 8;
+ double DeltaChroma = 9;
+ double DeltaL = 10;
} \ No newline at end of file
diff --git a/Software/PMR/Messages/ColorLab/LiquidType.proto b/Software/PMR/Messages/ColorLab/LiquidType.proto
index 4f36b859f..255d9607b 100644
--- a/Software/PMR/Messages/ColorLab/LiquidType.proto
+++ b/Software/PMR/Messages/ColorLab/LiquidType.proto
@@ -1,15 +1,33 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
+
syntax = "proto3";
package Tango.PMR.ColorLab;
-
option java_package = "com.twine.tango.pmr.colorlab";
-
enum LiquidType
{
- Cyan = 0;
- Magenta = 1;
- Yellow = 2;
- Black = 3;
- TransparentInk = 4;
-} \ No newline at end of file
+
+ Cyan = 0;
+
+ Magenta = 1;
+
+ Yellow = 2;
+
+ Black = 3;
+
+ TransparentInk = 4;
+
+ Lubricant = 5;
+
+ Red = 7;
+
+}
diff --git a/Software/PMR/Messages/Common/MessageType.proto b/Software/PMR/Messages/Common/MessageType.proto
index 8ba5158ff..6f7848c9e 100644
--- a/Software/PMR/Messages/Common/MessageType.proto
+++ b/Software/PMR/Messages/Common/MessageType.proto
@@ -107,6 +107,8 @@ enum MessageType
ThreadJoggingResponse = 2021;
ThreadAbortJoggingRequest = 2022;
ThreadAbortJoggingResponse = 2023;
+ SetComponentValueRequest = 2024;
+ SetComponentValueResponse = 2025;
//Printing
diff --git a/Software/PMR/Messages/Diagnostics/DiagnosticsMonitors.proto b/Software/PMR/Messages/Diagnostics/DiagnosticsMonitors.proto
new file mode 100644
index 000000000..6bba594d5
--- /dev/null
+++ b/Software/PMR/Messages/Diagnostics/DiagnosticsMonitors.proto
@@ -0,0 +1,129 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+syntax = "proto3";
+
+import "DoubleArray.proto";
+
+package Tango.PMR.Diagnostics;
+option java_package = "com.twine.tango.pmr.diagnostics";
+
+message DiagnosticsMonitors
+{
+
+ //Dancer 1 (Min = 0, Max = 255, PPF = 10)
+ repeated double Dancer1Angle = 1;
+
+ //Dancer 2 (Min = 0, Max = 1200, PPF = 1)
+ repeated double Dancer2Angle = 2;
+
+ //Dancer 3 (Min = 0, Max = 1200, PPF = 1)
+ repeated double Dancer3Angle = 3;
+
+ //Feeder Motor (Min = 0, Max = 100, PPF = 1)
+ repeated double FeederMotorFrequency = 4;
+
+ //Dryer Motor (Min = 0, Max = 100, PPF = 1)
+ repeated double DryerMotor = 5;
+
+ //Poller Motor (Min = 0, Max = 100, PPF = 1)
+ repeated double PollerMotor = 6;
+
+ //Winder Motor (Min = 0, Max = 100, PPF = 1)
+ repeated double WinderMotor = 7;
+
+ //Screw Motor (Min = 0, Max = 100, PPF = 1)
+ repeated double ScrewMotor = 8;
+
+ //Thread Speed (Min = 0, Max = 100, PPF = 1)
+ repeated double ThreadSpeed = 9;
+
+ //Mixer (Min = 0, Max = 100, PPF = 1)
+ repeated double MixerTemperature = 10;
+
+ //Head Zone 1 (Min = 0, Max = 100, PPF = 1)
+ repeated double HeadZone1Temperature = 11;
+
+ //Head Zone 2 (Min = 0, Max = 100, PPF = 1)
+ repeated double HeadZone2Temperature = 12;
+
+ //Head Zone 3 (Min = 0, Max = 100, PPF = 1)
+ repeated double HeadZone3Temperature = 13;
+
+ //Head Air Flow (Min = 0, Max = 100, PPF = 1)
+ repeated double HeadAirFlow = 14;
+
+ //Feeder Tension (Min = 0, Max = 100, PPF = 1)
+ repeated double FeederTension = 15;
+
+ //Puller Tension (Min = 0, Max = 100, PPF = 1)
+ repeated double PullerTension = 16;
+
+ //Dryer Zone 1 (Min = 0, Max = 100, PPF = 1)
+ repeated double DryerZone1Temperature = 17;
+
+ //Dryer Zone 2 (Min = 0, Max = 100, PPF = 1)
+ repeated double DryerZone2Temperature = 18;
+
+ //Dryer Zone 3 (Min = 0, Max = 100, PPF = 1)
+ repeated double DryerZone3Temperature = 19;
+
+ //Dryer Air Flow (Min = 0, Max = 100, PPF = 1)
+ repeated double DryerAirFlow = 20;
+
+ //Winder Tension (Min = 0, Max = 100, PPF = 1)
+ repeated double WinderTension = 21;
+
+ //Dispensers Motors (Min = 0, Max = 1080, PPF = 10) Channel Count = 8
+ repeated DoubleArray DispensersMotorsFrequency = 22;
+
+ //Dispensers Angular Encoders (Min = 0, Max = 100, PPF = 1) Channel Count = 8
+ repeated DoubleArray DispensersAngularEncoders = 23;
+
+ //Dispensers Linear Positions (Min = 0, Max = 100, PPF = 1) Channel Count = 8
+ repeated DoubleArray DispensersLinearPositions = 24;
+
+ //Dispensers Pressure (Min = 0, Max = 100, PPF = 1) Channel Count = 8
+ repeated DoubleArray DispensersPressure = 25;
+
+ //Mid Tank Pressure (Min = 0, Max = 100, PPF = 1)
+ repeated double MidTankPressure = 26;
+
+ //Filter Delta Pressure (Min = 0, Max = 100, PPF = 1)
+ repeated double FilterDeltaPressure = 27;
+
+ //Chiller Temperature (Min = 0, Max = 100, PPF = 1)
+ repeated double ChillerTemperature = 28;
+
+ //Dispenser 1 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ repeated double Dispenser1MotorFrequency = 29;
+
+ //Dispenser 2 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ repeated double Dispenser2MotorFrequency = 30;
+
+ //Dispenser 3 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ repeated double Dispenser3MotorFrequency = 31;
+
+ //Dispenser 4 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ repeated double Dispenser4MotorFrequency = 32;
+
+ //Dispenser 5 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ repeated double Dispenser5MotorFrequency = 33;
+
+ //Dispenser 6 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ repeated double Dispenser6MotorFrequency = 34;
+
+ //Dispenser 7 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ repeated double Dispenser7MotorFrequency = 35;
+
+ //Dispenser 8 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ repeated double Dispenser8MotorFrequency = 36;
+
+}
diff --git a/Software/PMR/Messages/Diagnostics/PushDiagnosticsResponse.proto b/Software/PMR/Messages/Diagnostics/PushDiagnosticsResponse.proto
index c6af16fce..5a0940b78 100644
--- a/Software/PMR/Messages/Diagnostics/PushDiagnosticsResponse.proto
+++ b/Software/PMR/Messages/Diagnostics/PushDiagnosticsResponse.proto
@@ -1,35 +1,25 @@
syntax = "proto3";
-import "DoubleArray.proto";
import "DigitalPin.proto";
+import "ValueComponentState.proto";
+import "DiagnosticsMonitors.proto";
package Tango.PMR.Diagnostics;
option java_package = "com.twine.tango.pmr.diagnostics";
message PushDiagnosticsResponse
{
- repeated double Dancer1Angle = 1;
- repeated double Dancer2Angle = 2;
- repeated double Dancer3Angle = 3;
-
- //Dispensers Motors Frequency Multi
- repeated DoubleArray DispensersMotorsFrequency = 4;
-
- //Dispensers Motors Frequency Singles
- repeated double Dispenser1MotorFrequency = 5;
- repeated double Dispenser2MotorFrequency = 6;
- repeated double Dispenser3MotorFrequency = 7;
- repeated double Dispenser4MotorFrequency = 8;
- repeated double Dispenser5MotorFrequency = 9;
- repeated double Dispenser6MotorFrequency = 10;
- repeated double Dispenser7MotorFrequency = 11;
- repeated double Dispenser8MotorFrequency = 12;
+ //Monitors
+ DiagnosticsMonitors Monitors = 1;
//Digital Pins States
- repeated DigitalPin DigitalPins = 13;
+ repeated DigitalPin DigitalPins = 2;
+
+ //Value Components Effective Values
+ repeated ValueComponentState ComponentsStates = 3;
//Software Information
- string Version = 14;
- string VersionName = 15;
- string VersionBuildDate = 16;
+ string Version = 4;
+ string VersionName = 5;
+ string VersionBuildDate = 6;
} \ No newline at end of file
diff --git a/Software/PMR/Messages/Diagnostics/SetComponentValueRequest.proto b/Software/PMR/Messages/Diagnostics/SetComponentValueRequest.proto
new file mode 100644
index 000000000..c38ec90d6
--- /dev/null
+++ b/Software/PMR/Messages/Diagnostics/SetComponentValueRequest.proto
@@ -0,0 +1,12 @@
+syntax = "proto3";
+
+import "ValueComponent.proto";
+
+package Tango.PMR.Diagnostics;
+option java_package = "com.twine.tango.pmr.diagnostics";
+
+message SetComponentValueRequest
+{
+ ValueComponent Component = 1;
+ double Value = 2;
+} \ No newline at end of file
diff --git a/Software/PMR/Messages/Diagnostics/SetComponentValueResponse.proto b/Software/PMR/Messages/Diagnostics/SetComponentValueResponse.proto
new file mode 100644
index 000000000..e590d0778
--- /dev/null
+++ b/Software/PMR/Messages/Diagnostics/SetComponentValueResponse.proto
@@ -0,0 +1,9 @@
+syntax = "proto3";
+
+package Tango.PMR.Diagnostics;
+option java_package = "com.twine.tango.pmr.diagnostics";
+
+message SetComponentValueResponse
+{
+
+} \ No newline at end of file
diff --git a/Software/PMR/Messages/Diagnostics/ValueComponent.proto b/Software/PMR/Messages/Diagnostics/ValueComponent.proto
new file mode 100644
index 000000000..a6bc1a50a
--- /dev/null
+++ b/Software/PMR/Messages/Diagnostics/ValueComponent.proto
@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+syntax = "proto3";
+
+package Tango.PMR.Diagnostics;
+option java_package = "com.twine.tango.pmr.diagnostics";
+
+enum ValueComponent
+{
+
+ //Heater 1 Temperature (Min = 0, Max = 100)
+ Heater1Temp = 0;
+
+ //Heater 2 Temperature (Min = 0, Max = 100)
+ Heater2Temp = 1;
+
+}
diff --git a/Software/PMR/Messages/Diagnostics/ValueComponentState.proto b/Software/PMR/Messages/Diagnostics/ValueComponentState.proto
new file mode 100644
index 000000000..d22c7ba97
--- /dev/null
+++ b/Software/PMR/Messages/Diagnostics/ValueComponentState.proto
@@ -0,0 +1,12 @@
+syntax = "proto3";
+
+import "ValueComponent.proto";
+
+package Tango.PMR.Diagnostics;
+option java_package = "com.twine.tango.pmr.diagnostics";
+
+message ValueComponentState
+{
+ ValueComponent Component = 1;
+ double Value = 2;
+} \ No newline at end of file
diff --git a/Software/PMR/Messages/Hardware/HardwareDancer.proto b/Software/PMR/Messages/Hardware/HardwareDancer.proto
index 43b9435ee..5933b7cb4 100644
--- a/Software/PMR/Messages/Hardware/HardwareDancer.proto
+++ b/Software/PMR/Messages/Hardware/HardwareDancer.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
import "HardwareDancerType.proto";
diff --git a/Software/PMR/Messages/Hardware/HardwareDancerType.proto b/Software/PMR/Messages/Hardware/HardwareDancerType.proto
index 658e219d8..b51f10c7a 100644
--- a/Software/PMR/Messages/Hardware/HardwareDancerType.proto
+++ b/Software/PMR/Messages/Hardware/HardwareDancerType.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
package Tango.PMR.Hardware;
option java_package = "com.twine.tango.pmr.hardware";
@@ -8,10 +16,13 @@ option java_package = "com.twine.tango.pmr.hardware";
enum HardwareDancerType
{
- RightDancer = 0;
+ //Left Dancer
+ LeftDancer = 0;
+ //Middle Dancer
MiddleDancer = 1;
- LeftDancer = 2;
+ //Right Dancer
+ RightDancer = 2;
}
diff --git a/Software/PMR/Messages/Hardware/HardwareDispenser.proto b/Software/PMR/Messages/Hardware/HardwareDispenser.proto
index 7e8461193..ab5d766df 100644
--- a/Software/PMR/Messages/Hardware/HardwareDispenser.proto
+++ b/Software/PMR/Messages/Hardware/HardwareDispenser.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
import "HardwareDispenserType.proto";
diff --git a/Software/PMR/Messages/Hardware/HardwareDispenserType.proto b/Software/PMR/Messages/Hardware/HardwareDispenserType.proto
index fd723f896..21dc87530 100644
--- a/Software/PMR/Messages/Hardware/HardwareDispenserType.proto
+++ b/Software/PMR/Messages/Hardware/HardwareDispenserType.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
package Tango.PMR.Hardware;
option java_package = "com.twine.tango.pmr.hardware";
diff --git a/Software/PMR/Messages/Hardware/HardwareMotor.proto b/Software/PMR/Messages/Hardware/HardwareMotor.proto
index accc2a5ff..dbce226c7 100644
--- a/Software/PMR/Messages/Hardware/HardwareMotor.proto
+++ b/Software/PMR/Messages/Hardware/HardwareMotor.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
import "HardwareMotorType.proto";
diff --git a/Software/PMR/Messages/Hardware/HardwareMotorType.proto b/Software/PMR/Messages/Hardware/HardwareMotorType.proto
index d9b8581fa..d67bb5b0a 100644
--- a/Software/PMR/Messages/Hardware/HardwareMotorType.proto
+++ b/Software/PMR/Messages/Hardware/HardwareMotorType.proto
@@ -1,17 +1,31 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
package Tango.PMR.Hardware;
option java_package = "com.twine.tango.pmr.hardware";
enum HardwareMotorType
{
- FeederMotor = 0;
- DryerMotor = 1;
+ //Winder Motor
+ WinderMotor = 0;
+
+ //Feeder Motor
+ FeederMotor = 1;
+
+ //Dryer Motor
+ DryerMotor = 2;
- PoolerMotor = 2;
+ //Pooler Motor
+ PoolerMotor = 3;
- WinderMotor = 3;
}
diff --git a/Software/PMR/Messages/Hardware/HardwarePidControl.proto b/Software/PMR/Messages/Hardware/HardwarePidControl.proto
index 49f1928cd..d02ea14d1 100644
--- a/Software/PMR/Messages/Hardware/HardwarePidControl.proto
+++ b/Software/PMR/Messages/Hardware/HardwarePidControl.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
import "HardwarePidControlType.proto";
diff --git a/Software/PMR/Messages/Hardware/HardwarePidControlType.proto b/Software/PMR/Messages/Hardware/HardwarePidControlType.proto
index e9fa9fd30..38785e85b 100644
--- a/Software/PMR/Messages/Hardware/HardwarePidControlType.proto
+++ b/Software/PMR/Messages/Hardware/HardwarePidControlType.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
package Tango.PMR.Hardware;
option java_package = "com.twine.tango.pmr.hardware";
@@ -8,32 +16,46 @@ option java_package = "com.twine.tango.pmr.hardware";
enum HardwarePidControlType
{
+ //Dryer Heater 1000w
DryerHeater1000w = 0;
+ //Dryer Heater 200w 1
DryerHeater200w1 = 1;
+ //Dryer Heater 200w 2
DryerHeater200w2 = 2;
+ //Head Heater Zone 1
HeadHeaterZ1 = 3;
+ //Head Heater Zone 2
HeadHeaterZ2 = 4;
+ //Head Heater Zone 3
HeadHeaterZ3 = 5;
+ //Head Heater Zone 4
HeadHeaterZ4 = 6;
+ //Mixer Heater
MixerHeater = 7;
+ //Waste Control
WasteControl = 8;
+ //Dryer Motor
MotorDryer = 9;
+ //Feeder Motor
MotorFeeder = 10;
+ //Pooler Motor
MotorPooler = 11;
+ //Winder Motor
MotorWinder = 12;
+ //Dryer Heater 400
DryerHeater400 = 13;
}
diff --git a/Software/PMR/Messages/Hardware/HardwareWinder.proto b/Software/PMR/Messages/Hardware/HardwareWinder.proto
index a9ba73af2..c00b56c83 100644
--- a/Software/PMR/Messages/Hardware/HardwareWinder.proto
+++ b/Software/PMR/Messages/Hardware/HardwareWinder.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
import "HardwareWinderType.proto";
diff --git a/Software/PMR/Messages/Hardware/HardwareWinderType.proto b/Software/PMR/Messages/Hardware/HardwareWinderType.proto
index 4064c96af..d3cc0a74e 100644
--- a/Software/PMR/Messages/Hardware/HardwareWinderType.proto
+++ b/Software/PMR/Messages/Hardware/HardwareWinderType.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
package Tango.PMR.Hardware;
option java_package = "com.twine.tango.pmr.hardware";
@@ -8,6 +16,7 @@ option java_package = "com.twine.tango.pmr.hardware";
enum HardwareWinderType
{
+ //Internal Winder
InternalWinder = 0;
}
diff --git a/Software/PMR/Messages/Printing/DispenserLiquidType.proto b/Software/PMR/Messages/Printing/DispenserLiquidType.proto
index 27757a92d..0288ee949 100644
--- a/Software/PMR/Messages/Printing/DispenserLiquidType.proto
+++ b/Software/PMR/Messages/Printing/DispenserLiquidType.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
package Tango.PMR.Printing;
option java_package = "com.twine.tango.pmr.printing";
diff --git a/Software/PMR/Messages/Printing/JobSpool.proto b/Software/PMR/Messages/Printing/JobSpool.proto
index a431ff9f8..ba2fb4112 100644
--- a/Software/PMR/Messages/Printing/JobSpool.proto
+++ b/Software/PMR/Messages/Printing/JobSpool.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
import "JobSpoolType.proto";
diff --git a/Software/PMR/Messages/Printing/JobSpoolType.proto b/Software/PMR/Messages/Printing/JobSpoolType.proto
index c9bc45ed8..afe6b3331 100644
--- a/Software/PMR/Messages/Printing/JobSpoolType.proto
+++ b/Software/PMR/Messages/Printing/JobSpoolType.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
package Tango.PMR.Printing;
option java_package = "com.twine.tango.pmr.printing";
diff --git a/Software/PMR/Messages/Printing/JobWindingMethod.proto b/Software/PMR/Messages/Printing/JobWindingMethod.proto
index a567915b7..32c354458 100644
--- a/Software/PMR/Messages/Printing/JobWindingMethod.proto
+++ b/Software/PMR/Messages/Printing/JobWindingMethod.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
package Tango.PMR.Printing;
option java_package = "com.twine.tango.pmr.printing";
@@ -8,8 +16,10 @@ option java_package = "com.twine.tango.pmr.printing";
enum JobWindingMethod
{
+ //Embroidery Winding
Embroidery = 0;
+ //Calibration Winding
Calibration = 1;
}
diff --git a/Software/PMR/Messages/Printing/ProcessParameters.proto b/Software/PMR/Messages/Printing/ProcessParameters.proto
index 9f4209571..7fd398fa0 100644
--- a/Software/PMR/Messages/Printing/ProcessParameters.proto
+++ b/Software/PMR/Messages/Printing/ProcessParameters.proto
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
package Tango.PMR.Printing;
option java_package = "com.twine.tango.pmr.printing";
diff --git a/Software/Visual_Studio/Embroidery/Tango.Embroidery/Tango.Embroidery.vcxproj b/Software/Visual_Studio/Embroidery/Tango.Embroidery/Tango.Embroidery.vcxproj
index 691cefcdc..41d11f2fe 100644
--- a/Software/Visual_Studio/Embroidery/Tango.Embroidery/Tango.Embroidery.vcxproj
+++ b/Software/Visual_Studio/Embroidery/Tango.Embroidery/Tango.Embroidery.vcxproj
@@ -73,13 +73,14 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)Build\Debug</OutDir>
- <IncludePath>$(ProjectDir);$(IncludePath)</IncludePath>
+ <IncludePath>$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
+ <OutDir>$(SolutionDir)Build\Debug</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
@@ -91,7 +92,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;TANGOEMBROIDERY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\libembroidery;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(ProjectDir);..\libembroidery;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -121,6 +122,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;TANGOEMBROIDERY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>$(ProjectDir);..\libembroidery;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
diff --git a/Software/Visual_Studio/Embroidery/Tango.EmbroideryUI/Tango.EmbroideryUI.csproj b/Software/Visual_Studio/Embroidery/Tango.EmbroideryUI/Tango.EmbroideryUI.csproj
index 11b779275..f0b55d92a 100644
--- a/Software/Visual_Studio/Embroidery/Tango.EmbroideryUI/Tango.EmbroideryUI.csproj
+++ b/Software/Visual_Studio/Embroidery/Tango.EmbroideryUI/Tango.EmbroideryUI.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Embroidery/libEmbroideryTest/libEmbroideryTest.vcxproj b/Software/Visual_Studio/Embroidery/libEmbroideryTest/libEmbroideryTest.vcxproj
index e0fa10d62..14b902ba6 100644
--- a/Software/Visual_Studio/Embroidery/libEmbroideryTest/libEmbroideryTest.vcxproj
+++ b/Software/Visual_Studio/Embroidery/libEmbroideryTest/libEmbroideryTest.vcxproj
@@ -36,7 +36,7 @@
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
+ <WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
@@ -72,12 +72,14 @@
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
+ <OutDir>$(SolutionDir)Build\Debug</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
+ <OutDir>$(SolutionDir)Build\Release</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
@@ -116,6 +118,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\libembroidery;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
diff --git a/Software/Visual_Studio/Embroidery/project-files/visualstudio/libEmbroideryVS2008.vcxproj b/Software/Visual_Studio/Embroidery/project-files/visualstudio/libEmbroideryVS2008.vcxproj
index 3814fd65c..8076b030d 100644
--- a/Software/Visual_Studio/Embroidery/project-files/visualstudio/libEmbroideryVS2008.vcxproj
+++ b/Software/Visual_Studio/Embroidery/project-files/visualstudio/libEmbroideryVS2008.vcxproj
@@ -19,10 +19,10 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
- <WholeProgramOptimization>true</WholeProgramOptimization>
+ <WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
@@ -43,12 +43,12 @@
<_ProjectFileVersion>14.0.25123.0</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+ <OutDir>$(SolutionDir)Build\Debug</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+ <OutDir>$(SolutionDir)Build\Release</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
@@ -80,6 +80,7 @@
<PrecompiledHeader />
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <AdditionalIncludeDirectories>..\..\libgeometry;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ColorLabModule.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ColorLabModule.cs
index 41cd13cc4..3e63051ee 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ColorLabModule.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ColorLabModule.cs
@@ -50,7 +50,7 @@ namespace Tango.MachineStudio.ColorLab
{
get
{
- return Permissions.RunDeveloperModule;
+ return Permissions.RunColorLabModule;
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Tango.MachineStudio.ColorLab.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Tango.MachineStudio.ColorLab.csproj
index 91bc51933..5a53e77a0 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Tango.MachineStudio.ColorLab.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Tango.MachineStudio.ColorLab.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -89,6 +89,7 @@
<Compile Include="ViewModels\CalibrationDataVM.cs" />
<Compile Include="ViewModels\LiquidVolumeVM.cs" />
<Compile Include="ViewModels\MainViewVM.cs" />
+ <Compile Include="ViewModels\RgbVM.cs" />
<Compile Include="Views\MainView.xaml.cs">
<DependentUpon>MainView.xaml</DependentUpon>
</Compile>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataVM.cs
index 1bcb29835..87bbacab5 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataVM.cs
@@ -4,6 +4,7 @@ using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Tango.BL.Entities;
using Tango.SharedUI;
namespace Tango.MachineStudio.ColorLab.ViewModels
@@ -26,6 +27,14 @@ namespace Tango.MachineStudio.ColorLab.ViewModels
set { _color = value; RaisePropertyChangedAuto(); }
}
+ private IdsPack _idsPack;
+
+ public IdsPack IdsPack
+ {
+ get { return _idsPack; }
+ set { _idsPack = value; RaisePropertyChangedAuto(); }
+ }
+
private ObservableCollection<CalibrationDataPointVM> _calibrationPoints;
public ObservableCollection<CalibrationDataPointVM> CalibrationPoints
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/LiquidVolumeVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/LiquidVolumeVM.cs
index a804d628b..a9d46f142 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/LiquidVolumeVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/LiquidVolumeVM.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Tango.BL.Entities;
using Tango.SharedUI;
namespace Tango.MachineStudio.ColorLab.ViewModels
@@ -32,5 +33,13 @@ namespace Tango.MachineStudio.ColorLab.ViewModels
get { return _color; }
set { _color = value; RaisePropertyChangedAuto(); }
}
+
+ private IdsPack _idsPack;
+
+ public IdsPack IdsPack
+ {
+ get { return _idsPack; }
+ set { _idsPack = value; RaisePropertyChangedAuto(); }
+ }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs
index 8260f000a..e09b57e11 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs
@@ -1,19 +1,33 @@
-using System;
+using Google.Protobuf;
+using Microsoft.Win32;
+using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
+using System.Windows.Media;
using Tango.BL;
using Tango.BL.Entities;
+using Tango.Core.Commands;
+using Tango.MachineStudio.Common.Controls;
+using Tango.PMR;
+using Tango.PMR.ColorLab;
using Tango.SharedUI;
+using Tango.SharedUI.Controls;
namespace Tango.MachineStudio.ColorLab.ViewModels
{
public class MainViewVM : ViewModel
{
+ [DllImport("Tango.ColorLib.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "Convert")]
+ public static extern int GetColorAdjust(IntPtr data, int size, ref IntPtr output);
+
private ObservablesContext _dbContext;
+ private HiveComboControl _hiveCombo;
#region Properties
@@ -27,11 +41,11 @@ namespace Tango.MachineStudio.ColorLab.ViewModels
set { _machines = value; RaisePropertyChangedAuto(); }
}
- private ObservableCollection<ColorSpace> _colorSpaces;
+ private ObservableCollection<BL.Entities.ColorSpace> _colorSpaces;
/// <summary>
/// Gets or sets the color spaces.
/// </summary>
- public ObservableCollection<ColorSpace> ColorSpaces
+ public ObservableCollection<BL.Entities.ColorSpace> ColorSpaces
{
get { return _colorSpaces; }
set { _colorSpaces = value; RaisePropertyChangedAuto(); }
@@ -57,6 +71,7 @@ namespace Tango.MachineStudio.ColorLab.ViewModels
set
{
_selectedMachine = value; RaisePropertyChangedAuto();
+ OnSelectedMachineChanged();
}
}
@@ -70,7 +85,7 @@ namespace Tango.MachineStudio.ColorLab.ViewModels
set
{
_selectedRML = value;
- InvalidateLiquidFactorsAndProcessTables();
+ InvalidateLiquidFactorsCalibrationData();
RaisePropertyChangedAuto();
}
}
@@ -86,7 +101,9 @@ namespace Tango.MachineStudio.ColorLab.ViewModels
}
private ObservableCollection<LiquidVolumeVM> _liquidVolumes;
-
+ /// <summary>
+ /// Gets or sets the liquid volumes.
+ /// </summary>
public ObservableCollection<LiquidVolumeVM> LiquidVolumes
{
get { return _liquidVolumes; }
@@ -94,43 +111,220 @@ namespace Tango.MachineStudio.ColorLab.ViewModels
}
private ObservableCollection<CalibrationDataVM> _liquidsCalibrationData;
-
+ /// <summary>
+ /// Gets or sets the liquids calibration data.
+ /// </summary>
public ObservableCollection<CalibrationDataVM> LiquidsCalibrationData
{
get { return _liquidsCalibrationData; }
set { _liquidsCalibrationData = value; RaisePropertyChangedAuto(); }
}
+ private RgbVM _sourceColor;
+ /// <summary>
+ /// Gets or sets the color of the source.
+ /// </summary>
+ public RgbVM SourceColor
+ {
+ get { return _sourceColor; }
+ set { _sourceColor = value; RaisePropertyChangedAuto(); }
+ }
+
+ private HexagonControl _selectedHexagon;
+ /// <summary>
+ /// Gets or sets the selected hexagon.
+ /// </summary>
+ public HexagonControl SelectedHexagon
+ {
+ get { return _selectedHexagon; }
+ set { _selectedHexagon = value; RaisePropertyChangedAuto(); }
+ }
+
+ private Cct _cct;
+ /// <summary>
+ /// Gets or sets the CCT.
+ /// </summary>
+ public Cct CCT
+ {
+ get { return _cct; }
+ set { _cct = value; RaisePropertyChangedAuto(); }
+ }
+
+ private int _deltaChroma;
+ /// <summary>
+ /// Gets or sets the delta chroma.
+ /// </summary>
+ public int DeltaChroma
+ {
+ get { return _deltaChroma; }
+ set { _deltaChroma = value; RaisePropertyChangedAuto(); }
+ }
+
+ private int _deltaL;
+ /// <summary>
+ /// Gets or sets the delta l.
+ /// </summary>
+ public int DeltaL
+ {
+ get { return _deltaL; }
+ set { _deltaL = value; RaisePropertyChangedAuto(); }
+ }
+
+
+ #endregion
+
+ #region Commands
+
+ public RelayCommand ImportForwardDataCommand { get; set; }
+
+ public RelayCommand ImportInverseDataCommand { get; set; }
+
#endregion
public MainViewVM() : base()
{
_dbContext = ObservablesContext.CreateDefault();
+ CCT = new Cct();
+
+ SourceColor = new RgbVM();
+ SourceColor.ColorChanged += SourceColor_ColorChanged;
Machines = _dbContext.Machines.ToObservableCollection();
ColorSpaces = _dbContext.ColorSpaces.ToObservableCollection();
Rmls = _dbContext.Rmls.ToObservableCollection();
+
+ ImportForwardDataCommand = new RelayCommand(ImportForwardData, () => SelectedRML != null);
+ ImportInverseDataCommand = new RelayCommand(ImportInverseData, () => SelectedRML != null);
+ }
+
+ private void SourceColor_ColorChanged(object sender, Color color)
+ {
+ if (_hiveCombo != null)
+ {
+ GetHiveSuggestions();
+ _hiveCombo.GenerateDemoModeHiveColors(color);
+ _hiveCombo.SelectHeagon(_hiveCombo.CenterHexagon);
+ }
+ }
+
+ public void PutComboHiveControl(HiveComboControl hiveCombo)
+ {
+ _hiveCombo = hiveCombo;
+ }
+
+ #region ColorLab
+
+ private void GetHiveSuggestions()
+ {
+ ConversionInput input = new ConversionInput();
+ input.ColorSpace = PMR.ColorLab.ColorSpace.Rgb;
+ input.DeltaChroma = DeltaChroma;
+ input.DeltaL = DeltaL;
+ input.ForwardData = ByteString.CopyFrom(CCT.ForwardData);
+ input.InverseData = ByteString.CopyFrom(CCT.InverseData);
+ input.InputCoordinates.Red = (int)SourceColor.Red;
+ input.InputCoordinates.Green = (int)SourceColor.Green;
+ input.InputCoordinates.Blue = (int)SourceColor.Blue;
+ input.ThreadL = SelectedRML.MediaColor.L;
+ input.ThreadA = SelectedRML.MediaColor.A;
+ input.ThreadB = SelectedRML.MediaColor.B;
+
+ foreach (var vm in LiquidsCalibrationData)
+ {
+ InputLiquid inputLiquid = new InputLiquid();
+
+ CalibrationData calData = new CalibrationData();
+ calData.LiquidType = (PMR.ColorLab.LiquidType)vm.IdsPack.LiquidType.Code;
+ calData.CalibrationPoints.AddRange(vm.CalibrationPoints.Select(x => new CalibrationPoint() { X = x.X, Y = x.Y }));
+ inputLiquid.CalibrationData = calData;
+
+ inputLiquid.LiquidType = (PMR.ColorLab.LiquidType)vm.IdsPack.LiquidType.Code;
+ inputLiquid.MaxNanoliterPerCentimeter = LiquidTypesRmls.SingleOrDefault(x => x.LiquidType.Code == vm.IdsPack.LiquidType.Code).MaxNlPerCm;
+
+ input.InputCoordinates.InputLiquids.Add(inputLiquid);
+ }
+
+ NativePMR<ConversionInput, ConversionOutput> nativePMR = new NativePMR<ConversionInput, ConversionOutput>(GetColorAdjust);
+ ConversionOutput output = nativePMR.Invoke(input);
+
+ //Fill Hive !
+ }
+
+ #endregion
+
+ #region Import / Export Color Adjustment Data
+
+ private void ImportForwardData()
+ {
+ String file = GetCCTFile();
+ if (file != null)
+ {
+ CCT.ForwardFileName = Path.GetFileName(file);
+ CCT.ForwardData = File.ReadAllBytes(file);
+ }
}
+ private void ImportInverseData()
+ {
+ String file = GetCCTFile();
+ if (file != null)
+ {
+ CCT.InverseFileName = Path.GetFileName(file);
+ CCT.InverseData = File.ReadAllBytes(file);
+ }
+ }
+
+ private String GetCCTFile()
+ {
+ OpenFileDialog dlg = new OpenFileDialog();
+ dlg.Title = "Select color adjustment file";
+ dlg.Filter = "Color Conversion Table|*.cct";
+ if (dlg.ShowDialogCenter())
+ {
+ return dlg.FileName;
+ }
+
+ return null;
+ }
+
+ #endregion
+
+ #region Liquid Volumes
+
+ private void OnSelectedMachineChanged()
+ {
+ if (SelectedMachine != null)
+ {
+ LiquidVolumes = SelectedMachine.Configuration.IdsPacks.OrderBy(x => x.PackIndex).Select(x => new LiquidVolumeVM()
+ {
+ Color = x.LiquidType.Color,
+ Name = x.LiquidType.Name,
+ IdsPack = x,
+ }).ToObservableCollection();
+ }
+ }
+
+ #endregion
+
#region RML
- private void InvalidateLiquidFactorsAndProcessTables()
+ private void InvalidateLiquidFactorsCalibrationData()
{
if (SelectedRML != null && SelectedMachine != null)
{
LiquidTypesRmls = SelectedMachine.Configuration.IdsPacks.OrderBy(x => x.PackIndex).Select(x => x.LiquidType).SelectMany(x => x.LiquidTypesRmls).Where(x => x.Rml.Guid == SelectedRML.Guid).ToList();
//RmlProcessParametersTableGroup = SelectedRML.ProcessParametersTablesGroups.ToList().SingleOrDefault(x => x.Active);
- LiquidVolumes = SelectedMachine.Configuration.IdsPacks.OrderBy(x => x.PackIndex).Select(x => new LiquidVolumeVM() { Color = x.LiquidType.Color, Name = x.LiquidType.Name }).ToObservableCollection();
LiquidsCalibrationData = new ObservableCollection<CalibrationDataVM>();
- foreach (var liquidType in SelectedMachine.Configuration.IdsPacks.OrderBy(x => x.PackIndex).Select(x => x.LiquidType))
+ foreach (var idsPack in SelectedMachine.Configuration.IdsPacks.OrderBy(x => x.PackIndex))
{
CalibrationDataVM vm = new CalibrationDataVM();
- vm.Name = liquidType.Name;
- vm.Color = liquidType.Color;
+ vm.Name = idsPack.LiquidType.Name;
+ vm.Color = idsPack.LiquidType.Color;
+ vm.IdsPack = idsPack;
- var cat = liquidType.Cats.FirstOrDefault(x => x.Machine == SelectedMachine);
+ var cat = idsPack.LiquidType.Cats.FirstOrDefault(x => x.Machine == SelectedMachine);
if (cat != null)
{
@@ -140,6 +334,13 @@ namespace Tango.MachineStudio.ColorLab.ViewModels
LiquidsCalibrationData.Add(vm);
}
+
+ CCT = SelectedRML.Ccts.FirstOrDefault();
+
+ if (CCT == null)
+ {
+ CCT = new Cct();
+ }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/RgbVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/RgbVM.cs
new file mode 100644
index 000000000..badb238fb
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/RgbVM.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Media;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.ColorLab.ViewModels
+{
+ public class RgbVM : ViewModel
+ {
+ public event EventHandler<Color> ColorChanged;
+
+ public RgbVM()
+ {
+ Color = Colors.DimGray;
+ }
+
+ private double _red;
+ public double Red
+ {
+ get { return _red; }
+ set { _red = value; SynchronizeColor(); RaisePropertyChangedAuto(); }
+ }
+
+ private double _green;
+ public double Green
+ {
+ get { return _green; }
+ set { _green = value; SynchronizeColor(); RaisePropertyChangedAuto(); }
+ }
+
+ private double _blue;
+ public double Blue
+ {
+ get { return _blue; }
+ set { _blue = value; SynchronizeColor(); RaisePropertyChangedAuto(); }
+ }
+
+ private Color _color;
+ public Color Color
+ {
+ get { return _color; }
+ set { _color = value; RaisePropertyChanged(nameof(Color)); SynchronizeComponents(); }
+ }
+
+ private void SynchronizeColor()
+ {
+ _color = Color.FromRgb((byte)Red, (byte)Green, (byte)Blue);
+ RaisePropertyChanged(nameof(Color));
+ ColorChanged?.Invoke(this, _color);
+ }
+
+ private void SynchronizeComponents()
+ {
+ _red = Color.R;
+ _green = Color.G;
+ _blue = Color.B;
+
+ RaisePropertyChanged(nameof(Red));
+ RaisePropertyChanged(nameof(Green));
+ RaisePropertyChanged(nameof(Blue));
+ RaisePropertyChanged(nameof(Color));
+
+ ColorChanged?.Invoke(this, Color);
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml
index 92ef15231..c0f2912f3 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml
@@ -8,6 +8,7 @@
xmlns:observables="clr-namespace:Tango.BL.Entities;assembly=Tango.BL"
xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:commonControls="clr-namespace:Tango.MachineStudio.Common.Controls;assembly=Tango.MachineStudio.Common"
xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
xmlns:vm="clr-namespace:Tango.MachineStudio.ColorLab.ViewModels"
xmlns:brushPicker="clr-namespace:Tango.BrushPicker;assembly=Tango.BrushPicker"
@@ -164,9 +165,9 @@
<Grid Grid.Row="1" Margin="0 40 0 0" HorizontalAlignment="Center">
<Grid>
<Grid.ColumnDefinitions>
- <ColumnDefinition Width="300" />
+ <ColumnDefinition Width="250" />
+ <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
- <ColumnDefinition Width="300" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
@@ -179,41 +180,33 @@
<StackPanel VerticalAlignment="Center" Grid.Row="1">
<Border BorderThickness="1" BorderBrush="#545454" Margin="0" Padding="2 2 2 0">
- <brushPicker:BrushPicker x:Name="picker" Background="Transparent" BorderThickness="0" Height="150" BrushTypeVisibility="Collapsed">
- <brushPicker:BrushPicker.Color>
- <MultiBinding Converter="{StaticResource ColorToComponentsConverter}" Mode="TwoWay">
- <Binding ElementName="sliderR" Path="Value" Mode="TwoWay"></Binding>
- <Binding ElementName="sliderG" Path="Value" Mode="TwoWay"></Binding>
- <Binding ElementName="sliderB" Path="Value" Mode="TwoWay"></Binding>
- </MultiBinding>
- </brushPicker:BrushPicker.Color>
- </brushPicker:BrushPicker>
+ <brushPicker:BrushPicker x:Name="picker" Color="{Binding SourceColor.Color,Mode=TwoWay}" Background="Transparent" BorderThickness="0" Height="150" BrushTypeVisibility="Collapsed"></brushPicker:BrushPicker>
</Border>
<DockPanel Margin="0 10 0 0">
<TextBlock DockPanel.Dock="Left" Text="R" VerticalAlignment="Center" />
- <TextBlock DockPanel.Dock="Right" Text="{Binding ElementName=picker,Path=Color.R}"></TextBlock>
- <Slider x:Name="sliderR" Margin="10 0" Maximum="255"></Slider>
+ <TextBlock DockPanel.Dock="Right" Text="{Binding SourceColor.Red}"></TextBlock>
+ <Slider x:Name="sliderR" Margin="10 0" IsSnapToTickEnabled="True" TickFrequency="1" Maximum="255" Value="{Binding SourceColor.Red,Mode=TwoWay}"></Slider>
</DockPanel>
<DockPanel Margin="0 10 0 0">
<TextBlock DockPanel.Dock="Left" Text="G" VerticalAlignment="Center" />
- <TextBlock DockPanel.Dock="Right" Text="{Binding ElementName=picker,Path=Color.G}"></TextBlock>
- <Slider x:Name="sliderG" Margin="10 0" Maximum="255"></Slider>
+ <TextBlock DockPanel.Dock="Right" Text="{Binding SourceColor.Green}"></TextBlock>
+ <Slider x:Name="sliderG" Margin="10 0" IsSnapToTickEnabled="True" TickFrequency="1" Maximum="255" Value="{Binding SourceColor.Green,Mode=TwoWay}"></Slider>
</DockPanel>
<DockPanel Margin="0 10 0 0">
<TextBlock DockPanel.Dock="Left" Text="B" VerticalAlignment="Center" />
- <TextBlock DockPanel.Dock="Right" Text="{Binding ElementName=picker,Path=Color.B}"></TextBlock>
- <Slider x:Name="sliderB" Margin="10 0" Maximum="255"></Slider>
+ <TextBlock DockPanel.Dock="Right" Text="{Binding SourceColor.Blue}"></TextBlock>
+ <Slider x:Name="sliderB" Margin="10 0" IsSnapToTickEnabled="True" TickFrequency="1" Maximum="255" Value="{Binding SourceColor.Blue,Mode=TwoWay}"></Slider>
</DockPanel>
</StackPanel>
<TextBlock FontStyle="Italic" HorizontalAlignment="Center">SOURCE / INVERSE RGB</TextBlock>
- <TextBlock FontStyle="Italic" HorizontalAlignment="Center" Grid.Column="2">SUGGESTIONS</TextBlock>
+ <TextBlock FontStyle="Italic" HorizontalAlignment="Center" Grid.Column="2" Margin="-120 0 0 0">SUGGESTIONS</TextBlock>
<TextBlock FontStyle="Italic" HorizontalAlignment="Center" Grid.Column="4">LIQUID VOLUMES</TextBlock>
<Image Source="../Images/arrow-long-right.png" Grid.Column="1" Grid.Row="1" Width="140" Opacity="0.8" Margin="20 0 0 0"></Image>
- <controls:HiveControl Width="200" Height="200" Grid.Column="2" Grid.Row="1" />
+ <commonControls:HiveComboControl x:Name="hiveCombo" Grid.Column="2" Grid.Row="1" Resolution="{Binding DeltaChroma,Mode=OneWayToSource}" LAxisValue="{Binding DeltaL,Mode=OneWayToSource}" />
<Image Source="../Images/arrow-long-right.png" Grid.Column="3" Grid.Row="1" Width="140" Opacity="0.8" Margin="0 0 20 0"></Image>
@@ -281,7 +274,7 @@
<TextBlock DockPanel.Dock="Top" FontSize="9" TextAlignment="Center">COMPOSITE</TextBlock>
<Ellipse Height="70" Margin="0 5 0 0" Stroke="#202020">
<Ellipse.Fill>
- <SolidColorBrush Color="{Binding ElementName=picker,Path=Color}"></SolidColorBrush>
+ <SolidColorBrush Color="{Binding SourceColor.Color}"></SolidColorBrush>
</Ellipse.Fill>
</Ellipse>
</DockPanel>
@@ -352,7 +345,7 @@
<TextBlock Text="{Binding Name}" HorizontalAlignment="Center" Foreground="Black"></TextBlock>
</Border>
- <Grid>
+ <Grid Margin="0 0 0 5">
<DataGrid Background="#BBFFFFFF" AlternatingRowBackground="#CCE1E1E1" BorderThickness="1" BorderBrush="#202020" Margin="5 0" ItemsSource="{Binding CalibrationPoints}" CanUserResizeColumns="False" CanUserReorderColumns="False" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="True" CanUserSortColumns="True">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml.cs
index 1a96386f6..d78750050 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml.cs
@@ -12,6 +12,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
+using Tango.MachineStudio.ColorLab.ViewModels;
namespace Tango.MachineStudio.ColorLab.Views
{
@@ -20,9 +21,19 @@ namespace Tango.MachineStudio.ColorLab.Views
/// </summary>
public partial class MainView : UserControl
{
+ private MainViewVM _vm;
+
public MainView()
{
InitializeComponent();
+
+ this.Loaded += MainView_Loaded;
+ }
+
+ private void MainView_Loaded(object sender, RoutedEventArgs e)
+ {
+ _vm = DataContext as MainViewVM;
+ _vm.PutComboHiveControl(hiveCombo);
}
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Tango.MachineStudio.DB.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Tango.MachineStudio.DB.csproj
index be8503199..cefaac6f3 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Tango.MachineStudio.DB.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Tango.MachineStudio.DB.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/DBViews/MediaColorView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/DBViews/MediaColorView.xaml
index a88add000..9fcfc5a89 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/DBViews/MediaColorView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/DBViews/MediaColorView.xaml
@@ -27,8 +27,12 @@
<TextBox Text="{Binding EditEntity.Guid}" IsReadOnly="True"></TextBox>
<TextBlock Text="Last Updated:" FontWeight="Bold"></TextBlock>
<TextBox Text="{Binding EditEntity.LastUpdated}" IsReadOnly="True"></TextBox>
- <TextBlock Text="Color:" FontWeight="Bold"></TextBlock>
- <colorPicker:ColorPickerCombo SelectedColor="{Binding EditEntity.Color,Mode=TwoWay,Converter={StaticResource ColorToIntegerConverter},UpdateSourceTrigger=PropertyChanged}"></colorPicker:ColorPickerCombo>
+ <TextBlock Text="L:" FontWeight="Bold"></TextBlock>
+ <mahapps:NumericUpDown Minimum="0" Maximum="100" Value="{Binding EditEntity.L,Mode=TwoWay}" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Left"></mahapps:NumericUpDown>
+ <TextBlock Text="A:" FontWeight="Bold"></TextBlock>
+ <mahapps:NumericUpDown Minimum="-128" Maximum="128" Value="{Binding EditEntity.A,Mode=TwoWay}" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Left"></mahapps:NumericUpDown>
+ <TextBlock Text="B:" FontWeight="Bold"></TextBlock>
+ <mahapps:NumericUpDown Minimum="-128" Maximum="128" Value="{Binding EditEntity.B,Mode=TwoWay}" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Left"></mahapps:NumericUpDown>
</controls:TableGrid>
</Grid>
</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/DBViews/MediaColorsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/DBViews/MediaColorsView.xaml
index 644c865da..57adda44d 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/DBViews/MediaColorsView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/DBViews/MediaColorsView.xaml
@@ -20,12 +20,16 @@
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}"></DataGridTextColumn>
<DataGridTextColumn Header="GUID" Binding="{Binding Guid}"></DataGridTextColumn>
+ <DataGridTextColumn Header="Name" Binding="{Binding Name}"></DataGridTextColumn>
+ <DataGridTextColumn Header="L" Binding="{Binding L}"></DataGridTextColumn>
+ <DataGridTextColumn Header="A" Binding="{Binding A}"></DataGridTextColumn>
+ <DataGridTextColumn Header="B" Binding="{Binding B}"></DataGridTextColumn>
<DataGridTemplateColumn Header="Color">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Rectangle Width="50">
<Rectangle.Fill>
- <SolidColorBrush Color="{Binding Color,Converter={StaticResource ColorToIntegerConverter},Mode=TwoWay}"></SolidColorBrush>
+ <SolidColorBrush Color="{Binding Color}"></SolidColorBrush>
</Rectangle.Fill>
</Rectangle>
</DataTemplate>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Tango.MachineStudio.DataCapture.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Tango.MachineStudio.DataCapture.csproj
index c8f15e9c9..d4df08651 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Tango.MachineStudio.DataCapture.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Tango.MachineStudio.DataCapture.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj
index 0e64872f7..920dfd922 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
index 566dc7a16..b2dded955 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
@@ -40,7 +40,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
/// Represents the developer module main view, view model.
/// </summary>
/// <seealso cref="Tango.SharedUI.ViewModel" />
- public class MainViewVM : ViewModel<IMainView>, IShutdownRequestBlocker, IShutdownListener
+ public class MainViewVM : ViewModel, IShutdownRequestBlocker, IShutdownListener
{
private static object _syncLock = new object();
private const string EMB_FORMATS_EXPORT = "Baby Lock (PES)|*.pes|Tajima (DST)|*.dst|EXP|*.exp|PCS|*.pcs|HUS|*.hus|KSM|*.ksm";
@@ -596,18 +596,9 @@ namespace Tango.MachineStudio.Developer.ViewModels
/// <summary>
/// Initializes a new instance of the <see cref="MainViewVM"/> class.
/// </summary>
- public MainViewVM(IMainView view) : base(view, true)
- {
-
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="MainViewVM"/> class.
- /// </summary>
/// <param name="applicationManager">The application manager.</param>
/// <param name="notificationProvider">The notification provider.</param>
- [PreferredConstructor]
- public MainViewVM(IMainView view, IStudioApplicationManager applicationManager, INotificationProvider notificationProvider, IDiagnosticsFrameProvider diagnosticsFrameProvider, IVideoCaptureProvider videoCaptureProvider, DeveloperNavigationManager navigation, IAuthenticationProvider authentication) : this(view)
+ public MainViewVM(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider, IDiagnosticsFrameProvider diagnosticsFrameProvider, IVideoCaptureProvider videoCaptureProvider, DeveloperNavigationManager navigation, IAuthenticationProvider authentication)
{
SelectedJobs = new ObservableCollection<Job>();
@@ -1710,7 +1701,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
Red = stop.Color.R,
Green = stop.Color.G,
Blue = stop.Color.B,
- OffsetPercent = stop.Offset,
+ OffsetPercent = stop.Offset * 100d,
ColorSpace = _machineDbContext.ColorSpaces.ToList().SingleOrDefault(x => x.Code == BL.Enumerations.ColorSpaces.RGB.ToInt32()),
});
}
@@ -1799,14 +1790,5 @@ namespace Tango.MachineStudio.Developer.ViewModels
}
#endregion
-
- #region IMainView
-
- protected override void OnViewAttached()
- {
- base.OnViewAttached();
- }
-
- #endregion
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/EmbroideryImportView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/EmbroideryImportView.xaml
index 42d0bb106..8d25719e8 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/EmbroideryImportView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/EmbroideryImportView.xaml
@@ -46,7 +46,7 @@
<StackPanel>
<TextBlock Margin="5">Region Brush</TextBlock>
<Border Margin="5" BorderThickness="1" BorderBrush="Silver">
- <brushPicker:BrushPicker Background="White" BorderThickness="0" Brush="{Binding ElementName=editor,Path=SelectedPath.Brush,Mode=TwoWay}" />
+ <brushPicker:BrushPicker Background="White" BorderThickness="0" Brush="{Binding ElementName=editor,Path=SelectedPath.Brush,Mode=TwoWay}" Height="220" />
</Border>
<Border BorderThickness="1" BorderBrush="Silver" Padding="5 0 5 5" Margin="5">
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml
index 1dea01de7..4c0784d1d 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml
@@ -157,13 +157,13 @@
</StackPanel>
</ToggleButton>
<Popup x:Name="Popup" MouseDown="Popup_MouseDown" PopupAnimation="Fade" StaysOpen="False" PlacementTarget="{Binding ElementName=PopupButton}" Placement="Bottom" AllowsTransparency="True">
- <Border Background="#E6FFFFFF" Height="250" Width="550" CornerRadius="5" Margin="10">
+ <Border Background="#E6FFFFFF" CornerRadius="5" Margin="10">
<Border.Effect>
<DropShadowEffect ShadowDepth="0" BlurRadius="10" />
</Border.Effect>
<Grid>
<Grid Margin="10">
- <commonControls:HiveColorPickerControl SelectedColorChanged="HiveColorPickerControl_SelectedColorChanged" SelectedColor="{Binding Color,Mode=TwoWay}" DemoMode="True" />
+ <commonControls:HiveColorPickerControl SelectedHiveColorChanged="HiveColorPickerControl_SelectedColorChanged" SelectedColor="{Binding Color,Mode=OneWay}" SelectedHiveColor="{Binding Color,Mode=OneWayToSource}" DemoMode="True" />
</Grid>
</Grid>
</Border>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml.cs
index 905caa96d..044046450 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml.cs
@@ -82,6 +82,7 @@ namespace Tango.MachineStudio.Developer.Views
}
jobBrushList.ItemsSource = segments;
+ UpdateGradientBrushDisplay();
}
}
@@ -125,7 +126,7 @@ namespace Tango.MachineStudio.Developer.Views
}
- private void HiveColorPickerControl_SelectedColorChanged(object sender, Color e)
+ private void HiveColorPickerControl_SelectedColorChanged(object sender, Color color)
{
UpdateGradientBrushDisplay();
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner.csproj
index 458a9f853..af3a76c0b 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj
index 3b0e1d1cc..c329685c6 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Tango.MachineStudio.Stubs.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Tango.MachineStudio.Stubs.csproj
index 87b159c0e..85928cb0c 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Tango.MachineStudio.Stubs.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Stubs/Tango.MachineStudio.Stubs.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj
index 631997fc8..1b827f001 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj
@@ -27,7 +27,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml
new file mode 100644
index 000000000..60b96bc9d
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml
@@ -0,0 +1,140 @@
+<local:ElementEditor x:Class="Tango.MachineStudio.Technician.Editors.ControllerElementEditor"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:sharedConverters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
+ xmlns:items="clr-namespace:Tango.MachineStudio.Technician.TechItems"
+ xmlns:gauge="clr-namespace:Tango.CircularGauge;assembly=Tango.CircularGauge"
+ xmlns:converters="clr-namespace:Tango.Editors.Converters;assembly=Tango.Editors"
+ xmlns:visuals="clr-namespace:Tango.Visuals;assembly=Tango.Visuals"
+ xmlns:local="clr-namespace:Tango.Editors;assembly=Tango.Editors"
+ mc:Ignorable="d" Background="Transparent" ClipToBounds="False" BorderThickness="0" MinWidth="1" MinHeight="1" RenderTransformOrigin="0.5,0.5" d:DataContext="{d:DesignInstance Type=items:ControllerItem, IsDesignTimeCreatable=False}" Height="245.074" Width="321.75">
+
+ <UserControl.Resources>
+ <converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"></converters:BoolToVisibilityConverter>
+ <sharedConverters:BooleanInverseConverter x:Key="BooleanInverseConverter" />
+
+ <!--Theme-->
+ <SolidColorBrush x:Key="BorderBrush" Color="Transparent"></SolidColorBrush>
+ <SolidColorBrush x:Key="CornersBrush" Color="Red"></SolidColorBrush>
+ </UserControl.Resources>
+
+ <UserControl.RenderTransform>
+ <RotateTransform Angle="{Binding RelativeSource={RelativeSource AncestorType=local:ElementEditor},Path=Angle}"></RotateTransform>
+ </UserControl.RenderTransform>
+
+ <Grid ClipToBounds="False">
+
+
+ <!--Content-->
+ <Grid ClipToBounds="False" IsHitTestVisible="{Binding RelativeSource={RelativeSource AncestorType=local:ElementsEditor},Path=IsEditable,Converter={StaticResource BooleanInverseConverter}}">
+ <Border>
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="1*" />
+ <ColumnDefinition Width="100" />
+ </Grid.ColumnDefinitions>
+ <Viewbox>
+ <Grid>
+ <gauge:CircularGaugeControl
+ Margin="10"
+ Radius="150"
+ ScaleRadius="110"
+ ScaleStartAngle="120"
+ ScaleSweepAngle="300"
+ PointerLength="85"
+ PointerCapRadius="35"
+ MinValue="{Binding TechController.Min}"
+ MaxValue="{Binding TechController.Max}"
+ MajorDivisionsCount="10"
+ MinorDivisionsCount="5"
+ CurrentValue="{Binding EffectiveValue}"
+ ImageSize="40,50"
+ RangeIndicatorThickness="8"
+ RangeIndicatorRadius="120"
+ RangeIndicatorLightRadius="10"
+ RangeIndicatorLightOffset="80"
+ ScaleLabelRadius="90"
+ ScaleLabelSize="40,20"
+ ScaleLabelFontSize="10"
+ ScaleLabelForeground="LightGray"
+ MajorTickSize="10,3"
+ MinorTickSize="3,1"
+ MajorTickColor="LightGray"
+ MinorTickColor="LightGray"
+ ImageOffset="-50"
+ GaugeBackgroundColor="Black"
+ PointerThickness ="16"
+ OptimalRangeStartValue="300"
+ OptimalRangeEndValue="700"
+ DialTextOffset="40"
+ DialTextColor="Black"
+ >
+
+ </gauge:CircularGaugeControl>
+ </Grid>
+ </Viewbox>
+
+ <Grid Grid.Column="1" HorizontalAlignment="Right">
+ <Slider Orientation="Vertical" Margin="15" TickPlacement="None" Minimum="{Binding TechController.Min}" Maximum="{Binding TechController.Max}" Value="{Binding Value,Delay=1000}">
+ <Slider.Foreground>
+ <SolidColorBrush Color="{Binding Color}" />
+ </Slider.Foreground>
+ </Slider>
+
+ <TextBlock HorizontalAlignment="Left" VerticalAlignment="Top" FontFamily="../Fonts/#digital-7" TextAlignment="Right" Margin="-80 10 0 0" FontSize="30" Text="{Binding Value,StringFormat=0.00}">
+ <TextBlock.Foreground>
+ <SolidColorBrush Color="{Binding Color}" />
+ </TextBlock.Foreground>
+ </TextBlock>
+ </Grid>
+ </Grid>
+ </Border>
+
+ <Border Margin="0 0 0 -23" VerticalAlignment="Bottom">
+ <TextBlock Text="{Binding TechController.Description}" FontSize="14" Foreground="DimGray" HorizontalAlignment="Center"></TextBlock>
+ </Border>
+ </Grid>
+ <!--Content-->
+
+
+ <Border BorderThickness="1" BorderBrush="{Binding RelativeSource={RelativeSource AncestorType=local:ElementEditor},Path=BorderBrush,TargetNullValue={StaticResource BorderBrush},FallbackValue={StaticResource BorderBrush}}" Visibility="{Binding RelativeSource={RelativeSource AncestorType=local:ElementEditor},Path=(local:ElementsEditor.IsSelected),Converter={StaticResource BoolToVisibilityConverter}}">
+ <Grid>
+ <ContentPresenter Content="{Binding RelativeSource={RelativeSource AncestorType=local:ElementEditor},Path=InnerContent}"></ContentPresenter>
+
+ <Thumb Opacity="0" DragDelta="MoveDrag" DragStarted="DragStarted" DragCompleted="OnDragEnded"></Thumb>
+ <Thumb HorizontalAlignment="Left" Cursor="SizeWE" Opacity="0" DragDelta="DragLeft" DragStarted="DragStarted" DragCompleted="OnDragEnded"></Thumb>
+ <Thumb HorizontalAlignment="Right" Cursor="SizeWE" Opacity="0" DragDelta="DragRight" DragStarted="DragStarted" DragCompleted="OnDragEnded"></Thumb>
+ <Thumb VerticalAlignment="Top" Cursor="SizeNS" Opacity="0" DragDelta="DragTop" DragStarted="DragStarted" DragCompleted="OnDragEnded"></Thumb>
+ <Thumb VerticalAlignment="Bottom" Cursor="SizeNS" Opacity="0" DragDelta="DragBottom" DragStarted="DragStarted" DragCompleted="OnDragEnded"></Thumb>
+
+ <Grid ClipToBounds="False" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0 -20 0 0" Width="10" Height="10">
+ <Ellipse Stroke="{Binding RelativeSource={RelativeSource AncestorType=local:ElementEditor},Path=CornersBrush,TargetNullValue={StaticResource CornersBrush},FallbackValue={StaticResource CornersBrush}}" StrokeThickness="2"></Ellipse>
+ <Rectangle HorizontalAlignment="Center" VerticalAlignment="Stretch" Margin="0 10 0 -8" StrokeThickness="1" Stroke="Red"></Rectangle>
+ <Thumb Opacity="0" DragDelta="DragAngle" DragStarted="DragStarted" Cursor="Arrow" DragCompleted="OnDragEnded"></Thumb>
+ </Grid>
+
+ <Grid Width="10" Height="10" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="-8 -8 0 0">
+ <Border BorderBrush="{Binding RelativeSource={RelativeSource AncestorType=local:ElementEditor},Path=CornersBrush,TargetNullValue={StaticResource CornersBrush},FallbackValue={StaticResource CornersBrush}}" BorderThickness="2 2 0 0"></Border>
+ <Thumb Opacity="0" DragDelta="DragTopLeft" DragStarted="DragStarted" Cursor="SizeNWSE" DragCompleted="OnDragEnded"></Thumb>
+ </Grid>
+
+ <Grid Width="10" Height="10" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0 -8 -8 0">
+ <Border BorderBrush="{Binding RelativeSource={RelativeSource AncestorType=local:ElementEditor},Path=CornersBrush,TargetNullValue={StaticResource CornersBrush},FallbackValue={StaticResource CornersBrush}}" BorderThickness="0 2 2 0"></Border>
+ <Thumb Opacity="0" DragDelta="DragTopRight" DragStarted="DragStarted" Cursor="SizeNESW" DragCompleted="OnDragEnded"></Thumb>
+ </Grid>
+
+ <Grid Width="10" Height="10" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0 0 -8 -8">
+ <Border BorderBrush="{Binding RelativeSource={RelativeSource AncestorType=local:ElementEditor},Path=CornersBrush,TargetNullValue={StaticResource CornersBrush},FallbackValue={StaticResource CornersBrush}}" BorderThickness="0 0 2 2"></Border>
+ <Thumb Opacity="0" DragDelta="DragBottomRight" DragStarted="DragStarted" Cursor="SizeNWSE" DragCompleted="OnDragEnded"></Thumb>
+ </Grid>
+
+ <Grid Width="10" Height="10" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="-8 0 0 -8">
+ <Border BorderBrush="{Binding RelativeSource={RelativeSource AncestorType=local:ElementEditor},Path=CornersBrush,TargetNullValue={StaticResource CornersBrush},FallbackValue={StaticResource CornersBrush}}" BorderThickness="2 0 0 2"></Border>
+ <Thumb Opacity="0" DragDelta="DragBottomLeft" DragStarted="DragStarted" Cursor="SizeNESW" DragCompleted="OnDragEnded"></Thumb>
+ </Grid>
+ </Grid>
+ </Border>
+ </Grid>
+</local:ElementEditor>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml.cs
new file mode 100644
index 000000000..4d183dac6
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml.cs
@@ -0,0 +1,90 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Tango.Editors;
+using Tango.BL.Entities;
+using Tango.MachineStudio.Technician.TechItems;
+
+namespace Tango.MachineStudio.Technician.Editors
+{
+ [ContentProperty("InnerContent")]
+ public partial class ControllerElementEditor : ElementEditor
+ {
+ public ControllerElementEditor()
+ : base()
+ {
+ InitializeComponent();
+ }
+
+ public ControllerElementEditor(ControllerItem controllerItem)
+ : this()
+ {
+ ControllerItem = controllerItem;
+ DataContext = ControllerItem;
+ }
+
+ public ControllerElementEditor(ControllerItem controllerItem, Rect bounds)
+ : this(controllerItem)
+ {
+ Left = bounds.Left;
+ Top = bounds.Top;
+ Width = bounds.Width;
+ Height = bounds.Height;
+ }
+
+ private ControllerItem _controllerItem;
+
+ public ControllerItem ControllerItem
+ {
+ get { return _controllerItem; }
+ set { _controllerItem = value; RaisePropertyChanged(nameof(ControllerItem)); }
+ }
+
+
+ /// <summary>
+ /// Clones this instance.
+ /// </summary>
+ /// <returns></returns>
+ public override IElementEditor Clone()
+ {
+ try
+ {
+ var clonedItem = ControllerItem.Clone() as ControllerItem;
+ ControllerElementEditor cloned = new ControllerElementEditor(clonedItem);
+ cloned.Top = Top;
+ cloned.Left = Left;
+ cloned.Width = Width;
+ cloned.Height = Height;
+ cloned.Angle = Angle;
+ return cloned;
+ }
+ catch (Exception ex)
+ {
+ throw new InvalidOperationException("Could not clone this editor. You may have to create a custom editor and implement a custom Clone method.", ex);
+ }
+ }
+
+ /// <summary>
+ /// Gets the hosted element.
+ /// </summary>
+ [ParameterIgnore]
+ public override Object HostedElement
+ {
+ get { return ControllerItem; }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Images/controller.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Images/controller.png
new file mode 100644
index 000000000..5794f6cd8
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Images/controller.png
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/PropertiesTemplates/ControllerTemplate.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/PropertiesTemplates/ControllerTemplate.xaml
new file mode 100644
index 000000000..57d807b09
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/PropertiesTemplates/ControllerTemplate.xaml
@@ -0,0 +1,41 @@
+<UserControl x:Class="Tango.MachineStudio.Technician.PropertiesTemplates.ControllerTemplate"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:converters="clr-namespace:Tango.MachineStudio.Technician.Converters"
+ xmlns:items="clr-namespace:Tango.MachineStudio.Technician.TechItems"
+ xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls"
+ xmlns:colorPicker="clr-namespace:Tango;assembly=Tango.ColorPicker"
+ xmlns:local="clr-namespace:Tango.MachineStudio.Technician.PropertiesTemplates"
+ mc:Ignorable="d"
+ d:DesignHeight="500" d:DesignWidth="200" d:DataContext="{d:DesignInstance Type=items:ControllerItem, IsDesignTimeCreatable=False}">
+
+ <UserControl.Resources>
+ <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
+ <Setter Property="mahapps:ControlsHelper.HeaderFontSize" Value="14" />
+ <Setter Property="Margin" Value="2" />
+ </Style>
+ </UserControl.Resources>
+
+ <Grid>
+ <StackPanel>
+ <GroupBox Header="INPUT">
+ <StackPanel>
+ <TextBlock FontSize="10">Selected Input</TextBlock>
+ <ComboBox Margin="0 5 0 0" ItemsSource="{Binding Adapter.TechControllers}" SelectedItem="{Binding TechController,Mode=TwoWay}" DisplayMemberPath="Description" />
+
+ <TextBlock FontSize="10" Margin="0 20 0 0"><Run>Update Interval</Run> <Run Text="{Binding UpdateInterval,StringFormat={}{0:N0} ms,FallbackValue=0}"></Run></TextBlock>
+ <Slider Margin="0 5 0 0" Minimum="1" Maximum="1000" Value="{Binding UpdateInterval,Mode=TwoWay}"></Slider>
+ </StackPanel>
+ </GroupBox>
+ <GroupBox Header="COLOR" Margin="0 10 0 0">
+ <StackPanel>
+ <Viewbox Margin="0 5 0 0">
+ <colorPicker:ColorCanvas SelectedColor="{Binding Color,Mode=TwoWay}" Background="Transparent" />
+ </Viewbox>
+ </StackPanel>
+ </GroupBox>
+ </StackPanel>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/PropertiesTemplates/ControllerTemplate.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/PropertiesTemplates/ControllerTemplate.xaml.cs
new file mode 100644
index 000000000..624eef296
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/PropertiesTemplates/ControllerTemplate.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.MachineStudio.Technician.PropertiesTemplates
+{
+ /// <summary>
+ /// Interaction logic for MonitorTemplate.xaml
+ /// </summary>
+ public partial class ControllerTemplate : UserControl
+ {
+ public ControllerTemplate()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Tango.MachineStudio.Technician.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Tango.MachineStudio.Technician.csproj
index 7a497710b..ecc235d02 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Tango.MachineStudio.Technician.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Tango.MachineStudio.Technician.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -102,6 +102,9 @@
<Compile Include="Converters\TechIosToDigitalInsConverter.cs" />
<Compile Include="Converters\TechIosToDigitalOutsConverter.cs" />
<Compile Include="Converters\TransitionLinkConverter.cs" />
+ <Compile Include="Editors\ControllerElementEditor.xaml.cs">
+ <DependentUpon>ControllerElementEditor.xaml</DependentUpon>
+ </Compile>
<Compile Include="Editors\DigitalInElementEditor.xaml.cs">
<DependentUpon>DigitalInElementEditor.xaml</DependentUpon>
</Compile>
@@ -146,6 +149,9 @@
<Compile Include="PropertiesTemplates\DispenserTemplate.xaml.cs">
<DependentUpon>DispenserTemplate.xaml</DependentUpon>
</Compile>
+ <Compile Include="PropertiesTemplates\ControllerTemplate.xaml.cs">
+ <DependentUpon>ControllerTemplate.xaml</DependentUpon>
+ </Compile>
<Compile Include="PropertiesTemplates\MotorGroupTemplate.xaml.cs">
<DependentUpon>MotorGroupTemplate.xaml</DependentUpon>
</Compile>
@@ -164,6 +170,7 @@
<Compile Include="PropertiesTemplates\SingleGraphTemplate.xaml.cs">
<DependentUpon>SingleGraphTemplate.xaml</DependentUpon>
</Compile>
+ <Compile Include="TechItems\ControllerItem.cs" />
<Compile Include="TechItems\DigitalInItem.cs" />
<Compile Include="TechItems\DigitalOutItem.cs" />
<Compile Include="TechItems\MeterItem.cs" />
@@ -202,6 +209,10 @@
<Compile Include="..\..\..\Versioning\GlobalVersionInfo.cs">
<Link>GlobalVersionInfo.cs</Link>
</Compile>
+ <Page Include="Editors\ControllerElementEditor.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
<Page Include="Editors\DigitalInElementEditor.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -258,6 +269,10 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
+ <Page Include="PropertiesTemplates\ControllerTemplate.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
<Page Include="PropertiesTemplates\MotorGroupTemplate.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -342,6 +357,10 @@
<Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project>
<Name>Tango.BL</Name>
</ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.CircularGauge\Tango.CircularGauge.csproj">
+ <Project>{6efd5895-177b-4bbb-af52-29f4d53b3fbd}</Project>
+ <Name>Tango.CircularGauge</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\..\Tango.ColorPicker\Tango.ColorPicker.csproj">
<Project>{a2f5af44-29ff-45d6-9d25-ecda5cce88b5}</Project>
<Name>Tango.ColorPicker</Name>
@@ -460,5 +479,8 @@
<ItemGroup>
<Resource Include="Images\digital-in.png" />
</ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\controller.png" />
+ </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechItems/ControllerItem.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechItems/ControllerItem.cs
new file mode 100644
index 000000000..67266ee66
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechItems/ControllerItem.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Media;
+using System.Xml.Serialization;
+using Tango.BL.Entities;
+using Tango.SharedUI.Helpers;
+
+namespace Tango.MachineStudio.Technician.TechItems
+{
+ /// <summary>
+ /// Represents a single component value controller and monitor.
+ /// </summary>
+ /// <seealso cref="TechItem" />
+ [TechItem(10)]
+ public class ControllerItem : TechItem
+ {
+ /// <summary>
+ /// Occurs when the controller value has changed.
+ /// </summary>
+ public event EventHandler<double> ValueChanged;
+
+ private TechController _techController;
+ /// <summary>
+ /// Gets or sets the DB controller item.
+ /// </summary>
+ [XmlIgnore]
+ public TechController TechController
+ {
+ get { return _techController; }
+ set { _techController = value; RaisePropertyChangedAuto(); TechName = _techController != null ? _techController.Description : null; ItemGuid = value != null ? value.Guid : null; }
+ }
+
+ private double _value;
+ /// <summary>
+ /// Gets or sets the component value.
+ /// </summary>
+ [XmlIgnore]
+ public double Value
+ {
+ get { return _value; }
+ set
+ {
+ _value = value; RaisePropertyChangedAuto();
+ ValueChanged?.Invoke(this, _value);
+ }
+ }
+
+ private int _updateInterval;
+ /// <summary>
+ /// Gets or sets the update interval.
+ /// </summary>
+ public int UpdateInterval
+ {
+ get { return _updateInterval; }
+ set { _updateInterval = value; RaisePropertyChangedAuto(); }
+ }
+
+ /// <summary>
+ /// Gets or sets the last update time.
+ /// </summary>
+ [XmlIgnore]
+ public DateTime LastUpdateTime { get; set; }
+
+
+ private double _effectiveValue;
+ /// <summary>
+ /// Gets or sets the effective value received from the embedded device.
+ /// </summary>
+ [XmlIgnore]
+ public double EffectiveValue
+ {
+ get { return _effectiveValue; }
+ set
+ {
+ LastUpdateTime = DateTime.Now;
+
+ if (_effectiveValue != value)
+ {
+ _effectiveValue = value;
+ RaisePropertyChangedAuto();
+ }
+ }
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ControllerItem"/> class.
+ /// </summary>
+ public ControllerItem() : base()
+ {
+ Name = "Value Controller";
+ Description = "Single component value controller";
+ Image = ResourceHelper.GetImageFromResources("Images/controller.png");
+ Color = Colors.DodgerBlue;
+ LastUpdateTime = DateTime.Now;
+ UpdateInterval = 10;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ControllerItem"/> class.
+ /// </summary>
+ /// <param name="techController">The db tech controller.</param>
+ public ControllerItem(TechController techController) : this()
+ {
+ TechController = techController;
+ }
+
+ /// <summary>
+ /// Clones this instance.
+ /// </summary>
+ /// <returns></returns>
+ public override TechItem Clone()
+ {
+ ControllerItem cloned = base.Clone() as ControllerItem;
+ cloned.TechController = TechController;
+ return cloned;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechItems/TechItem.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechItems/TechItem.cs
index 44d5d2c5a..e18250594 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechItems/TechItem.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/TechItems/TechItem.cs
@@ -29,6 +29,7 @@ namespace Tango.MachineStudio.Technician.TechItems
[XmlInclude(typeof(ThreadMotionItem))]
[XmlInclude(typeof(MotorGroupItem))]
[XmlInclude(typeof(DigitalInItem))]
+ [XmlInclude(typeof(ControllerItem))]
public abstract class TechItem : ExtendedObject
{
/// <summary>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
index a5a95fc35..63aca3e70 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
@@ -39,7 +39,7 @@ namespace Tango.MachineStudio.Technician.ViewModels
/// <seealso cref="Tango.MachineStudio.Common.StudioApplication.IShutdownListener" />
public class MachineTechViewVM : ViewModel, IShutdownListener
{
- private List<PropertyInfo> _diagnoticsDataProperties;
+ private List<PropertyInfo> _diagnoticsMonitorsDataProperties;
private Dictionary<SingleGraphItem, GraphController> _singleControllers;
private Dictionary<MultiGraphItem, GraphMultiController> _multiControllers;
private static object _elementsLock = new object();
@@ -178,7 +178,7 @@ namespace Tango.MachineStudio.Technician.ViewModels
_multiControllers = new Dictionary<MultiGraphItem, GraphMultiController>();
AvailableTechItems = TechItem.GetAvailableTechItems().ToObservableCollection();
SelectedTechItem = AvailableTechItems.FirstOrDefault();
- _diagnoticsDataProperties = typeof(PushDiagnosticsResponse).GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList();
+ _diagnoticsMonitorsDataProperties = typeof(DiagnosticsMonitors).GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList();
ApplicationManager = applicationManager;
ApplicationManager.ConnectedMachineChanged += ApplicationManager_ConnectedMachineChanged;
@@ -252,11 +252,11 @@ namespace Tango.MachineStudio.Technician.ViewModels
if (DateTime.Now > monitorItem.LastUpdateTime.AddMilliseconds(monitorItem.UpdateInterval))
{
- var prop = _diagnoticsDataProperties.SingleOrDefault(x => x.Name == monitorItem.TechMonitor.Name);
+ var prop = _diagnoticsMonitorsDataProperties.SingleOrDefault(x => x.Name == monitorItem.TechMonitor.Name);
if (prop != null)
{
- monitorItem.Value = GetDataLastValue(monitorItem.TechMonitor, prop.GetValue(data));
+ monitorItem.Value = GetDataLastValue(monitorItem.TechMonitor, prop.GetValue(data.Monitors));
}
}
}
@@ -266,11 +266,11 @@ namespace Tango.MachineStudio.Technician.ViewModels
if (DateTime.Now > meterItem.LastUpdateTime.AddMilliseconds(meterItem.UpdateInterval))
{
- var prop = _diagnoticsDataProperties.SingleOrDefault(x => x.Name == meterItem.TechMonitor.Name);
+ var prop = _diagnoticsMonitorsDataProperties.SingleOrDefault(x => x.Name == meterItem.TechMonitor.Name);
if (prop != null)
{
- meterItem.Value = GetDataLastValue(meterItem.TechMonitor, prop.GetValue(data));
+ meterItem.Value = GetDataLastValue(meterItem.TechMonitor, prop.GetValue(data.Monitors));
}
}
}
@@ -278,7 +278,7 @@ namespace Tango.MachineStudio.Technician.ViewModels
{
SingleGraphItem graphItem = item as SingleGraphItem;
- var prop = _diagnoticsDataProperties.SingleOrDefault(x => x.Name == graphItem.TechMonitor.Name);
+ var prop = _diagnoticsMonitorsDataProperties.SingleOrDefault(x => x.Name == graphItem.TechMonitor.Name);
if (prop != null)
{
@@ -286,7 +286,7 @@ namespace Tango.MachineStudio.Technician.ViewModels
if (_singleControllers.TryGetValue(graphItem, out controller))
{
- controller.PushData(GetDataArray(graphItem.TechMonitor, prop.GetValue(data)));
+ controller.PushData(GetDataArray(graphItem.TechMonitor, prop.GetValue(data.Monitors)));
}
}
}
@@ -294,7 +294,7 @@ namespace Tango.MachineStudio.Technician.ViewModels
{
MultiGraphItem graphItem = item as MultiGraphItem;
- var prop = _diagnoticsDataProperties.SingleOrDefault(x => x.Name == graphItem.TechMonitor.Name);
+ var prop = _diagnoticsMonitorsDataProperties.SingleOrDefault(x => x.Name == graphItem.TechMonitor.Name);
if (prop != null)
{
@@ -302,7 +302,7 @@ namespace Tango.MachineStudio.Technician.ViewModels
if (_multiControllers.TryGetValue(graphItem, out controller))
{
- controller.PushData(GetDataMatrix(graphItem.TechMonitor, prop.GetValue(data)));
+ controller.PushData(GetDataMatrix(graphItem.TechMonitor, prop.GetValue(data.Monitors)));
}
}
}
@@ -328,6 +328,20 @@ namespace Tango.MachineStudio.Technician.ViewModels
digitalInItem.Value = digitalPin.Value;
}
}
+ else if (item.GetType() == typeof(ControllerItem))
+ {
+ ControllerItem controllerItem = item as ControllerItem;
+
+ if (DateTime.Now > controllerItem.LastUpdateTime.AddMilliseconds(controllerItem.UpdateInterval))
+ {
+ var componentState = data.ComponentsStates.SingleOrDefault(x => (int)x.Component == controllerItem.TechController.Code);
+
+ if (componentState != null)
+ {
+ controllerItem.EffectiveValue = componentState.Value;
+ }
+ }
+ }
}
}
}
@@ -466,6 +480,11 @@ namespace Tango.MachineStudio.Technician.ViewModels
{
CreateElement<DigitalInElementEditor, DigitalInItem, TechIo>(bounds, Adapter.TechIos.Where(x => x.Type == IOType.DigitalInput.ToInt32()).FirstOrDefault());
}
+ else if (item is ControllerItem)
+ {
+ var editor = CreateElement<ControllerElementEditor, ControllerItem, TechController>(bounds, Adapter.TechControllers.FirstOrDefault());
+ InitControllerItem(editor.ControllerItem);
+ }
}
/// <summary>
@@ -559,6 +578,11 @@ namespace Tango.MachineStudio.Technician.ViewModels
(item as DigitalInItem).TechIo = Adapter.TechIos.FirstOrDefault(x => x.Guid == item.ItemGuid);
CreateElement<DigitalInElementEditor>(item);
}
+ else if (item is ControllerItem)
+ {
+ (item as ControllerItem).TechController = Adapter.TechControllers.FirstOrDefault(x => x.Guid == item.ItemGuid);
+ CreateElement<ControllerElementEditor>(item);
+ }
}
/// <summary>
@@ -651,6 +675,11 @@ namespace Tango.MachineStudio.Technician.ViewModels
var motorGroupItem = element.HostedElement as MotorGroupItem;
InitMotorGroupItem(motorGroupItem);
}
+ else if (element is ControllerItem)
+ {
+ var controllerItem = element.HostedElement as ControllerItem;
+ InitControllerItem(controllerItem);
+ }
}
}
@@ -971,6 +1000,29 @@ namespace Tango.MachineStudio.Technician.ViewModels
};
}
+ /// <summary>
+ /// Initializes the controller item.
+ /// </summary>
+ /// <param name="item">The controller item.</param>
+ private void InitControllerItem(ControllerItem item)
+ {
+ item.ValueChanged += async (x, value) =>
+ {
+ try
+ {
+ await MachineOperator.SetComponentValue(new SetComponentValueRequest()
+ {
+ Component = (ValueComponent)item.TechController.Code,
+ Value = value
+ });
+ }
+ catch (Exception ex)
+ {
+ //TODO: Show Exception.
+ }
+ };
+ }
+
#endregion
#region Public Methods
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Views/MachineTechView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Views/MachineTechView.xaml
index 5996c351b..3d4ecdac1 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Views/MachineTechView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Views/MachineTechView.xaml
@@ -364,6 +364,9 @@
<DataTemplate DataType="{x:Type sys:Nullable}">
</DataTemplate>
+ <DataTemplate DataType="{x:Type items:ControllerItem}">
+ <templates:ControllerTemplate/>
+ </DataTemplate>
<DataTemplate DataType="{x:Type items:MonitorItem}">
<templates:MonitorTemplate/>
</DataTemplate>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/organization.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/organization.png
new file mode 100644
index 000000000..9f7ee9851
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/organization.png
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/roles.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/roles.png
new file mode 100644
index 000000000..e7955be04
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/roles.png
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/user.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/user.png
new file mode 100644
index 000000000..c8b7a3b40
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/user.png
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/users-and-roles.jpg b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/users-and-roles.jpg
new file mode 100644
index 000000000..2304e25b6
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/users-and-roles.jpg
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/users.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/users.png
new file mode 100644
index 000000000..805700c66
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/users.png
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Navigation/UsersAndRolesNavigationManager.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Navigation/UsersAndRolesNavigationManager.cs
new file mode 100644
index 000000000..b335f2d69
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Navigation/UsersAndRolesNavigationManager.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Logging;
+using Tango.MachineStudio.Common.Navigation;
+using Tango.MachineStudio.UsersAndRoles.Views;
+
+namespace Tango.MachineStudio.UsersAndRoles.Navigation
+{
+ public class UsersAndRolesNavigationManager
+ {
+ private LogManager LogManager = LogManager.Default;
+
+ public void NavigateTo(UsersAndRolesNavigationView view)
+ {
+ LogManager.Log(String.Format("Navigating to view {0}...", view.ToString()));
+ MainView.Instance.TransitionControl.AutoNavigate(view.ToString());
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Navigation/UsersAndRolesNavigationView.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Navigation/UsersAndRolesNavigationView.cs
new file mode 100644
index 000000000..1e266926e
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Navigation/UsersAndRolesNavigationView.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.MachineStudio.UsersAndRoles.Navigation
+{
+ public enum UsersAndRolesNavigationView
+ {
+ OrganizationSelectionView,
+ OrganizationManagementView,
+ UserManagementView,
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..aeb6b6c4d
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/AssemblyInfo.cs
@@ -0,0 +1,18 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+[assembly: AssemblyTitle("Tango - Machine Studio Users & Roles Module")]
+
+[assembly: ComVisible(false)]
+
+[assembly:ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Resources.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..5148a36ea
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Resources.Designer.cs
@@ -0,0 +1,62 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Tango.MachineStudio.UsersAndRoles.Properties {
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // 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()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if ((resourceMan == null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tango.MachineStudio.UsersAndRoles.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Resources.resx b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Resources.resx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Settings.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..77bb41a9c
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Tango.MachineStudio.UsersAndRoles.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Settings.settings b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Settings.settings
new file mode 100644
index 000000000..033d7a5e9
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Properties/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+ <Profiles>
+ <Profile Name="(Default)" />
+ </Profiles>
+ <Settings />
+</SettingsFile> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/Place.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/Place.cs
new file mode 100644
index 000000000..a2ac2a9b7
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/Place.cs
@@ -0,0 +1,31 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+
+namespace Tango.MachineStudio.UsersAndRoles.Providers
+{
+ public class Place
+ {
+ [XmlElement("address")]
+ [JsonProperty("address")]
+ public PlaceAddress Address { get; set; }
+
+ [XmlAttribute("display_name")]
+ [JsonProperty("display_name")]
+ public String DisplayName { get; set; }
+
+ public Place()
+ {
+ Address = new PlaceAddress();
+ }
+
+ public override string ToString()
+ {
+ return DisplayName;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/PlaceAddress.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/PlaceAddress.cs
new file mode 100644
index 000000000..5b25794d1
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/PlaceAddress.cs
@@ -0,0 +1,53 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+
+namespace Tango.MachineStudio.UsersAndRoles.Providers
+{
+ public class PlaceAddress
+ {
+ [XmlElement("road")]
+ [JsonProperty("road")]
+ public String Road { get; set; }
+
+ [XmlElement("village")]
+ [JsonProperty("village")]
+ public String Village
+ {
+ get { return City; }
+ set { City = value; }
+ }
+
+ [XmlElement("town")]
+ [JsonProperty("town")]
+ public String Town
+ {
+ get { return City; }
+ set { City = value; }
+ }
+
+ [XmlElement("city")]
+ [JsonProperty("city")]
+ public String City { get; set; }
+
+ [XmlElement("state")]
+ [JsonProperty("state")]
+ public String State { get; set; }
+
+ [XmlElement("postcode")]
+ [JsonProperty("postcode")]
+ public String PostalCode { get; set; }
+
+ [XmlElement("country")]
+ [JsonProperty("country")]
+ public String Country { get; set; }
+
+ [XmlElement("country_code")]
+ [JsonProperty("country_code")]
+ public String CountryCode { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/PlacesProvider.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/PlacesProvider.cs
new file mode 100644
index 000000000..681815d4c
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Providers/PlacesProvider.cs
@@ -0,0 +1,47 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.AutoComplete.Editors;
+using Tango.Logging;
+
+namespace Tango.MachineStudio.UsersAndRoles.Providers
+{
+ public class PlacesProvider : ISuggestionProvider
+ {
+ public IEnumerable GetSuggestions(string filter)
+ {
+ List<Place> places = new List<Place>();
+
+ using (WebClient web = new WebClient())
+ {
+ try
+ {
+ String json = null;
+
+ web.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0");
+ web.Headers.Add(HttpRequestHeader.ContentType, "application/json");
+ web.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-US");
+
+ json = web.DownloadString(String.Format("https://nominatim.openstreetmap.org/search?q={0}&format=json&addressdetails=1", filter));
+
+ if (json != null)
+ {
+ List<Place> results = JsonConvert.DeserializeObject<List<Place>>(json);
+ places.AddRange(results);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Default.Log(ex, LogCategory.Debug);
+ }
+ }
+
+ return places;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Tango.MachineStudio.UsersAndRoles.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Tango.MachineStudio.UsersAndRoles.csproj
new file mode 100644
index 000000000..9064519c0
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Tango.MachineStudio.UsersAndRoles.csproj
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{88028F14-0028-4DED-B119-19B8EE23CF32}</ProjectGuid>
+ <OutputType>library</OutputType>
+ <RootNamespace>Tango.MachineStudio.UsersAndRoles</RootNamespace>
+ <AssemblyName>Tango.MachineStudio.UsersAndRoles</AssemblyName>
+ <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\..\Build\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\..\Build\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\EntityFramework.6.0.0\lib\net45\EntityFramework.dll</HintPath>
+ </Reference>
+ <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\EntityFramework.6.0.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+ </Reference>
+ <Reference Include="GalaSoft.MvvmLight, Version=5.3.0.19026, Culture=neutral, PublicKeyToken=e7570ab207bcb616, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.dll</HintPath>
+ </Reference>
+ <Reference Include="GalaSoft.MvvmLight.Extras, Version=5.3.0.19032, Culture=neutral, PublicKeyToken=669f0b5e8f868abf, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Extras.dll</HintPath>
+ </Reference>
+ <Reference Include="GalaSoft.MvvmLight.Platform, Version=5.3.0.19032, Culture=neutral, PublicKeyToken=5f873c45e98af8a1, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Platform.dll</HintPath>
+ </Reference>
+ <Reference Include="MahApps.Metro, Version=1.5.0.23, Culture=neutral, PublicKeyToken=f4fb5a3c4d1e5b4f, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll</HintPath>
+ </Reference>
+ <Reference Include="MaterialDesignColors, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\MaterialDesignColors.1.1.2\lib\net45\MaterialDesignColors.dll</HintPath>
+ </Reference>
+ <Reference Include="MaterialDesignThemes.Wpf, Version=2.3.1.953, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\MaterialDesignThemes.2.3.1.953\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.Practices.ServiceLocation, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.ComponentModel.DataAnnotations" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\MvvmLightLibs.5.3.0.0\lib\net45\System.Windows.Interactivity.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xaml">
+ <RequiredTargetFramework>4.0</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="WindowsBase" />
+ <Reference Include="PresentationCore" />
+ <Reference Include="PresentationFramework" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\..\..\Versioning\GlobalVersionInfo.cs">
+ <Link>GlobalVersionInfo.cs</Link>
+ </Compile>
+ <Compile Include="Navigation\UsersAndRolesNavigationManager.cs" />
+ <Compile Include="Navigation\UsersAndRolesNavigationView.cs" />
+ <Compile Include="Providers\PlaceAddress.cs" />
+ <Compile Include="Providers\PlacesProvider.cs" />
+ <Compile Include="Providers\Place.cs" />
+ <Compile Include="UsersAndRolesModule.cs" />
+ <Compile Include="ViewModelLocator.cs" />
+ <Compile Include="ViewModels\MainViewVM.cs" />
+ <Compile Include="Views\AddressView.xaml.cs">
+ <DependentUpon>AddressView.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\ContactView.xaml.cs">
+ <DependentUpon>ContactView.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\MainView.xaml.cs">
+ <DependentUpon>MainView.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\OrganizationManagementView.xaml.cs">
+ <DependentUpon>OrganizationManagementView.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\OrganizationSelectionView.xaml.cs">
+ <DependentUpon>OrganizationSelectionView.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\UserManagementView.xaml.cs">
+ <DependentUpon>UserManagementView.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\UserView.xaml.cs">
+ <DependentUpon>UserView.xaml</DependentUpon>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Properties\AssemblyInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Resources.resx</DependentUpon>
+ </Compile>
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Settings.settings</DependentUpon>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ </Compile>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ </EmbeddedResource>
+ <None Include="app.config" />
+ <None Include="packages.config" />
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\SideChains\Tango.AutoComplete\Tango.AutoComplete.csproj">
+ <Project>{bb2abb74-ba58-4812-83aa-ec8171f42df4}</Project>
+ <Name>Tango.AutoComplete</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.BL\Tango.BL.csproj">
+ <Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project>
+ <Name>Tango.BL</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Core\Tango.Core.csproj">
+ <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project>
+ <Name>Tango.Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.DragAndDrop\Tango.DragAndDrop.csproj">
+ <Project>{b112d89a-a106-41ae-a0c1-4abc84c477f5}</Project>
+ <Name>Tango.DragAndDrop</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj">
+ <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project>
+ <Name>Tango.Logging</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Settings\Tango.Settings.csproj">
+ <Project>{d8f1ad85-526a-4f50-b6dc-d437af63d8d8}</Project>
+ <Name>Tango.Settings</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.SharedUI\Tango.SharedUI.csproj">
+ <Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project>
+ <Name>Tango.SharedUI</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.MachineStudio.Common\Tango.MachineStudio.Common.csproj">
+ <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project>
+ <Name>Tango.MachineStudio.Common</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Page Include="Views\AddressView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ <Page Include="Views\ContactView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ <Page Include="Views\MainView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ <Page Include="Views\OrganizationManagementView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ <Page Include="Views\OrganizationSelectionView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ <Page Include="Views\UserManagementView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ <Page Include="Views\UserView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ </ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\organization.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\users-and-roles.jpg" />
+ </ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\users.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\user.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\roles.png" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/UsersAndRolesModule.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/UsersAndRolesModule.cs
new file mode 100644
index 000000000..c0d1326cf
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/UsersAndRolesModule.cs
@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Media.Imaging;
+using Tango.BL.Enumerations;
+using Tango.MachineStudio.Common;
+using Tango.MachineStudio.UsersAndRoles.Views;
+using Tango.SharedUI.Helpers;
+
+namespace Tango.MachineStudio.UsersAndRoles
+{
+ public class UsersAndRolesModule : StudioModuleBase
+ {
+ public override string Name
+ {
+ get
+ {
+ return "Users & Roles";
+ }
+ }
+
+ public override string Description
+ {
+ get
+ {
+ return "Manage organizations users and their roles.";
+ }
+ }
+
+ public override BitmapSource Image
+ {
+ get
+ {
+ return ResourceHelper.GetImageFromResources("Images/users-and-roles.jpg");
+ }
+ }
+
+ public override FrameworkElement MainView
+ {
+ get
+ {
+ return new MainView();
+ }
+ }
+
+ public override Permissions Permission
+ {
+ get
+ {
+ return Permissions.RunUsersAndRolesModule;
+ }
+ }
+
+ public override void Dispose()
+ {
+
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModelLocator.cs
new file mode 100644
index 000000000..588d2db09
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModelLocator.cs
@@ -0,0 +1,36 @@
+using GalaSoft.MvvmLight;
+using GalaSoft.MvvmLight.Ioc;
+using Microsoft.Practices.ServiceLocation;
+using Tango.MachineStudio.UsersAndRoles.Navigation;
+using Tango.MachineStudio.UsersAndRoles.ViewModels;
+
+namespace Tango.MachineStudio.UsersAndRoles
+{
+ /// <summary>
+ /// This class contains static references to all the view models in the
+ /// application and provides an entry point for the bindings.
+ /// </summary>
+ public static class ViewModelLocator
+ {
+ /// <summary>
+ /// Initializes a new instance of the ViewModelLocator class.
+ /// </summary>
+ static ViewModelLocator()
+ {
+ ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
+
+ SimpleIoc.Default.Register<MainViewVM>();
+
+ SimpleIoc.Default.Unregister<UsersAndRolesNavigationManager>();
+ SimpleIoc.Default.Register<UsersAndRolesNavigationManager>(() => new UsersAndRolesNavigationManager());
+ }
+
+ public static MainViewVM MainViewVM
+ {
+ get
+ {
+ return ServiceLocator.Current.GetInstance<MainViewVM>();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs
new file mode 100644
index 000000000..7d82cbbbc
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs
@@ -0,0 +1,370 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.BL;
+using Tango.BL.Entities;
+using Tango.Core.Commands;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.MachineStudio.UsersAndRoles.Navigation;
+using Tango.MachineStudio.UsersAndRoles.Providers;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.UsersAndRoles.ViewModels
+{
+ public class MainViewVM : ViewModel
+ {
+ private ObservablesContext _organizationsContext;
+ private ObservablesContext _manageContext;
+ private ObservablesContext _userContext;
+ private UsersAndRolesNavigationManager _navigation;
+ private INotificationProvider _notification;
+
+ private ObservableCollection<Organization> _organizations;
+ public ObservableCollection<Organization> Organizations
+ {
+ get { return _organizations; }
+ set { _organizations = value; RaisePropertyChangedAuto(); }
+ }
+
+ private Organization _selectedOrganization;
+ public Organization SelectedOrganization
+ {
+ get { return _selectedOrganization; }
+ set { _selectedOrganization = value; RaisePropertyChangedAuto(); }
+ }
+
+ private Organization _managedOrganization;
+ public Organization ManagedOrganization
+ {
+ get { return _managedOrganization; }
+ set { _managedOrganization = value; RaisePropertyChangedAuto(); }
+ }
+
+ private ObservableCollection<Role> _roles;
+ public ObservableCollection<Role> Roles
+ {
+ get { return _roles; }
+ set { _roles = value; RaisePropertyChangedAuto(); }
+ }
+
+ private ObservableCollection<Role> _managedUserRoles;
+ public ObservableCollection<Role> ManagedUserRoles
+ {
+ get { return _managedUserRoles; }
+ set { _managedUserRoles = value; RaisePropertyChangedAuto(); }
+ }
+
+ private User _selectedUser;
+ public User SelectedUser
+ {
+ get { return _selectedUser; }
+ set { _selectedUser = value; RaisePropertyChangedAuto(); }
+ }
+
+ private User _managedUser;
+ public User ManagedUser
+ {
+ get { return _managedUser; }
+ set { _managedUser = value; RaisePropertyChangedAuto(); }
+ }
+
+ private Place _selectedUserPlace;
+ public Place SelectedUserPlace
+ {
+ get { return _selectedUserPlace; }
+ set
+ {
+ _selectedUserPlace = value;
+
+ if (_selectedUserPlace != null && _selectedUserPlace.Address != null)
+ {
+ SetUserPlace(value);
+ }
+ }
+ }
+
+ private Place _selectedOrganizationPlace;
+ public Place SelectedOrganizationPlace
+ {
+ get { return _selectedOrganizationPlace; }
+ set
+ {
+ _selectedOrganizationPlace = value;
+
+ if (_selectedOrganizationPlace != null && _selectedOrganizationPlace.Address != null)
+ {
+ SetOrganizationPlace(value);
+ }
+ }
+ }
+
+ public RelayCommand ManageOrganizationCommand { get; set; }
+
+ public RelayCommand BackToOrganizationsCommand { get; set; }
+
+ public RelayCommand ManageUserCommand { get; set; }
+
+ public RelayCommand SaveOrganizationCommand { get; set; }
+
+ public RelayCommand AddOrganizationCommand { get; set; }
+
+ public RelayCommand RemoveOrganizationCommand { get; set; }
+
+ public RelayCommand BackToManagedOrganizationCommand { get; set; }
+
+ public RelayCommand<Role> RemoveRoleCommand { get; set; }
+
+ public RelayCommand SaveManagedUserCommand { get; set; }
+
+ public RelayCommand AddUserCommand { get; set; }
+
+ public RelayCommand RemoveUserCommand { get; set; }
+
+ public MainViewVM(UsersAndRolesNavigationManager navigation, INotificationProvider notification)
+ {
+ _navigation = navigation;
+ _notification = notification;
+
+ LoadOrganizations();
+
+ ManageOrganizationCommand = new RelayCommand(LoadSelectedOrganization, () => SelectedOrganization != null);
+ BackToOrganizationsCommand = new RelayCommand(BackToOrganizations);
+ ManageUserCommand = new RelayCommand(LoadSelectedUser, () => SelectedUser != null);
+ SaveOrganizationCommand = new RelayCommand(SaveOrganization);
+ AddOrganizationCommand = new RelayCommand(AddOrganization);
+ RemoveOrganizationCommand = new RelayCommand(RemoveOrganization, () => SelectedOrganization != null);
+ BackToManagedOrganizationCommand = new RelayCommand(BackToManagedOrganization);
+ RemoveRoleCommand = new RelayCommand<Role>(RemoveUserRole);
+ SaveManagedUserCommand = new RelayCommand(SaveManagedUser);
+ AddUserCommand = new RelayCommand(AddNewUser);
+ RemoveUserCommand = new RelayCommand(RemoveSelectedUser, () => SelectedUser != null);
+ }
+
+ private async void AddOrganization()
+ {
+ String name = _notification.ShowTextInput("Enter organization name", "Name");
+
+ if (!String.IsNullOrWhiteSpace(name))
+ {
+ using (_notification.PushTaskItem("Adding new organization..."))
+ {
+ Organization org = new Organization();
+ org.Name = name;
+ org.Address = new Address();
+ org.Contact = new Contact();
+ _organizationsContext.Organizations.Add(org);
+ await org.SaveAsync(_organizationsContext);
+ Organizations = _organizationsContext.Organizations.ToObservableCollection();
+ SelectedOrganization = org;
+ LoadSelectedOrganization();
+ }
+ }
+ }
+
+ private async void RemoveOrganization()
+ {
+ if (_notification.ShowQuestion("Are you sure you want to remove " + SelectedOrganization.Name + " organization?"))
+ {
+ using (_notification.PushTaskItem("Removing organization..."))
+ {
+ await SelectedOrganization.DeleteCascadeAsync(_organizationsContext);
+ LoadOrganizations();
+ }
+ }
+ }
+
+ private async void SaveOrganization()
+ {
+ using (_notification.PushTaskItem("Saving organization address and contact..."))
+ {
+ await ManagedOrganization.SaveAsync(_manageContext);
+ LoadOrganizations();
+ SelectedOrganization = Organizations.SingleOrDefault(x => x.Guid == ManagedOrganization.Guid);
+ }
+ }
+
+ private void LoadSelectedUser()
+ {
+ using (_notification.PushTaskItem("Loading user details..."))
+ {
+ Task.Factory.StartNew(() =>
+ {
+ _userContext = ObservablesContext.CreateDefault();
+ Roles = _userContext.Roles.ToObservableCollection();
+ ManagedUser = _userContext.Users.SingleOrDefault(x => x.Guid == SelectedUser.Guid);
+ ManagedUserRoles = ManagedUser.Roles.ToObservableCollection();
+
+ InvokeUI(() => _navigation.NavigateTo(UsersAndRolesNavigationView.UserManagementView));
+ });
+ }
+ }
+
+ private void BackToOrganizations()
+ {
+ _navigation.NavigateTo(UsersAndRolesNavigationView.OrganizationSelectionView);
+ }
+
+ private void BackToManagedOrganization()
+ {
+ _navigation.NavigateTo(UsersAndRolesNavigationView.OrganizationManagementView);
+ }
+
+ private void RemoveUserRole(Role role)
+ {
+ ManagedUserRoles.Remove(role);
+
+ foreach (var userRole in ManagedUser.UsersRoles.Where(x => x.Role == role).ToList())
+ {
+ userRole.DefferedDelete(_userContext);
+ }
+ }
+
+ private async void SaveManagedUser()
+ {
+ try
+ {
+ ManagedUser.Validate(_userContext);
+ }
+ catch (Exception ex)
+ {
+ _notification.ShowError(ex.Message);
+ return;
+ }
+
+ using (_notification.PushTaskItem("Saving user details..."))
+ {
+ await ManagedUser.SaveAsync(_userContext);
+ LoadSelectedOrganization();
+ }
+ }
+
+ private void LoadSelectedOrganization()
+ {
+ using (_notification.PushTaskItem("Loading organization..."))
+ {
+ Task.Factory.StartNew(() =>
+ {
+ _manageContext = ObservablesContext.CreateDefault();
+ ManagedOrganization = _manageContext.Organizations.SingleOrDefault(x => x.Guid == SelectedOrganization.Guid);
+
+ InvokeUI(() => _navigation.NavigateTo(UsersAndRolesNavigationView.OrganizationManagementView));
+ });
+ }
+ }
+
+ private void LoadOrganizations()
+ {
+ _organizationsContext = ObservablesContext.CreateDefault();
+ _organizationsContext.Configuration.LazyLoadingEnabled = false;
+
+ _organizationsContext.Users.ToList();
+ _organizationsContext.Contacts.ToList();
+ _organizationsContext.Addresses.ToList();
+ _organizationsContext.Machines.ToList();
+
+ Organizations = _organizationsContext.Organizations.ToObservableCollection();
+ }
+
+ public void OnDropRole(Role role)
+ {
+ ManagedUser.UsersRoles.Add(new UsersRole()
+ {
+ Role = role,
+ RoleGuid = role.Guid,
+ User = ManagedUser,
+ UserGuid = ManagedUser.Guid,
+ });
+
+ ManagedUserRoles.Add(role);
+ }
+
+ private async void RemoveSelectedUser()
+ {
+ if (_notification.ShowQuestion("Are you sure you want to remove the selected user?"))
+ {
+ using (_notification.PushTaskItem("Removing user..."))
+ {
+ await SelectedUser.DeleteCascadeAsync(_manageContext);
+ LoadSelectedOrganization();
+ }
+ }
+ }
+
+ private async void AddNewUser()
+ {
+ String email = _notification.ShowTextInput("Enter user email", "email");
+
+ if (!String.IsNullOrWhiteSpace(email))
+ {
+ User user = new User();
+ user.Email = email;
+ user.Password = "1111";
+ user.Contact = new Contact()
+ {
+ FirstName = "Twine",
+ LastName = "User",
+ Email = email,
+ };
+
+ user.UsersRoles.Add(new UsersRole()
+ {
+ User = user,
+ Role = _manageContext.Roles.SingleOrDefault(x => x.Code == (int)BL.Enumerations.Roles.User)
+ });
+
+ try
+ {
+ user.Validate(_manageContext);
+ }
+ catch (Exception ex)
+ {
+ _notification.ShowError(ex.Message);
+ return;
+ }
+
+ user.Address = new Address();
+
+ ManagedOrganization.Users.Add(user);
+
+ using (_notification.PushTaskItem("Adding new user..."))
+ {
+ await ManagedOrganization.SaveAsync(_manageContext);
+ LoadOrganizations();
+ SelectedOrganization = Organizations.SingleOrDefault(x => x.Guid == ManagedOrganization.Guid);
+ }
+ }
+ }
+
+ private void SetUserPlace(Place place)
+ {
+ ManagedUser.Address.AddressString = place.Address.Road;
+ ManagedUser.Address.City = place.Address.City;
+ ManagedUser.Address.Country = place.Address.Country;
+ ManagedUser.Address.CountryCode = place.Address.CountryCode;
+ ManagedUser.Address.Locality = place.Address.CountryCode;
+ ManagedUser.Address.PostalCode = place.Address.PostalCode;
+ ManagedUser.Address.State = place.Address.State;
+ }
+
+ private void SetOrganizationPlace(Place place)
+ {
+ ManagedOrganization.Address.AddressString = place.Address.Road;
+ ManagedOrganization.Address.City = place.Address.City;
+ ManagedOrganization.Address.Country = place.Address.Country;
+ ManagedOrganization.Address.CountryCode = place.Address.CountryCode;
+ ManagedOrganization.Address.Locality = place.Address.CountryCode;
+ ManagedOrganization.Address.PostalCode = place.Address.PostalCode;
+ ManagedOrganization.Address.State = place.Address.State;
+ }
+
+ protected override void RaisePropertyChangedAuto([CallerMemberName] string caller = null)
+ {
+ base.RaisePropertyChangedAuto(caller);
+ InvalidateRelayCommands();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/AddressView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/AddressView.xaml
new file mode 100644
index 000000000..937cf14dd
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/AddressView.xaml
@@ -0,0 +1,33 @@
+<UserControl x:Class="Tango.MachineStudio.UsersAndRoles.Views.AddressView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:vm="clr-namespace:Tango.MachineStudio.UsersAndRoles.ViewModels"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:autoComplete="clr-namespace:Tango.AutoComplete.Editors;assembly=Tango.AutoComplete"
+ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:mahApps="http://metro.mahapps.com/winfx/xaml/controls"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:entities="clr-namespace:Tango.BL.Entities;assembly=Tango.BL"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:local="clr-namespace:Tango.MachineStudio.UsersAndRoles.Views"
+ mc:Ignorable="d"
+ d:DesignHeight="300" d:DesignWidth="300" d:DataContext="{d:DesignInstance Type=entities:Address, IsDesignTimeCreatable=False}">
+ <Grid>
+ <controls:TableGrid>
+ <TextBlock Text="COUNTRY"></TextBlock>
+ <TextBox Text="{Binding Country}" />
+ <TextBlock Text="COUNTRY CODE"></TextBlock>
+ <TextBox IsReadOnly="True" Text="{Binding CountryCode}"></TextBox>
+ <TextBlock Text="STATE"></TextBlock>
+ <TextBox Text="{Binding State}"></TextBox>
+ <TextBlock Text="CITY"></TextBlock>
+ <TextBox Text="{Binding City}" />
+ <TextBlock Text="POSTAL CODE"></TextBlock>
+ <TextBox Text="{Binding PostalCode}"></TextBox>
+ <TextBlock Text="LOCALITY"></TextBlock>
+ <TextBox Text="{Binding Locality}" />
+ <TextBlock Text="ADDRESS"></TextBlock>
+ <TextBox Text="{Binding AddressString}"></TextBox>
+ </controls:TableGrid>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/AddressView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/AddressView.xaml.cs
new file mode 100644
index 000000000..e5d644626
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/AddressView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.MachineStudio.UsersAndRoles.Views
+{
+ /// <summary>
+ /// Interaction logic for AddressView.xaml
+ /// </summary>
+ public partial class AddressView : UserControl
+ {
+ public AddressView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/ContactView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/ContactView.xaml
new file mode 100644
index 000000000..cdfa28c50
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/ContactView.xaml
@@ -0,0 +1,29 @@
+<UserControl x:Class="Tango.MachineStudio.UsersAndRoles.Views.ContactView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:vm="clr-namespace:Tango.MachineStudio.UsersAndRoles.ViewModels"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:autoComplete="clr-namespace:Tango.AutoComplete.Editors;assembly=Tango.AutoComplete"
+ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:mahApps="http://metro.mahapps.com/winfx/xaml/controls"
+ xmlns:entities="clr-namespace:Tango.BL.Entities;assembly=Tango.BL"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:local="clr-namespace:Tango.MachineStudio.UsersAndRoles.Views"
+ mc:Ignorable="d"
+ d:DesignHeight="300" d:DesignWidth="300" d:DataContext="{d:DesignInstance Type=entities:Contact, IsDesignTimeCreatable=False}">
+ <Grid>
+ <controls:TableGrid>
+ <TextBlock>FIRST NAME</TextBlock>
+ <TextBox Text="{Binding FirstName}"></TextBox>
+ <TextBlock>LAST NAME</TextBlock>
+ <TextBox Text="{Binding LastName}"></TextBox>
+ <TextBlock>EMAIL</TextBlock>
+ <TextBox Text="{Binding Email}"></TextBox>
+ <TextBlock>PHONE NUMBER</TextBlock>
+ <TextBox Text="{Binding PhoneNumber}"></TextBox>
+ <TextBlock>FAX</TextBlock>
+ <TextBox Text="{Binding Fax}"></TextBox>
+ </controls:TableGrid>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/ContactView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/ContactView.xaml.cs
new file mode 100644
index 000000000..fad93d63d
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/ContactView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.MachineStudio.UsersAndRoles.Views
+{
+ /// <summary>
+ /// Interaction logic for ContactView.xaml
+ /// </summary>
+ public partial class ContactView : UserControl
+ {
+ public ContactView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/MainView.xaml
new file mode 100644
index 000000000..90166f445
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/MainView.xaml
@@ -0,0 +1,28 @@
+<UserControl x:Class="Tango.MachineStudio.UsersAndRoles.Views.MainView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:global="clr-namespace:Tango.MachineStudio.UsersAndRoles"
+ xmlns:vm="clr-namespace:Tango.MachineStudio.UsersAndRoles.ViewModels"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:local="clr-namespace:Tango.MachineStudio.UsersAndRoles.Views"
+ mc:Ignorable="d"
+ d:DesignHeight="1080" d:DesignWidth="1920" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}">
+ <Grid>
+ <controls:MultiTransitionControl x:Name="TransitionControl" TransitionType="Slide">
+ <controls:MultiTransitionControl.Controls>
+ <ContentControl Tag="OrganizationSelectionView">
+ <local:OrganizationSelectionView/>
+ </ContentControl>
+ <ContentControl Tag="OrganizationManagementView">
+ <local:OrganizationManagementView/>
+ </ContentControl>
+ <ContentControl Tag="UserManagementView">
+ <local:UserManagementView/>
+ </ContentControl>
+ </controls:MultiTransitionControl.Controls>
+ </controls:MultiTransitionControl>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/MainView.xaml.cs
new file mode 100644
index 000000000..9fe030a3a
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/MainView.xaml.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.MachineStudio.UsersAndRoles.Views
+{
+ /// <summary>
+ /// Interaction logic for MainView.xaml
+ /// </summary>
+ public partial class MainView : UserControl
+ {
+ public static MainView Instance { get; set; }
+
+ public MainView()
+ {
+ InitializeComponent();
+ Instance = this;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml
new file mode 100644
index 000000000..64b05769a
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml
@@ -0,0 +1,151 @@
+<UserControl x:Class="Tango.MachineStudio.UsersAndRoles.Views.OrganizationManagementView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:global="clr-namespace:Tango.MachineStudio.UsersAndRoles"
+ xmlns:vm="clr-namespace:Tango.MachineStudio.UsersAndRoles.ViewModels"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:autoComplete="clr-namespace:Tango.AutoComplete.Editors;assembly=Tango.AutoComplete"
+ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:mahApps="http://metro.mahapps.com/winfx/xaml/controls"
+ xmlns:providers="clr-namespace:Tango.MachineStudio.UsersAndRoles.Providers"
+ xmlns:entities="clr-namespace:Tango.BL.Entities;assembly=Tango.BL"
+ xmlns:local="clr-namespace:Tango.MachineStudio.UsersAndRoles.Views"
+ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
+ mc:Ignorable="d"
+ d:DesignHeight="1080" d:DesignWidth="1920" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}" Background="Transparent">
+
+ <UserControl.Resources>
+ <converters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter" />
+ <providers:PlacesProvider x:Key="PlacesProvider" />
+ </UserControl.Resources>
+
+ <Grid>
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="400"/>
+ <ColumnDefinition Width="1*"/>
+ </Grid.ColumnDefinitions>
+
+ <Border Background="#A6FFFFFF" BorderBrush="Gray" BorderThickness="0 0 1 0">
+ <Grid Margin="10 20 10 10">
+ <StackPanel HorizontalAlignment="Center">
+
+ <StackPanel Orientation="Horizontal" Margin="-30 0 0 30">
+ <Image Source="../Images/organization.png" Width="58" />
+ <TextBlock Margin="10 0 0 0" FontSize="40" VerticalAlignment="Center" Text="{Binding ManagedOrganization.Name}"></TextBlock>
+ </StackPanel>
+
+ <TextBlock FontSize="14" FontWeight="SemiBold">ADDRESS</TextBlock>
+
+ <Border BorderBrush="Gray" BorderThickness="1" Width="300" HorizontalAlignment="Left" Padding="5" Margin="0 10 0 0" Background="#A9FFFFFF" Height="300">
+ <DockPanel>
+ <DockPanel DockPanel.Dock="Top">
+ <materialDesign:PackIcon Kind="Magnify" DockPanel.Dock="Left" Width="24" Height="24" />
+ <autoComplete:AutoCompleteTextBox x:Name="address_auto" Margin="5 0 0 0" Delay="500" DisplayMember="DisplayName" SelectedItem="{Binding SelectedOrganizationPlace,Mode=OneWayToSource}" Provider="{StaticResource PlacesProvider}" materialDesign:HintAssist.Hint="Find address" />
+ </DockPanel>
+ <local:AddressView DataContext="{Binding ManagedOrganization.Address}" />
+ </DockPanel>
+ </Border>
+
+ <TextBlock FontSize="14" FontWeight="SemiBold" Margin="0 40 0 0">CONTACT</TextBlock>
+
+ <Border BorderBrush="Gray" BorderThickness="1" Width="300" HorizontalAlignment="Left" Padding="5" Margin="0 10 0 0" Background="#A9FFFFFF" Height="250">
+ <local:ContactView DataContext="{Binding ManagedOrganization.Contact}" />
+ </Border>
+
+ <Button Margin="0 40 0 0" MinWidth="160" Height="50" Command="{Binding SaveOrganizationCommand}" Background="Gray" BorderBrush="Gray">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="ContentSave" Width="20" Height="20" />
+ <TextBlock Margin="5 0 0 0" FontSize="16">SAVE</TextBlock>
+ </StackPanel>
+ </Button>
+
+ </StackPanel>
+ </Grid>
+ </Border>
+
+ <Grid Grid.Column="1">
+ <TextBlock HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="30" FontStyle="Italic" Margin="150 40">
+ <Run Text="{Binding ManagedOrganization.Name}"></Run> <Run Text="Users"></Run>
+ </TextBlock>
+ <DockPanel Margin="100" MaxWidth="1200">
+ <Grid DockPanel.Dock="Top">
+ <StackPanel>
+ <Image Source="../Images/users.png" Width="300" Height="250" />
+ <Button Margin="0 -210 0 0" MinWidth="160" Height="50" Command="{Binding BackToOrganizationsCommand}" HorizontalAlignment="Left">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="KeyboardBackspace" Width="20" Height="20" />
+ <TextBlock Margin="5 0 0 0" FontSize="16">BACK</TextBlock>
+ </StackPanel>
+ </Button>
+ </StackPanel>
+ </Grid>
+ <Grid DockPanel.Dock="Bottom">
+ <StackPanel VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Left" Margin="0 0 0 0">
+ <Button Margin="0 0 10 0" MinWidth="160" Height="50" Background="#FF7575" BorderBrush="#FF7575" Command="{Binding RemoveUserCommand}">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="Delete" Width="20" Height="20" />
+ <TextBlock Margin="5 0 0 0" FontSize="16">DELETE</TextBlock>
+ </StackPanel>
+ </Button>
+ <Button Margin="0 0 10 0" MinWidth="160" Height="50" Background="#65C682" BorderBrush="#65C682" Command="{Binding AddUserCommand}">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="Plus" Width="20" Height="20" />
+ <TextBlock Margin="5 0 0 0" FontSize="16">NEW USER</TextBlock>
+ </StackPanel>
+ </Button>
+ </StackPanel>
+ <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
+ <Button Margin="50 0 0 0" MinWidth="200" Height="60" Command="{Binding ManageUserCommand}">
+ <StackPanel Orientation="Horizontal">
+ <TextBlock FontSize="18" VerticalAlignment="Center">MANAGE</TextBlock>
+ <materialDesign:PackIcon Margin="5 0 0 0" Kind="ChevronRight" Width="30" Height="30" />
+ </StackPanel>
+ </Button>
+ </StackPanel>
+ </Grid>
+ <Grid>
+ <DataGrid Margin="0 0 0 10" ItemsSource="{Binding ManagedOrganization.Users}" SelectedItem="{Binding SelectedUser}" d:DataContext="{d:DesignInstance Type=entities:User, IsDesignTimeCreatable=False}" BorderBrush="Silver" BorderThickness="1" Background="#93FFFFFF" AlternatingRowBackground="#C9F6F6F6" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" IsReadOnly="True">
+ <DataGrid.CellStyle>
+ <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+ </Style>
+ </DataGrid.CellStyle>
+ <DataGrid.Columns>
+ <DataGridTextColumn Header="LAST UPDATED" Binding="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="1*" />
+ <DataGridTextColumn Header="NAME" Binding="{Binding Contact.FullName}" Width="1*" />
+ <DataGridTextColumn Header="LOGIN EMAIL" Binding="{Binding Email}" Width="1*" />
+ <DataGridTextColumn Header="CONTACT EMAIL" Binding="{Binding Contact.Email}" Width="1*" />
+ <DataGridTextColumn Header="ADDRESS" Binding="{Binding Address.AddressString}" Width="1*" />
+ <DataGridTemplateColumn Header="ROLES" Width="1*">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <TextBlock Text="{Binding Roles[0].Name}" TextTrimming="CharacterEllipsis">
+ <TextBlock.ToolTip>
+ <ItemsControl ItemsSource="{Binding Roles}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" Margin="2">
+ <materialDesign:PackIcon Kind="AccountKey" Width="16" Height="16" />
+ <TextBlock Margin="5 0 0 0" Text="{Binding Name}"></TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </TextBlock.ToolTip>
+ </TextBlock>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ </DataGrid.Columns>
+ </DataGrid>
+ </Grid>
+ </DockPanel>
+ </Grid>
+ </Grid>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml.cs
new file mode 100644
index 000000000..e2c44a584
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using static Tango.SharedUI.Controls.MultiTransitionControl;
+
+namespace Tango.MachineStudio.UsersAndRoles.Views
+{
+ /// <summary>
+ /// Interaction logic for OrganizationManagementView.xaml
+ /// </summary>
+ public partial class OrganizationManagementView : UserControl , ITransitionView
+ {
+ public OrganizationManagementView()
+ {
+ InitializeComponent();
+ }
+
+ public void OnTransitionCompleted()
+ {
+ address_auto.Text = "";
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationSelectionView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationSelectionView.xaml
new file mode 100644
index 000000000..16dd36360
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationSelectionView.xaml
@@ -0,0 +1,69 @@
+<UserControl x:Class="Tango.MachineStudio.UsersAndRoles.Views.OrganizationSelectionView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:local="clr-namespace:Tango.MachineStudio.UsersAndRoles.Views"
+ xmlns:global="clr-namespace:Tango.MachineStudio.UsersAndRoles"
+ xmlns:vm="clr-namespace:Tango.MachineStudio.UsersAndRoles.ViewModels"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
+ mc:Ignorable="d"
+ d:DesignHeight="1080" d:DesignWidth="1920" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}" Background="Transparent">
+
+ <UserControl.Resources>
+ <converters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter" />
+ </UserControl.Resources>
+
+ <Grid>
+ <DockPanel Margin="100" MaxWidth="1200">
+ <Grid DockPanel.Dock="Top">
+ <Image Source="../Images/organization.png" Width="300" />
+ </Grid>
+ <Grid DockPanel.Dock="Bottom">
+ <StackPanel VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Left" Margin="0 0 0 0">
+ <Button Margin="0 0 10 0" MinWidth="160" Height="50" Background="#FF7575" BorderBrush="#FF7575" Command="{Binding RemoveOrganizationCommand}">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="Delete" Width="20" Height="20" />
+ <TextBlock Margin="5 0 0 0" FontSize="16">DELETE</TextBlock>
+ </StackPanel>
+ </Button>
+ <Button Margin="0 0 10 0" MinWidth="160" Height="50" Background="#65C682" BorderBrush="#65C682" Command="{Binding AddOrganizationCommand}">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="Plus" Width="20" Height="20" />
+ <TextBlock Margin="5 0 0 0" FontSize="16">NEW ORGANIZATION</TextBlock>
+ </StackPanel>
+ </Button>
+ </StackPanel>
+ <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
+ <Button Margin="50 0 0 0" MinWidth="200" Height="60" Command="{Binding ManageOrganizationCommand}">
+ <StackPanel Orientation="Horizontal">
+ <TextBlock FontSize="18" VerticalAlignment="Center">MANAGE</TextBlock>
+ <materialDesign:PackIcon Margin="5 0 0 0" Kind="ChevronRight" Width="30" Height="30" />
+ </StackPanel>
+ </Button>
+ </StackPanel>
+ </Grid>
+ <Grid>
+ <DataGrid Margin="0 0 0 10" BorderBrush="Silver" IsReadOnly="True" BorderThickness="1" Background="#93FFFFFF" AlternatingRowBackground="#C9F6F6F6" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding Organizations}" SelectedItem="{Binding SelectedOrganization}">
+ <DataGrid.CellStyle>
+ <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+ </Style>
+ </DataGrid.CellStyle>
+ <DataGrid.Columns>
+ <DataGridTextColumn Header="NAME" Binding="{Binding Name}" Width="1*" />
+ <DataGridTextColumn Header="LAST UPDATED" Binding="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="1*" />
+ <DataGridTextColumn Header="CONTACT" Binding="{Binding Contact.FullName}" Width="1*" />
+ <DataGridTextColumn Header="ADDRESS" Binding="{Binding Address.AddressString}" Width="1*" />
+ <DataGridTextColumn Header="MACHINES" Binding="{Binding Machines.Count}" Width="1*" />
+ <DataGridTextColumn Header="USERS" Binding="{Binding Users.Count}" Width="1*" />
+ </DataGrid.Columns>
+ </DataGrid>
+ </Grid>
+ </DockPanel>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationSelectionView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationSelectionView.xaml.cs
new file mode 100644
index 000000000..16c8b2b24
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationSelectionView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.MachineStudio.UsersAndRoles.Views
+{
+ /// <summary>
+ /// Interaction logic for OrganizationSelectionView.xaml
+ /// </summary>
+ public partial class OrganizationSelectionView : UserControl
+ {
+ public OrganizationSelectionView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml
new file mode 100644
index 000000000..ccb38b198
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml
@@ -0,0 +1,243 @@
+<UserControl x:Class="Tango.MachineStudio.UsersAndRoles.Views.UserManagementView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:global="clr-namespace:Tango.MachineStudio.UsersAndRoles"
+ xmlns:vm="clr-namespace:Tango.MachineStudio.UsersAndRoles.ViewModels"
+ xmlns:providers="clr-namespace:Tango.MachineStudio.UsersAndRoles.Providers"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:dragAndDrop="clr-namespace:Tango.DragAndDrop;assembly=Tango.DragAndDrop"
+ xmlns:autoComplete="clr-namespace:Tango.AutoComplete.Editors;assembly=Tango.AutoComplete"
+ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:mahApps="http://metro.mahapps.com/winfx/xaml/controls"
+ xmlns:entities="clr-namespace:Tango.BL.Entities;assembly=Tango.BL"
+ xmlns:local="clr-namespace:Tango.MachineStudio.UsersAndRoles.Views"
+ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
+ mc:Ignorable="d"
+ d:DesignHeight="1080" d:DesignWidth="1920" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}">
+
+ <UserControl.Resources>
+ <providers:PlacesProvider x:Key="PlacesProvider" />
+ </UserControl.Resources>
+
+ <Grid>
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="1*"/>
+ <ColumnDefinition Width="400"/>
+ </Grid.ColumnDefinitions>
+
+ <Grid Margin="10">
+ <DockPanel Margin="100" MaxWidth="1200">
+ <Grid DockPanel.Dock="Top">
+ <Grid>
+ <StackPanel>
+ <StackPanel Orientation="Horizontal">
+ <Button MinWidth="160" Height="50" Command="{Binding BackToManagedOrganizationCommand}" HorizontalAlignment="Left">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="KeyboardBackspace" Width="20" Height="20" />
+ <TextBlock Margin="5 0 0 0" FontSize="16">BACK</TextBlock>
+ </StackPanel>
+ </Button>
+ <Image Source="../Images/user.png" Width="100" RenderOptions.BitmapScalingMode="Fant" Margin="130 0 0 0"></Image>
+ <TextBlock Text="{Binding ManagedUser.Contact.FullName,FallbackValue='Roy Ben Shabat'}" VerticalAlignment="Center" FontSize="25" Margin="10 0 0 0"></TextBlock>
+ </StackPanel>
+
+ <StackPanel Orientation="Horizontal" Margin="0 20 0 0" HorizontalAlignment="Right">
+ <StackPanel>
+ <TextBlock FontSize="16" FontWeight="SemiBold">LOGIN</TextBlock>
+ <Border Width="300" BorderThickness="1" BorderBrush="Gray" Margin="0 5 0 0" Padding="15 5" Height="150" Background="#8EFFFFFF">
+ <local:UserView FontSize="10" DataContext="{Binding ManagedUser}" />
+ </Border>
+ </StackPanel>
+ <StackPanel Margin="10 0 0 0">
+ <TextBlock FontSize="16" FontWeight="SemiBold">CONTACT</TextBlock>
+ <Border Width="300" BorderThickness="1" BorderBrush="Gray" Margin="0 5 0 0" Padding="15 5" Height="250" Background="#8EFFFFFF">
+ <local:ContactView FontSize="10" DataContext="{Binding ManagedUser.Contact}" />
+ </Border>
+ </StackPanel>
+ <StackPanel Margin="10 0 0 0">
+ <TextBlock FontSize="16" FontWeight="SemiBold">ADDRESS</TextBlock>
+ <Border Width="300" BorderThickness="1" BorderBrush="Gray" Margin="0 5 0 0" Padding="15 5" Height="300" Background="#8EFFFFFF">
+ <DockPanel>
+ <DockPanel DockPanel.Dock="Top">
+ <materialDesign:PackIcon Kind="Magnify" DockPanel.Dock="Left" Width="24" Height="24" />
+ <autoComplete:AutoCompleteTextBox x:Name="address_auto" Margin="5 0 0 0" Delay="500" DisplayMember="DisplayName" SelectedItem="{Binding SelectedUserPlace,Mode=OneWayToSource}" Provider="{StaticResource PlacesProvider}" materialDesign:HintAssist.Hint="Find address" />
+ </DockPanel>
+ <local:AddressView FontSize="10" DataContext="{Binding ManagedUser.Address}" />
+ </DockPanel>
+ </Border>
+ </StackPanel>
+ </StackPanel>
+ </StackPanel>
+ </Grid>
+ </Grid>
+ <Grid DockPanel.Dock="Bottom">
+ <Button Margin="0 10 0 0" MinWidth="200" Height="60" Command="{Binding SaveManagedUserCommand}" HorizontalAlignment="Right">
+ <StackPanel Orientation="Horizontal">
+ <TextBlock FontSize="18" VerticalAlignment="Center">SAVE</TextBlock>
+ <materialDesign:PackIcon Margin="5 0 0 0" Kind="ContentSave" Width="30" Height="30" />
+ </StackPanel>
+ </Button>
+ </Grid>
+ <Grid>
+ <DockPanel Margin="0 20 0 0">
+ <TextBlock DockPanel.Dock="Top" FontSize="16" FontWeight="SemiBold">ROLES</TextBlock>
+ <Grid Margin="0 5 0 0" Style="{StaticResource droppableGrid}" dragAndDrop:DragAndDropService.Drop="OnDropRole" Background="#7BFFFFFF">
+ <TextBlock HorizontalAlignment="Center" VerticalAlignment="Top" Foreground="Silver" FontSize="20">DRAG &amp; DROP ROLES</TextBlock>
+ <Border BorderBrush="Gray" BorderThickness="1" Padding="10">
+ <ListBox ItemsSource="{Binding ManagedUserRoles}" ItemContainerStyle="{StaticResource basicListBoxItem}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled">
+ <ListBox.ItemsPanel>
+ <ItemsPanelTemplate>
+ <WrapPanel Orientation="Horizontal" />
+ </ItemsPanelTemplate>
+ </ListBox.ItemsPanel>
+ <ListBox.ItemTemplate>
+ <DataTemplate DataType="{x:Type entities:Role}">
+ <Grid>
+ <Grid.ToolTip>
+ <StackPanel>
+ <TextBlock Text="{Binding Description}" FontSize="10" Margin="0 0 0 10"></TextBlock>
+ <ItemsControl ItemsSource="{Binding RolesPermissions}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <Grid>
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="Security" Width="12" />
+ <TextBlock Margin="5 0 0 0" FontSize="10" Text="{Binding Permission.Name}"></TextBlock>
+ </StackPanel>
+ </Grid>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </StackPanel>
+ </Grid.ToolTip>
+ <Border Margin="5" CornerRadius="5" Width="100" Height="100" BorderThickness="1" Padding="2">
+ <Border.Style>
+ <Style TargetType="Border">
+ <Setter Property="BorderBrush" Value="Silver"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected}" Value="True">
+ <Setter Property="BorderBrush" Value="{StaticResource AccentColorBrush}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Border.Style>
+ <Border.Background>
+ <LinearGradientBrush>
+ <GradientStop Color="White"/>
+ <GradientStop Color="#FFD6D6D6" Offset="1"/>
+ </LinearGradientBrush>
+ </Border.Background>
+ <Grid>
+ <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
+ <Image Source="../Images/roles.png" Width="32" RenderOptions.BitmapScalingMode="Fant"></Image>
+ <TextBlock Text="{Binding Name}" TextWrapping="Wrap" HorizontalAlignment="Center" TextAlignment="Center" FontSize="13" Margin="5"></TextBlock>
+ </StackPanel>
+ </Grid>
+ </Border>
+
+ <Button HorizontalAlignment="Right" VerticalAlignment="Top" Margin="10" Cursor="Hand" ToolTip="Remove Role" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.RemoveRoleCommand}" CommandParameter="{Binding}">
+ <Button.Style>
+ <Style TargetType="Button" BasedOn="{StaticResource emptyButton}">
+ <Setter Property="Visibility" Value="Hidden"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=IsMouseOver}" Value="True">
+ <Setter Property="Visibility" Value="Visible"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Button.Style>
+ <materialDesign:PackIcon Kind="Delete" Foreground="#FF5C5C" Width="16" Height="16" />
+ </Button>
+ </Grid>
+ </DataTemplate>
+ </ListBox.ItemTemplate>
+ </ListBox>
+ </Border>
+ </Grid>
+ </DockPanel>
+ </Grid>
+ </DockPanel>
+ </Grid>
+
+ <Grid Grid.Column="1" Background="White">
+ <DockPanel Margin="10">
+ <StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
+ <Image Source="../Images/roles.png" Width="70" RenderOptions.BitmapScalingMode="Fant"></Image>
+ <TextBlock FontSize="16" FontWeight="SemiBold" VerticalAlignment="Center" Margin="10 0 0 0">AVAILABLE ROLES</TextBlock>
+ </StackPanel>
+
+ <Grid>
+ <ListBox ItemsSource="{Binding Roles}" ItemContainerStyle="{StaticResource basicListBoxItem}" HorizontalContentAlignment="Stretch" Background="Transparent">
+ <ListBox.ItemTemplate>
+ <DataTemplate>
+ <Grid Background="Transparent" IsHitTestVisible="True" Style="{StaticResource draggableGrid}" dragAndDrop:DragAndDropService.DraggableBorderBrush="{StaticResource AccentColorBrush}" dragAndDrop:DragAndDropService.Draggable="True" dragAndDrop:DragAndDropService.DraggingSurface="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DraggingSurface}">
+ <Grid.ToolTip>
+ <StackPanel>
+ <TextBlock Text="{Binding Description}" FontSize="10" Margin="0 0 0 10"></TextBlock>
+ <ItemsControl ItemsSource="{Binding RolesPermissions}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="Security" Width="12" />
+ <TextBlock Margin="5 0 0 0" FontSize="10" Text="{Binding Permission.Name}"></TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </StackPanel>
+ </Grid.ToolTip>
+ <DockPanel>
+ <Border DockPanel.Dock="Left" Width="100" Height="100" IsHitTestVisible="False" BorderBrush="Silver" BorderThickness="1" CornerRadius="5" Margin="5" Padding="2">
+ <Border.Background>
+ <LinearGradientBrush>
+ <GradientStop Color="White"/>
+ <GradientStop Color="#FFD6D6D6" Offset="1"/>
+ </LinearGradientBrush>
+ </Border.Background>
+ <Grid>
+ <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
+ <Image Source="../Images/roles.png" Width="32" RenderOptions.BitmapScalingMode="Fant"></Image>
+ <TextBlock Text="{Binding Name}" TextWrapping="Wrap" HorizontalAlignment="Center" TextAlignment="Center" FontSize="13" Margin="5"></TextBlock>
+ </StackPanel>
+ </Grid>
+ </Border>
+
+ <Grid MaxHeight="85" HorizontalAlignment="Left" Margin="20 0 0 0">
+ <ItemsControl ItemsSource="{Binding RolesPermissions}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="Security" Width="12" />
+ <TextBlock Margin="5 0 0 0" FontSize="10" TextTrimming="CharacterEllipsis" MaxWidth="150" Text="{Binding Permission.Name}"></TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+
+ <Grid>
+ <Grid.Background>
+ <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
+ <GradientStop/>
+ <GradientStop Color="White" Offset="1"/>
+ </LinearGradientBrush>
+ </Grid.Background>
+ </Grid>
+ </Grid>
+ </DockPanel>
+ </Grid>
+ </DataTemplate>
+ </ListBox.ItemTemplate>
+ </ListBox>
+ </Grid>
+ </DockPanel>
+
+ <Rectangle HorizontalAlignment="Left" Stroke="#BBBBBB" StrokeThickness="1"></Rectangle>
+ </Grid>
+ </Grid>
+
+ <dragAndDrop:DraggingSurface x:Name="dragSurface" />
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml.cs
new file mode 100644
index 000000000..f2ff25637
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Tango.BL.Entities;
+using Tango.DragAndDrop;
+using Tango.MachineStudio.UsersAndRoles.ViewModels;
+using static Tango.SharedUI.Controls.MultiTransitionControl;
+
+namespace Tango.MachineStudio.UsersAndRoles.Views
+{
+ /// <summary>
+ /// Interaction logic for UserManagementView.xaml
+ /// </summary>
+ public partial class UserManagementView : UserControl, ITransitionView
+ {
+ private MainViewVM _vm;
+
+ public DraggingSurface DraggingSurface
+ {
+ get { return (DraggingSurface)GetValue(DraggingSurfaceProperty); }
+ set { SetValue(DraggingSurfaceProperty, value); }
+ }
+ public static readonly DependencyProperty DraggingSurfaceProperty =
+ DependencyProperty.Register("DraggingSurface", typeof(DraggingSurface), typeof(UserManagementView), new PropertyMetadata(null));
+
+ public UserManagementView()
+ {
+ InitializeComponent();
+ DraggingSurface = dragSurface;
+ Loaded += (_, __) => _vm = DataContext as MainViewVM;
+ }
+
+ private void OnDropRole(object sender, DropEventArgs e)
+ {
+ if (e.Draggable.DataContext is Role)
+ {
+ _vm.OnDropRole(e.Draggable.DataContext as Role);
+ }
+ }
+
+ public void OnTransitionCompleted()
+ {
+ address_auto.Text = "";
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml
new file mode 100644
index 000000000..6c7596015
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml
@@ -0,0 +1,23 @@
+<UserControl x:Class="Tango.MachineStudio.UsersAndRoles.Views.UserView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:entities="clr-namespace:Tango.BL.Entities;assembly=Tango.BL"
+ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:pass="clr-namespace:Tango.SharedUI.Helpers;assembly=Tango.SharedUI"
+ xmlns:local="clr-namespace:Tango.MachineStudio.UsersAndRoles.Views"
+ mc:Ignorable="d"
+ d:DesignHeight="300" d:DesignWidth="300" d:DataContext="{d:DesignInstance Type=entities:User, IsDesignTimeCreatable=False}">
+
+
+
+ <Grid>
+ <controls:TableGrid>
+ <TextBlock Text="EMAIL"></TextBlock>
+ <TextBox Text="{Binding Email}"></TextBox>
+ <TextBlock Text="PASSWORD"></TextBlock>
+ <PasswordBox MaxLength="30" pass:PasswordHelper.Attach="True" pass:PasswordHelper.Password="{Binding Password,Mode=TwoWay}"></PasswordBox>
+ </controls:TableGrid>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml.cs
new file mode 100644
index 000000000..b617bdbc4
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.MachineStudio.UsersAndRoles.Views
+{
+ /// <summary>
+ /// Interaction logic for UserView.xaml
+ /// </summary>
+ public partial class UserView : UserControl
+ {
+ public UserView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/app.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/app.config
new file mode 100644
index 000000000..cacd4cd77
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/app.config
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" />
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
+</configuration> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/packages.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/packages.config
new file mode 100644
index 000000000..6b8afad69
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/packages.config
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="CommonServiceLocator" version="1.3" targetFramework="net46" />
+ <package id="EntityFramework" version="6.0.0" targetFramework="net46" />
+ <package id="MahApps.Metro" version="1.5.0" targetFramework="net46" />
+ <package id="MaterialDesignColors" version="1.1.2" targetFramework="net46" />
+ <package id="MaterialDesignThemes" version="2.3.1.953" targetFramework="net46" />
+ <package id="MvvmLightLibs" version="5.3.0.0" targetFramework="net46" />
+ <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net46" />
+</packages> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveColorPickerControl.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveColorPickerControl.xaml
index 2aa11c63c..d65bd5d8f 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveColorPickerControl.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveColorPickerControl.xaml
@@ -6,46 +6,19 @@
xmlns:colorPicker="clr-namespace:Tango;assembly=Tango.ColorPicker"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:commonControls="clr-namespace:Tango.MachineStudio.Common.Controls"
xmlns:shapes="clr-namespace:Tango.SharedUI.Shapes;assembly=Tango.SharedUI"
xmlns:local="clr-namespace:Tango.MachineStudio.Common.Controls"
mc:Ignorable="d"
- d:DesignHeight="250" d:DesignWidth="550" Background="White">
+ Height="250" Width="650" Background="White">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="235"/>
<ColumnDefinition Width="1*"/>
- <ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
- <colorPicker:ColorCanvas SelectedColor="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=SelectedColor,Mode=TwoWay}" Background="Transparent" BorderThickness="0" UsingAlphaChannel="False" />
+ <colorPicker:ColorCanvas x:Name="colorCanvas" SelectedColor="{x:Null}" SelectedColorChanged="ColorCanvas_SelectedColorChanged" Background="Transparent" BorderThickness="0" UsingAlphaChannel="False" />
- <Viewbox Stretch="Uniform" Grid.Column="1" Margin="5">
- <controls:HiveControl x:Name="hive" Height="250" HexagonSelected="hive_HexagonSelected" MaxSelections="1" Width="250" BorderThickness="1" />
- </Viewbox>
-
- <Grid Grid.Column="2">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="1*"/>
- <RowDefinition Height="45"/>
- <RowDefinition Height="1*"/>
- </Grid.RowDefinitions>
- <Button ToolTip="Increase Delta Resolution" Click="OnResolutionUpClicked" Style="{StaticResource MaterialDesignFlatButton}" Height="50" Padding="0" Foreground="#202020" VerticalAlignment="Bottom">
- <materialDesign:PackIcon Kind="ArrowUp" Width="24" Height="24" />
- </Button>
-
- <Grid Grid.Row="1">
- <shapes:Hexagon Stroke="#202020" StrokeThickness="1" Margin="5" />
- <TextBlock TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="Bold" FontStyle="Italic" FontSize="10">
- <Run Text="&#916;"></Run>
- <Run Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=Resolution,FallbackValue=1}"></Run>
- </TextBlock>
- </Grid>
-
- <Button ToolTip="Decrease Delta Resolution" Click="OnResolutionDownClicked" Grid.Row="2" Style="{StaticResource MaterialDesignFlatButton}" Height="50" Padding="0" Foreground="#202020" VerticalAlignment="Top">
- <materialDesign:PackIcon Kind="ArrowDown" Width="24" Height="24" />
- </Button>
- </Grid>
- </Grid>
+ <commonControls:HiveComboControl x:Name="hiveCombo" Grid.Column="1" SelectedHexagonChanged="hiveCombo_SelectedHexagonChanged" />
</Grid>
</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveColorPickerControl.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveColorPickerControl.xaml.cs
index 7d1a1dc81..41b362889 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveColorPickerControl.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveColorPickerControl.xaml.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -12,6 +13,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
+using Tango.SharedUI.Controls;
namespace Tango.MachineStudio.Common.Controls
{
@@ -21,7 +23,12 @@ namespace Tango.MachineStudio.Common.Controls
public partial class HiveColorPickerControl : UserControl
{
public event EventHandler<Color> SelectedColorChanged;
- private bool _preventHiveSelectedColorChange;
+ public event EventHandler<Color> SelectedHiveColorChanged;
+ public event EventHandler<HexagonControl> SelectedHexagonChanged;
+ public event EventHandler<int> LAxisValueChanged;
+ public event EventHandler<int> ResolutionChanged;
+
+ private bool _preventColorCanvasEvent;
public bool DemoMode
{
@@ -39,93 +46,112 @@ namespace Tango.MachineStudio.Common.Controls
public static readonly DependencyProperty ResolutionProperty =
DependencyProperty.Register("Resolution", typeof(int), typeof(HiveColorPickerControl), new PropertyMetadata(1, (d, e) => (d as HiveColorPickerControl).OnResolutionChanged()));
- public Color SelectedColor
+ public Color? SelectedColor
{
- get { return (Color)GetValue(SelectedColorProperty); }
+ get { return (Color?)GetValue(SelectedColorProperty); }
set { SetValue(SelectedColorProperty, value); }
}
public static readonly DependencyProperty SelectedColorProperty =
- DependencyProperty.Register("SelectedColor", typeof(Color), typeof(HiveColorPickerControl), new PropertyMetadata(Colors.Red, (d, e) => (d as HiveColorPickerControl).OnSelectedColorChanged()));
+ DependencyProperty.Register("SelectedColor", typeof(Color?), typeof(HiveColorPickerControl), new PropertyMetadata(null, (d, e) => (d as HiveColorPickerControl).OnSelectedColorChanged()));
+
+ public HexagonControl SelectedHexagon
+ {
+ get { return (HexagonControl)GetValue(SelectedHexagonProperty); }
+ set { SetValue(SelectedHexagonProperty, value); }
+ }
+ public static readonly DependencyProperty SelectedHexagonProperty =
+ DependencyProperty.Register("SelectedHexagon", typeof(HexagonControl), typeof(HiveColorPickerControl), new PropertyMetadata(null, (d, e) => (d as HiveColorPickerControl).OnSelectedHexagonChanged()));
- public Color SelectedHiveColor
+ public Color? SelectedHiveColor
{
- get { return (Color)GetValue(SelectedHiveColorProperty); }
+ get { return (Color?)GetValue(SelectedHiveColorProperty); }
set { SetValue(SelectedHiveColorProperty, value); }
}
public static readonly DependencyProperty SelectedHiveColorProperty =
- DependencyProperty.Register("SelectedHiveColor", typeof(Color), typeof(HiveColorPickerControl), new PropertyMetadata(Colors.Red));
+ DependencyProperty.Register("SelectedHiveColor", typeof(Color?), typeof(HiveColorPickerControl), new PropertyMetadata(null, (d, e) => (d as HiveColorPickerControl).OnSelectedHiveColorChanged()));
+
+ public int LAxisValue
+ {
+ get { return (int)GetValue(LAxisValueProperty); }
+ set { SetValue(LAxisValueProperty, value); }
+ }
+ public static readonly DependencyProperty LAxisValueProperty =
+ DependencyProperty.Register("LAxisValue", typeof(int), typeof(HiveColorPickerControl), new PropertyMetadata(0, (d, e) => (d as HiveColorPickerControl).OnLAxisValueChanged()));
+
public HiveColorPickerControl()
{
InitializeComponent();
- hive.Loaded += Hive_Loaded;
+ this.Bind(ResolutionProperty, hiveCombo, HiveComboControl.ResolutionProperty, BindingMode.TwoWay);
+ this.Bind(SelectedHexagonProperty, hiveCombo, HiveComboControl.SelectedHexagonProperty, BindingMode.OneWay);
+ this.Bind(LAxisValueProperty, hiveCombo, HiveComboControl.LAxisValueProperty, BindingMode.OneWay);
+
+
+ hiveCombo.HiveGenerated += HiveCombo_HiveGenerated;
}
- private void Hive_Loaded(object sender, RoutedEventArgs e)
+ private void HiveCombo_HiveGenerated(object sender, EventArgs e)
{
- OnSelectedColorChanged();
+ hiveCombo.GenerateDemoModeHiveColors(SelectedColor.Value);
+ }
+
+ private void OnSelectedHiveColorChanged()
+ {
+ //_preventColorCanvasEvent = true;
+ //colorCanvas.SelectedColor = SelectedHiveColor;
+ //_preventColorCanvasEvent = false;
+
+ SelectedHiveColorChanged?.Invoke(this, SelectedHiveColor.Value);
}
private void OnSelectedColorChanged()
{
- if (DemoMode)
+ if (SelectedColor != null)
{
- if (!_preventHiveSelectedColorChange)
+ _preventColorCanvasEvent = true;
+ colorCanvas.SelectedColor = SelectedColor;
+ _preventColorCanvasEvent = false;
+
+ if (DemoMode)
{
- GenerateDemoModeHiveColors();
+ hiveCombo.GenerateDemoModeHiveColors(SelectedColor.Value);
}
- SelectedColorChanged?.Invoke(this, SelectedColor);
+
+ SelectedColorChanged?.Invoke(this, SelectedColor.Value);
}
}
- private void hive_HexagonSelected(object sender, SharedUI.Controls.HexagonControl hexagon)
+ private void OnSelectedHexagonChanged()
{
- SelectedHiveColor = (hexagon.Fill as SolidColorBrush).Color;
-
- _preventHiveSelectedColorChange = true;
- SelectedColor = SelectedHiveColor;
- _preventHiveSelectedColorChange = false;
+ SelectedHexagonChanged?.Invoke(this, SelectedHexagon);
+ SelectedHiveColor = (SelectedHexagon.Fill as SolidColorBrush).Color;
}
- private void OnResolutionChanged()
+ private void OnLAxisValueChanged()
{
- GenerateDemoModeHiveColors();
+ LAxisValueChanged?.Invoke(this, LAxisValue);
}
- private void GenerateDemoModeHiveColors()
+ private void OnResolutionChanged()
{
- if (hive.CenterHexagon != null)
- {
- Random rnd = new Random();
-
- (hive.CenterHexagon.Fill as SolidColorBrush).Color = SelectedColor;
-
- int counter = 0;
-
- foreach (var hexagon in hive.Hexagons.Where(x => x != hive.CenterHexagon).OrderBy(x => rnd.Next()))
- {
- (hexagon.Fill as SolidColorBrush).Color = Color.FromRgb((byte)Math.Min(SelectedColor.R + counter++, 255), (byte)Math.Min((SelectedColor.G + counter++), 255), (byte)Math.Min((SelectedColor.B + counter++), 255));
-
- counter += (int)(4d * ((double)Resolution / 4d));
- }
- }
+ hiveCombo.GenerateDemoModeHiveColors(SelectedColor.Value);
}
- private void OnResolutionUpClicked(object sender, RoutedEventArgs e)
+ private void ColorCanvas_SelectedColorChanged(object sender, RoutedPropertyChangedEventArgs<Color?> e)
{
- if (Resolution < 10)
+ if (!_preventColorCanvasEvent)
{
- Resolution++;
+ SelectedColor = e.NewValue.Value;
+ hiveCombo.SelectHeagon(hiveCombo.CenterHexagon);
}
}
- private void OnResolutionDownClicked(object sender, RoutedEventArgs e)
+ private void hiveCombo_SelectedHexagonChanged(object sender, HexagonControl e)
{
- if (Resolution > 1)
- {
- Resolution--;
- }
+ SelectedHexagon = e;
+ SelectedHiveColor = (SelectedHexagon.Fill as SolidColorBrush).Color;
+ SelectedHexagonChanged?.Invoke(this, SelectedHexagon);
}
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveComboControl.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveComboControl.xaml
new file mode 100644
index 000000000..692b3f818
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveComboControl.xaml
@@ -0,0 +1,54 @@
+<UserControl x:Class="Tango.MachineStudio.Common.Controls.HiveComboControl"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:shapes="clr-namespace:Tango.SharedUI.Shapes;assembly=Tango.SharedUI"
+ xmlns:local="clr-namespace:Tango.MachineStudio.Common.Controls"
+ mc:Ignorable="d"
+ Height="250" Width="415">
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="1*"/>
+ <ColumnDefinition Width="70"/>
+ <ColumnDefinition Width="50"/>
+ </Grid.ColumnDefinitions>
+
+ <Viewbox Stretch="Uniform" Grid.Column="0" Margin="5">
+ <controls:HiveControl x:Name="hive" x:FieldModifier="public" Height="250" HexagonSelected="OnHexagonSelected" MaxSelections="1" Width="250" BorderThickness="1" />
+ </Viewbox>
+
+ <Grid Grid.Column="1" ClipToBounds="True">
+ <Viewbox Stretch="Fill" Width="160" Height="200" HorizontalAlignment="Right" Margin="0 0 -20 0">
+ <controls:HiveControl Height="290" HexagonSelected="OnRowHiveHexagonSelected" MaxSelections="1" Width="100" Margin="0 0 50 0" HiveWidth="1" HiveHeight="5" BorderThickness="1" />
+ </Viewbox>
+ </Grid>
+
+ <Grid Grid.Column="2">
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="1*"/>
+ <RowDefinition Height="45"/>
+ <RowDefinition Height="1*"/>
+ </Grid.RowDefinitions>
+ <Button ToolTip="Increase Delta Resolution" Click="OnResolutionUpClicked" Style="{StaticResource MaterialDesignFlatButton}" Height="50" Padding="0" Foreground="#202020" VerticalAlignment="Bottom">
+ <materialDesign:PackIcon Kind="ArrowUp" Width="24" Height="24" />
+ </Button>
+
+ <Grid Grid.Row="1">
+ <shapes:Hexagon Stroke="#202020" StrokeThickness="1" Margin="5" />
+ <TextBlock TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="Bold" FontStyle="Italic" FontSize="10">
+ <Run Text="&#916;"></Run>
+ <Run Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=Resolution,FallbackValue=1}"></Run>
+ </TextBlock>
+ </Grid>
+
+ <Button ToolTip="Decrease Delta Resolution" Click="OnResolutionDownClicked" Grid.Row="2" Style="{StaticResource MaterialDesignFlatButton}" Height="50" Padding="0" Foreground="#202020" VerticalAlignment="Top">
+ <materialDesign:PackIcon Kind="ArrowDown" Width="24" Height="24" />
+ </Button>
+ </Grid>
+ </Grid>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveComboControl.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveComboControl.xaml.cs
new file mode 100644
index 000000000..ceba52826
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/HiveComboControl.xaml.cs
@@ -0,0 +1,135 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Tango.Logging;
+using Tango.SharedUI.Controls;
+
+namespace Tango.MachineStudio.Common.Controls
+{
+ /// <summary>
+ /// Interaction logic for HiveComboControl.xaml
+ /// </summary>
+ public partial class HiveComboControl : UserControl
+ {
+ public event EventHandler<Color> SelectedColorChanged;
+ public event EventHandler<HexagonControl> SelectedHexagonChanged;
+ public event EventHandler<int> LAxisValueChanged;
+ public event EventHandler<int> ResolutionChanged;
+ public event EventHandler HiveGenerated;
+
+ public int Resolution
+ {
+ get { return (int)GetValue(ResolutionProperty); }
+ set { SetValue(ResolutionProperty, value); }
+ }
+ public static readonly DependencyProperty ResolutionProperty =
+ DependencyProperty.Register("Resolution", typeof(int), typeof(HiveComboControl), new PropertyMetadata(1, (d, e) => (d as HiveComboControl).OnResolutionChanged()));
+
+ public HexagonControl SelectedHexagon
+ {
+ get { return (HexagonControl)GetValue(SelectedHexagonProperty); }
+ set { SetValue(SelectedHexagonProperty, value); }
+ }
+ public static readonly DependencyProperty SelectedHexagonProperty =
+ DependencyProperty.Register("SelectedHexagon", typeof(HexagonControl), typeof(HiveComboControl), new PropertyMetadata(null, (d, e) => (d as HiveComboControl).OnSelectedHexagonChanged()));
+
+ public int LAxisValue
+ {
+ get { return (int)GetValue(LAxisValueProperty); }
+ set { SetValue(LAxisValueProperty, value); }
+ }
+ public static readonly DependencyProperty LAxisValueProperty =
+ DependencyProperty.Register("LAxisValue", typeof(int), typeof(HiveComboControl), new PropertyMetadata(0, (d, e) => (d as HiveComboControl).OnLAxisValueChanged()));
+
+ public HexagonControl CenterHexagon
+ {
+ get { return hive.CenterHexagon; }
+ }
+
+
+ public HiveComboControl()
+ {
+ InitializeComponent();
+
+ hive.HiveGenerated += (x, e) => HiveGenerated?.Invoke(this, new EventArgs());
+ }
+
+ private void OnLAxisValueChanged()
+ {
+ LAxisValueChanged?.Invoke(this, LAxisValue);
+ }
+
+ private void OnSelectedHexagonChanged()
+ {
+ SelectedHexagonChanged?.Invoke(this, SelectedHexagon);
+ }
+
+ private void OnResolutionChanged()
+ {
+ ResolutionChanged?.Invoke(this, Resolution);
+ }
+
+ public void GenerateDemoModeHiveColors(Color originalColor)
+ {
+ if (hive.CenterHexagon != null)
+ {
+ Random rnd = new Random();
+
+ (hive.CenterHexagon.Fill as SolidColorBrush).Color = originalColor;
+
+ int counter = 0;
+
+ foreach (var hexagon in hive.Hexagons.Where(x => x != hive.CenterHexagon).OrderBy(x => rnd.Next()))
+ {
+ (hexagon.Fill as SolidColorBrush).Color = Color.FromRgb((byte)Math.Min(originalColor.R + counter++, 255), (byte)Math.Min((originalColor.G + counter++), 255), (byte)Math.Min((originalColor.B + counter++), 255));
+
+ counter += (int)(4d * ((double)Resolution / 4d));
+ }
+ }
+ }
+
+ private void OnResolutionUpClicked(object sender, RoutedEventArgs e)
+ {
+ if (Resolution < 10)
+ {
+ Resolution++;
+ }
+ }
+
+ private void OnResolutionDownClicked(object sender, RoutedEventArgs e)
+ {
+ if (Resolution > 1)
+ {
+ Resolution--;
+ }
+ }
+
+ private void OnRowHiveHexagonSelected(object sender, HexagonControl hexagon)
+ {
+ LAxisValue = 2 - hexagon.Row;
+ }
+
+ private void OnHexagonSelected(object sender, HexagonControl e)
+ {
+ SelectedHexagon = e;
+ }
+
+ public void SelectHeagon(HexagonControl hexagon)
+ {
+ hive.SelectHexagon(hexagon);
+ SelectedHexagonChanged?.Invoke(this, hexagon);
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj
index 457646223..6dfc72c7f 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -76,6 +76,9 @@
<Compile Include="Controls\HiveColorPickerControl.xaml.cs">
<DependentUpon>HiveColorPickerControl.xaml</DependentUpon>
</Compile>
+ <Compile Include="Controls\HiveComboControl.xaml.cs">
+ <DependentUpon>HiveComboControl.xaml</DependentUpon>
+ </Compile>
<Compile Include="Controls\IRealTimeGraph.cs" />
<Compile Include="Controls\RealTimeGraphMultiControl.xaml.cs">
<DependentUpon>RealTimeGraphMultiControl.xaml</DependentUpon>
@@ -114,6 +117,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
+ <Page Include="Controls\HiveComboControl.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
<Page Include="Controls\MdiContainerControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -212,6 +219,10 @@
<Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project>
<Name>Tango.Integration</Name>
</ProjectReference>
+ <ProjectReference Include="..\..\Tango.Logging\Tango.Logging.csproj">
+ <Project>{BC932DBD-7CDB-488C-99E4-F02CF441F55E}</Project>
+ <Name>Tango.Logging</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\Tango.PMR\Tango.PMR.csproj">
<Project>{e4927038-348d-4295-aaf4-861c58cb3943}</Project>
<Name>Tango.PMR</Name>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Installer/Tango.MachineStudio.Installer.vdproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Installer/Tango.MachineStudio.Installer.vdproj
index f37b50669..1bd8adac7 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Installer/Tango.MachineStudio.Installer.vdproj
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Installer/Tango.MachineStudio.Installer.vdproj
@@ -46,7 +46,13 @@
"Entry"
{
"MsmKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
- "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "OwnerKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
+ "OwnerKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -88,6 +94,12 @@
"Entry"
{
"MsmKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
+ "OwnerKey" = "8:_882DC187F2FE507EF9AF44F399908E5F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
"OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
"MsmSig" = "8:_UNDEFINED"
}
@@ -118,6 +130,12 @@
"Entry"
{
"MsmKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
"OwnerKey" = "8:_2F23291F311EE9576449E5628A5702AE"
"MsmSig" = "8:_UNDEFINED"
}
@@ -130,11 +148,23 @@
"Entry"
{
"MsmKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
+ "OwnerKey" = "8:_228BC2A283BAB0C236CE404E2766753A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
"OwnerKey" = "8:_5A8B326A4A0607AFC366F8FD9657A87A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
+ "MsmKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_136196DD2763419D959721C2BA143498"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -153,6 +183,12 @@
}
"Entry"
{
+ "MsmKey" = "8:_164D74DB92C311B5B1C4DE16DFFBF6B1"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_173C4B05CE04BA34E920DC64B25A8670"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
@@ -160,13 +196,13 @@
"Entry"
{
"MsmKey" = "8:_1910D5B276479C48B4F7762A638405F5"
- "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
+ "OwnerKey" = "8:_89624A3865EAD179277FE5905CBE627D"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_1910D5B276479C48B4F7762A638405F5"
- "OwnerKey" = "8:_89624A3865EAD179277FE5905CBE627D"
+ "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -178,13 +214,13 @@
"Entry"
{
"MsmKey" = "8:_1AC47588060EAA9F2B7A13EC07359D10"
- "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
+ "OwnerKey" = "8:_89624A3865EAD179277FE5905CBE627D"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_1AC47588060EAA9F2B7A13EC07359D10"
- "OwnerKey" = "8:_89624A3865EAD179277FE5905CBE627D"
+ "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -202,13 +238,13 @@
"Entry"
{
"MsmKey" = "8:_2444D22B50272EAE03F2B5D2457335EC"
- "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
+ "OwnerKey" = "8:_89624A3865EAD179277FE5905CBE627D"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_2444D22B50272EAE03F2B5D2457335EC"
- "OwnerKey" = "8:_89624A3865EAD179277FE5905CBE627D"
+ "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -358,6 +394,12 @@
"Entry"
{
"MsmKey" = "8:_42250239B4791E8133657256CCE3506C"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_42250239B4791E8133657256CCE3506C"
"OwnerKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
"MsmSig" = "8:_UNDEFINED"
}
@@ -370,6 +412,18 @@
"Entry"
{
"MsmKey" = "8:_42250239B4791E8133657256CCE3506C"
+ "OwnerKey" = "8:_BEF81681FFB4A3D9146381DB58646485"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_42250239B4791E8133657256CCE3506C"
+ "OwnerKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_42250239B4791E8133657256CCE3506C"
"OwnerKey" = "8:_DF6FFF88157E7FBCFB7E188431AAF4CF"
"MsmSig" = "8:_UNDEFINED"
}
@@ -412,7 +466,13 @@
"Entry"
{
"MsmKey" = "8:_51C4508525FA0604A9CD727897EBD530"
- "OwnerKey" = "8:_8D3497DF2885B15B643A20537C75D67E"
+ "OwnerKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_51C4508525FA0604A9CD727897EBD530"
+ "OwnerKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -448,6 +508,12 @@
"Entry"
{
"MsmKey" = "8:_51C4508525FA0604A9CD727897EBD530"
+ "OwnerKey" = "8:_882DC187F2FE507EF9AF44F399908E5F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_51C4508525FA0604A9CD727897EBD530"
"OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
"MsmSig" = "8:_UNDEFINED"
}
@@ -460,7 +526,7 @@
"Entry"
{
"MsmKey" = "8:_51C4508525FA0604A9CD727897EBD530"
- "OwnerKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -471,6 +537,12 @@
}
"Entry"
{
+ "MsmKey" = "8:_51C4508525FA0604A9CD727897EBD530"
+ "OwnerKey" = "8:_8D3497DF2885B15B643A20537C75D67E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_55B682D249F24BD9069F5CC33AAB44F0"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
@@ -502,6 +574,12 @@
"Entry"
{
"MsmKey" = "8:_5A8B326A4A0607AFC366F8FD9657A87A"
+ "OwnerKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_5A8B326A4A0607AFC366F8FD9657A87A"
"OwnerKey" = "8:_FAAD9E9C9BB571F4E45C5C7C5DFD626A"
"MsmSig" = "8:_UNDEFINED"
}
@@ -526,6 +604,12 @@
"Entry"
{
"MsmKey" = "8:_5A8B326A4A0607AFC366F8FD9657A87A"
+ "OwnerKey" = "8:_882DC187F2FE507EF9AF44F399908E5F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_5A8B326A4A0607AFC366F8FD9657A87A"
"OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
"MsmSig" = "8:_UNDEFINED"
}
@@ -544,6 +628,12 @@
"Entry"
{
"MsmKey" = "8:_5A8B326A4A0607AFC366F8FD9657A87A"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_5A8B326A4A0607AFC366F8FD9657A87A"
"OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
"MsmSig" = "8:_UNDEFINED"
}
@@ -568,19 +658,19 @@
"Entry"
{
"MsmKey" = "8:_5D31D40A55F64C363A1DE193E24D604B"
- "OwnerKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
+ "OwnerKey" = "8:_69CC8DD07F81DD7EA883434F53157FBC"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5D31D40A55F64C363A1DE193E24D604B"
- "OwnerKey" = "8:_69CC8DD07F81DD7EA883434F53157FBC"
+ "OwnerKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5D31D40A55F64C363A1DE193E24D604B"
- "OwnerKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
+ "OwnerKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -658,12 +748,24 @@
"Entry"
{
"MsmKey" = "8:_67EAE4B6E14417FC2BF4F4EBF4473A1E"
+ "OwnerKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_67EAE4B6E14417FC2BF4F4EBF4473A1E"
"OwnerKey" = "8:_197CAF3FE1DF1DC0514D774674A3F0FF"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_67EAE4B6E14417FC2BF4F4EBF4473A1E"
+ "OwnerKey" = "8:_882DC187F2FE507EF9AF44F399908E5F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_67EAE4B6E14417FC2BF4F4EBF4473A1E"
"OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
"MsmSig" = "8:_UNDEFINED"
}
@@ -694,7 +796,13 @@
"Entry"
{
"MsmKey" = "8:_69F60BE42927314554CD235D3185D2CE"
- "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_69F60BE42927314554CD235D3185D2CE"
+ "OwnerKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -724,6 +832,12 @@
"Entry"
{
"MsmKey" = "8:_69F60BE42927314554CD235D3185D2CE"
+ "OwnerKey" = "8:_882DC187F2FE507EF9AF44F399908E5F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_69F60BE42927314554CD235D3185D2CE"
"OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
"MsmSig" = "8:_UNDEFINED"
}
@@ -741,12 +855,24 @@
}
"Entry"
{
+ "MsmKey" = "8:_69F60BE42927314554CD235D3185D2CE"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_6D9156D5DBF08959BE20FE18FA09E71A"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
+ "MsmKey" = "8:_705F2A9700A0B6F6A5308537C5F876EA"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_709D007D7E89A10E63C141E3A08311FD"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
@@ -778,7 +904,7 @@
"Entry"
{
"MsmKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
- "OwnerKey" = "8:_608148D4375F3E888DDCA94C5D3D141D"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -790,6 +916,12 @@
"Entry"
{
"MsmKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
+ "OwnerKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
"OwnerKey" = "8:_FAAD9E9C9BB571F4E45C5C7C5DFD626A"
"MsmSig" = "8:_UNDEFINED"
}
@@ -814,6 +946,12 @@
"Entry"
{
"MsmKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
+ "OwnerKey" = "8:_882DC187F2FE507EF9AF44F399908E5F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
"OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
"MsmSig" = "8:_UNDEFINED"
}
@@ -825,6 +963,12 @@
}
"Entry"
{
+ "MsmKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
+ "OwnerKey" = "8:_608148D4375F3E888DDCA94C5D3D141D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_73674B32069839371DC47411D1B7EBE0"
"OwnerKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
"MsmSig" = "8:_UNDEFINED"
@@ -862,49 +1006,67 @@
"Entry"
{
"MsmKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
- "OwnerKey" = "8:_197CAF3FE1DF1DC0514D774674A3F0FF"
+ "OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
- "OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
+ "OwnerKey" = "8:_608148D4375F3E888DDCA94C5D3D141D"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
- "OwnerKey" = "8:_61BCA14057E1BA0AB03D4576CBA56A88"
+ "OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
- "OwnerKey" = "8:_608148D4375F3E888DDCA94C5D3D141D"
+ "MsmKey" = "8:_7A0D754929705CC64EF84E26BD75D642"
+ "OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
- "OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
+ "MsmKey" = "8:_7A0D754929705CC64EF84E26BD75D642"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7A0D754929705CC64EF84E26BD75D642"
- "OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
+ "OwnerKey" = "8:_FAAD9E9C9BB571F4E45C5C7C5DFD626A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_7A0D754929705CC64EF84E26BD75D642"
+ "MsmKey" = "8:_7D0EE03E89D3891AF49E51B7A20399FD"
+ "OwnerKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_7D0EE03E89D3891AF49E51B7A20399FD"
+ "OwnerKey" = "8:_306834653E086F12A2AAEA2DB03BEFCF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_7D0EE03E89D3891AF49E51B7A20399FD"
+ "OwnerKey" = "8:_DF75A431ACC8C9748E6FA8D8B926D6D8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_7D0EE03E89D3891AF49E51B7A20399FD"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_7A0D754929705CC64EF84E26BD75D642"
- "OwnerKey" = "8:_FAAD9E9C9BB571F4E45C5C7C5DFD626A"
+ "MsmKey" = "8:_7D0EE03E89D3891AF49E51B7A20399FD"
+ "OwnerKey" = "8:_BA97AA5828837180D47BBD44C338D695"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -939,6 +1101,18 @@
}
"Entry"
{
+ "MsmKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_882DC187F2FE507EF9AF44F399908E5F"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_89624A3865EAD179277FE5905CBE627D"
"OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
"MsmSig" = "8:_UNDEFINED"
@@ -1060,7 +1234,7 @@
"Entry"
{
"MsmKey" = "8:_9758638AABE50C72FFA87E6544F6D70F"
- "OwnerKey" = "8:_38A402C026B59AE31D2CBB0235AF3368"
+ "OwnerKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1119,6 +1293,12 @@
}
"Entry"
{
+ "MsmKey" = "8:_9758638AABE50C72FFA87E6544F6D70F"
+ "OwnerKey" = "8:_38A402C026B59AE31D2CBB0235AF3368"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_983D79DC449AD65746DD38E6468BD886"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
@@ -1204,13 +1384,25 @@
"Entry"
{
"MsmKey" = "8:_AF79FC974C2F42D24D74E5313E475E87"
- "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
+ "OwnerKey" = "8:_89624A3865EAD179277FE5905CBE627D"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_AF79FC974C2F42D24D74E5313E475E87"
- "OwnerKey" = "8:_89624A3865EAD179277FE5905CBE627D"
+ "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AFB29AE66E7A8C8B6FD1B50745BEBCFA"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AFB29AE66E7A8C8B6FD1B50745BEBCFA"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1251,6 +1443,18 @@
}
"Entry"
{
+ "MsmKey" = "8:_BEF81681FFB4A3D9146381DB58646485"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_BEF81681FFB4A3D9146381DB58646485"
+ "OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_BF01A029E83A968C697506DFA469C90B"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
@@ -1264,7 +1468,7 @@
"Entry"
{
"MsmKey" = "8:_BF01A029E83A968C697506DFA469C90B"
- "OwnerKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
+ "OwnerKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1281,50 +1485,44 @@
}
"Entry"
{
- "MsmKey" = "8:_CBF3A46BFE914D8E4658EABB5A204074"
+ "MsmKey" = "8:_CC07BBC3C44CE424AA0EF90844590E4E"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_CBF3A46BFE914D8E4658EABB5A204074"
- "OwnerKey" = "8:_306834653E086F12A2AAEA2DB03BEFCF"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_CBF3A46BFE914D8E4658EABB5A204074"
- "OwnerKey" = "8:_DF75A431ACC8C9748E6FA8D8B926D6D8"
+ "MsmKey" = "8:_CC07BBC3C44CE424AA0EF90844590E4E"
+ "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_CBF3A46BFE914D8E4658EABB5A204074"
- "OwnerKey" = "8:_BA97AA5828837180D47BBD44C338D695"
+ "MsmKey" = "8:_CC7BD04781686DE3403908303698199D"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_CC07BBC3C44CE424AA0EF90844590E4E"
+ "MsmKey" = "8:_CCD49B330E05F963B5AE73E3D04F5762"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_CC07BBC3C44CE424AA0EF90844590E4E"
- "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
+ "MsmKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_CC7BD04781686DE3403908303698199D"
+ "MsmKey" = "8:_D03482576128D28FB1FC54FC473F59E3"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_CCD49B330E05F963B5AE73E3D04F5762"
- "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmKey" = "8:_D03482576128D28FB1FC54FC473F59E3"
+ "OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1360,6 +1558,12 @@
"Entry"
{
"MsmKey" = "8:_D50E7D146D0988E066CF588364E8E12F"
+ "OwnerKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D50E7D146D0988E066CF588364E8E12F"
"OwnerKey" = "8:_FAAD9E9C9BB571F4E45C5C7C5DFD626A"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1384,6 +1588,12 @@
"Entry"
{
"MsmKey" = "8:_D50E7D146D0988E066CF588364E8E12F"
+ "OwnerKey" = "8:_882DC187F2FE507EF9AF44F399908E5F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D50E7D146D0988E066CF588364E8E12F"
"OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1396,13 +1606,19 @@
"Entry"
{
"MsmKey" = "8:_D50E7D146D0988E066CF588364E8E12F"
+ "OwnerKey" = "8:_608148D4375F3E888DDCA94C5D3D141D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D50E7D146D0988E066CF588364E8E12F"
"OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_D50E7D146D0988E066CF588364E8E12F"
- "OwnerKey" = "8:_608148D4375F3E888DDCA94C5D3D141D"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1413,6 +1629,12 @@
}
"Entry"
{
+ "MsmKey" = "8:_D947550594E2BF53BED76C7D7F9747D7"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_D9C852C126C7F540922D946114717E3C"
"OwnerKey" = "8:_25CA87997CBA1F923E61CE5BB20D3891"
"MsmSig" = "8:_UNDEFINED"
@@ -1432,6 +1654,12 @@
"Entry"
{
"MsmKey" = "8:_DB4941BAFA45E5921E7072990000621E"
+ "OwnerKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DB4941BAFA45E5921E7072990000621E"
"OwnerKey" = "8:_BA97AA5828837180D47BBD44C338D695"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1479,6 +1707,12 @@
}
"Entry"
{
+ "MsmKey" = "8:_DB4941BAFA45E5921E7072990000621E"
+ "OwnerKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_DC627D829804D2AC4A3984133840F2D5"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
@@ -1510,7 +1744,7 @@
"Entry"
{
"MsmKey" = "8:_DF6FFF88157E7FBCFB7E188431AAF4CF"
- "OwnerKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
+ "OwnerKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1558,6 +1792,12 @@
"Entry"
{
"MsmKey" = "8:_DF6FFF88157E7FBCFB7E188431AAF4CF"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DF6FFF88157E7FBCFB7E188431AAF4CF"
"OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1569,6 +1809,18 @@
}
"Entry"
{
+ "MsmKey" = "8:_DF6FFF88157E7FBCFB7E188431AAF4CF"
+ "OwnerKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DF6FFF88157E7FBCFB7E188431AAF4CF"
+ "OwnerKey" = "8:_BEF81681FFB4A3D9146381DB58646485"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_DF75A431ACC8C9748E6FA8D8B926D6D8"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
@@ -1582,13 +1834,13 @@
"Entry"
{
"MsmKey" = "8:_E0FCEE9366306B5A88DC7CF29E913A4B"
- "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
+ "OwnerKey" = "8:_89624A3865EAD179277FE5905CBE627D"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E0FCEE9366306B5A88DC7CF29E913A4B"
- "OwnerKey" = "8:_89624A3865EAD179277FE5905CBE627D"
+ "OwnerKey" = "8:_732A3EC12F10FF1A5DA8EE301EB14539"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1647,6 +1899,12 @@
}
"Entry"
{
+ "MsmKey" = "8:_EF2898B0C9AAB2E33674325B9F86943B"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_F07A99EB8EC845750208F557C91D5A84"
"OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
"MsmSig" = "8:_UNDEFINED"
@@ -1737,6 +1995,84 @@
}
"Entry"
{
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_FAAD9E9C9BB571F4E45C5C7C5DFD626A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_B7F1A99B13057B9195F587E580BA16AE"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_25CA87997CBA1F923E61CE5BB20D3891"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_197CAF3FE1DF1DC0514D774674A3F0FF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_882DC187F2FE507EF9AF44F399908E5F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_61BCA14057E1BA0AB03D4576CBA56A88"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_608148D4375F3E888DDCA94C5D3D141D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
+ "OwnerKey" = "8:_75D29198D3E03B5554EF1C7382CF5B14"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_136196DD2763419D959721C2BA143498"
"MsmSig" = "8:_UNDEFINED"
@@ -1744,19 +2080,19 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_306834653E086F12A2AAEA2DB03BEFCF"
+ "OwnerKey" = "8:_90D408142B1F2A9F72CBF42FC38348F0"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_DF75A431ACC8C9748E6FA8D8B926D6D8"
+ "OwnerKey" = "8:_306834653E086F12A2AAEA2DB03BEFCF"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_90D408142B1F2A9F72CBF42FC38348F0"
+ "OwnerKey" = "8:_DF75A431ACC8C9748E6FA8D8B926D6D8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1786,12 +2122,24 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_705F2A9700A0B6F6A5308537C5F876EA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_847DE93907D7F6B17C0694F74120086B"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_EF2898B0C9AAB2E33674325B9F86943B"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_709D007D7E89A10E63C141E3A08311FD"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1804,6 +2152,18 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_87C6E2B736587D3682C48BA78EC097DD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_164D74DB92C311B5B1C4DE16DFFBF6B1"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_FAAD9E9C9BB571F4E45C5C7C5DFD626A"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1852,6 +2212,12 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_882DC187F2FE507EF9AF44F399908E5F"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_E700A1A13A5B6DB314933FC1205AFDAB"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1870,6 +2236,18 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_3C71904C35BED6686835B5A1C74768BE"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_69F60BE42927314554CD235D3185D2CE"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1882,12 +2260,30 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_1AC47588060EAA9F2B7A13EC07359D10"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C6BFB4DAD78C1798616508141EF1234E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_1910D5B276479C48B4F7762A638405F5"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_2444D22B50272EAE03F2B5D2457335EC"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_637E851F9FB315C0C0E9FD781D57341F"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1900,6 +2296,18 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_AF79FC974C2F42D24D74E5313E475E87"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_E0FCEE9366306B5A88DC7CF29E913A4B"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_EB38C1BD04FDFE44579B9868D6D1E139"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1948,7 +2356,7 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_DF6FFF88157E7FBCFB7E188431AAF4CF"
+ "OwnerKey" = "8:_BEF81681FFB4A3D9146381DB58646485"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1978,109 +2386,97 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_9758638AABE50C72FFA87E6544F6D70F"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_69CC8DD07F81DD7EA883434F53157FBC"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_8D3497DF2885B15B643A20537C75D67E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_51C4508525FA0604A9CD727897EBD530"
+ "OwnerKey" = "8:_D03482576128D28FB1FC54FC473F59E3"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
+ "OwnerKey" = "8:_AFB29AE66E7A8C8B6FD1B50745BEBCFA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_A1336C0121F3132E09400329ACD12B30"
+ "OwnerKey" = "8:_FC7C3735446215F02CF0C477948EAAFC"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_42250239B4791E8133657256CCE3506C"
+ "OwnerKey" = "8:_7D0EE03E89D3891AF49E51B7A20399FD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_D50E7D146D0988E066CF588364E8E12F"
+ "OwnerKey" = "8:_51C4508525FA0604A9CD727897EBD530"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_DB4941BAFA45E5921E7072990000621E"
+ "OwnerKey" = "8:_9758638AABE50C72FFA87E6544F6D70F"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_F3FFF4D4A0414ACC9A1C44596F7A5728"
+ "OwnerKey" = "8:_69CC8DD07F81DD7EA883434F53157FBC"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_CBF3A46BFE914D8E4658EABB5A204074"
+ "OwnerKey" = "8:_DF6FFF88157E7FBCFB7E188431AAF4CF"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_5D31D40A55F64C363A1DE193E24D604B"
+ "OwnerKey" = "8:_0D2EC478B8B5A060121B647E6BA3DE05"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_2444D22B50272EAE03F2B5D2457335EC"
+ "OwnerKey" = "8:_A1336C0121F3132E09400329ACD12B30"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_1AC47588060EAA9F2B7A13EC07359D10"
+ "OwnerKey" = "8:_42250239B4791E8133657256CCE3506C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_1910D5B276479C48B4F7762A638405F5"
+ "OwnerKey" = "8:_D50E7D146D0988E066CF588364E8E12F"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_3C71904C35BED6686835B5A1C74768BE"
+ "OwnerKey" = "8:_DB4941BAFA45E5921E7072990000621E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_AF79FC974C2F42D24D74E5313E475E87"
+ "OwnerKey" = "8:_F3FFF4D4A0414ACC9A1C44596F7A5728"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_E0FCEE9366306B5A88DC7CF29E913A4B"
+ "OwnerKey" = "8:_5D31D40A55F64C363A1DE193E24D604B"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -2110,6 +2506,12 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_D947550594E2BF53BED76C7D7F9747D7"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_B8EE1FC78F28FD0B62389E8796D603FB"
"MsmSig" = "8:_UNDEFINED"
}
@@ -2465,7 +2867,7 @@
"DisplayName" = "8:Release"
"IsDebugOnly" = "11:FALSE"
"IsReleaseOnly" = "11:TRUE"
- "OutputFilename" = "8:Release\\Tango.MachineStudio.Installer.msi"
+ "OutputFilename" = "8:..\\..\\Build\\Release\\Installers\\Machine Studio Installer v1.0.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
@@ -2530,7 +2932,7 @@
"_018A2A1E8555CACB14EEBBCFE003E82A"
{
"Name" = "8:System.Collections.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Collections.dll"
@@ -2539,7 +2941,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -2547,7 +2949,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -2592,7 +2994,7 @@
"_04D23F89470123BB32E04152B3DA36A5"
{
"Name" = "8:System.Linq.Expressions.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Linq.Expressions.dll"
@@ -2601,7 +3003,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -2609,7 +3011,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -2623,7 +3025,7 @@
"_08C7D6D7EF105161BD48E61BBEBBF002"
{
"Name" = "8:System.Reflection.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Reflection.dll"
@@ -2632,7 +3034,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -2640,7 +3042,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -2768,6 +3170,37 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_164D74DB92C311B5B1C4DE16DFFBF6B1"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Tango.MachineStudio.Updater, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_164D74DB92C311B5B1C4DE16DFFBF6B1"
+ {
+ "Name" = "8:Tango.MachineStudio.Updater.exe"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Tango.MachineStudio.Updater.exe"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_173C4B05CE04BA34E920DC64B25A8670"
{
"AssemblyRegister" = "3:1"
@@ -2809,7 +3242,7 @@
"_1910D5B276479C48B4F7762A638405F5"
{
"Name" = "8:System.Runtime.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Runtime.dll"
@@ -2818,7 +3251,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -2826,7 +3259,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -2871,7 +3304,7 @@
"_1AC47588060EAA9F2B7A13EC07359D10"
{
"Name" = "8:System.Threading.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Threading.dll"
@@ -2880,7 +3313,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -2888,7 +3321,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -2933,7 +3366,7 @@
"_2444D22B50272EAE03F2B5D2457335EC"
{
"Name" = "8:System.Reflection.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Reflection.dll"
@@ -2942,7 +3375,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -2950,7 +3383,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -3274,7 +3707,7 @@
"_3C71904C35BED6686835B5A1C74768BE"
{
"Name" = "8:System.Globalization.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Globalization.dll"
@@ -3283,7 +3716,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -3291,7 +3724,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -3790,7 +4223,7 @@
"_637E851F9FB315C0C0E9FD781D57341F"
{
"Name" = "8:System.ObjectModel.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.ObjectModel.dll"
@@ -3799,7 +4232,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -3807,7 +4240,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -3966,6 +4399,37 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_705F2A9700A0B6F6A5308537C5F876EA"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_705F2A9700A0B6F6A5308537C5F876EA"
+ {
+ "Name" = "8:Ionic.Zip.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Ionic.Zip.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_709D007D7E89A10E63C141E3A08311FD"
{
"AssemblyRegister" = "3:1"
@@ -4152,6 +4616,37 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_7D0EE03E89D3891AF49E51B7A20399FD"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.Data.SQLite, Version=1.0.106.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_7D0EE03E89D3891AF49E51B7A20399FD"
+ {
+ "Name" = "8:System.Data.SQLite.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.Data.SQLite.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_7E765F76FDFC3DCF4EAEB59B5546B063"
{
"AssemblyRegister" = "3:1"
@@ -4245,6 +4740,68 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_87C6E2B736587D3682C48BA78EC097DD"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Tango.MachineStudio.UsersAndRoles, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_87C6E2B736587D3682C48BA78EC097DD"
+ {
+ "Name" = "8:Tango.MachineStudio.UsersAndRoles.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Tango.MachineStudio.UsersAndRoles.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_882DC187F2FE507EF9AF44F399908E5F"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Tango.MachineStudio.HardwareDesigner, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_882DC187F2FE507EF9AF44F399908E5F"
+ {
+ "Name" = "8:Tango.MachineStudio.HardwareDesigner.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Tango.MachineStudio.HardwareDesigner.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_89624A3865EAD179277FE5905CBE627D"
{
"AssemblyRegister" = "3:1"
@@ -4596,7 +5153,7 @@
"_A0C8023CFDF8E1966A878020945346CF"
{
"Name" = "8:System.ObjectModel.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.ObjectModel.dll"
@@ -4605,7 +5162,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -4613,7 +5170,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -4844,7 +5401,7 @@
"_AF79FC974C2F42D24D74E5313E475E87"
{
"Name" = "8:System.Diagnostics.Debug.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Diagnostics.Debug.dll"
@@ -4853,7 +5410,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -4861,7 +5418,38 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_AFB29AE66E7A8C8B6FD1B50745BEBCFA"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Tango.BrushPicker, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_AFB29AE66E7A8C8B6FD1B50745BEBCFA"
+ {
+ "Name" = "8:Tango.BrushPicker.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Tango.BrushPicker.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -4989,20 +5577,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BF01A029E83A968C697506DFA469C90B"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BEF81681FFB4A3D9146381DB58646485"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:ColorMine, Version=1.2.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.EmbroideryUI, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_BF01A029E83A968C697506DFA469C90B"
+ "_BEF81681FFB4A3D9146381DB58646485"
{
- "Name" = "8:ColorMine.dll"
+ "Name" = "8:Tango.EmbroideryUI.dll"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:ColorMine.dll"
+ "SourcePath" = "8:Tango.EmbroideryUI.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
@@ -5020,26 +5608,26 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C179B63E2F5A58786B70FADA6C8496A5"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BF01A029E83A968C697506DFA469C90B"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:System.Dynamic.Runtime, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+ "AssemblyAsmDisplayName" = "8:ColorMine, Version=1.2.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_C179B63E2F5A58786B70FADA6C8496A5"
+ "_BF01A029E83A968C697506DFA469C90B"
{
- "Name" = "8:System.Dynamic.Runtime.dll"
- "Attributes" = "3:0"
+ "Name" = "8:ColorMine.dll"
+ "Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Dynamic.Runtime.dll"
+ "SourcePath" = "8:ColorMine.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -5047,24 +5635,24 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C6BFB4DAD78C1798616508141EF1234E"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C179B63E2F5A58786B70FADA6C8496A5"
{
"AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Threading.Tasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.Dynamic.Runtime, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"ScatterAssemblies"
{
- "_C6BFB4DAD78C1798616508141EF1234E"
+ "_C179B63E2F5A58786B70FADA6C8496A5"
{
- "Name" = "8:System.Threading.Tasks.dll"
+ "Name" = "8:System.Dynamic.Runtime.dll"
"Attributes" = "3:0"
}
}
- "SourcePath" = "8:System.Threading.Tasks.dll"
+ "SourcePath" = "8:System.Dynamic.Runtime.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
@@ -5082,20 +5670,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CBF3A46BFE914D8E4658EABB5A204074"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C6BFB4DAD78C1798616508141EF1234E"
{
"AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:System.Data.SQLite, Version=1.0.106.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:System.Threading.Tasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_CBF3A46BFE914D8E4658EABB5A204074"
+ "_C6BFB4DAD78C1798616508141EF1234E"
{
- "Name" = "8:System.Data.SQLite.dll"
+ "Name" = "8:System.Threading.Tasks.dll"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Data.SQLite.dll"
+ "SourcePath" = "8:System.Threading.Tasks.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
@@ -5206,6 +5794,68 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CD3DBAF01E467DD4CC12AA88CE8A65C6"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Tango.MachineStudio.ColorLab, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_CD3DBAF01E467DD4CC12AA88CE8A65C6"
+ {
+ "Name" = "8:Tango.MachineStudio.ColorLab.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Tango.MachineStudio.ColorLab.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D03482576128D28FB1FC54FC473F59E3"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Tango.ColorPicker, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_D03482576128D28FB1FC54FC473F59E3"
+ {
+ "Name" = "8:Tango.ColorPicker.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Tango.ColorPicker.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D1CB239DDD65E78A28094BC854772AFF"
{
"AssemblyRegister" = "3:1"
@@ -5216,7 +5866,7 @@
"_D1CB239DDD65E78A28094BC854772AFF"
{
"Name" = "8:System.Runtime.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Runtime.dll"
@@ -5225,7 +5875,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -5233,7 +5883,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -5361,6 +6011,37 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D947550594E2BF53BED76C7D7F9747D7"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+ "ScatterAssemblies"
+ {
+ "_D947550594E2BF53BED76C7D7F9747D7"
+ {
+ "Name" = "8:System.IO.Compression.FileSystem.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:System.IO.Compression.FileSystem.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D9C852C126C7F540922D946114717E3C"
{
"AssemblyRegister" = "3:1"
@@ -5464,7 +6145,7 @@
"_DCD0D71251FAABFB20D57E60AC3DEFA3"
{
"Name" = "8:System.Globalization.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Globalization.dll"
@@ -5473,7 +6154,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -5481,7 +6162,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -5495,7 +6176,7 @@
"_DD10CB022785FD0CE997E8C7BC1D0FE6"
{
"Name" = "8:System.Threading.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Threading.dll"
@@ -5504,7 +6185,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -5512,7 +6193,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -5681,7 +6362,7 @@
"_E0FCEE9366306B5A88DC7CF29E913A4B"
{
"Name" = "8:System.Collections.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Collections.dll"
@@ -5690,7 +6371,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -5698,7 +6379,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -5774,7 +6455,7 @@
"_EB90C5C498BD80F4675C07A364C45E3D"
{
"Name" = "8:System.Diagnostics.Debug.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Diagnostics.Debug.dll"
@@ -5783,7 +6464,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -5791,7 +6472,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -5805,7 +6486,7 @@
"_EBFEF6DABA658232EC82197A8E01F66E"
{
"Name" = "8:System.Threading.Tasks.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Threading.Tasks.dll"
@@ -5814,7 +6495,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -5822,7 +6503,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -5888,11 +6569,42 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_EF2898B0C9AAB2E33674325B9F86943B"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:FluentFTP, Version=19.1.2.0, Culture=neutral, PublicKeyToken=f4af092b1d8df44f, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_EF2898B0C9AAB2E33674325B9F86943B"
+ {
+ "Name" = "8:FluentFTP.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:FluentFTP.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F07A99EB8EC845750208F557C91D5A84"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Video, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86"
+ "AssemblyAsmDisplayName" = "8:Tango.Video, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_F07A99EB8EC845750208F557C91D5A84"
@@ -6042,7 +6754,7 @@
"_F46F8B020857673C983D66FE2F41B983"
{
"Name" = "8:System.Linq.Expressions.dll"
- "Attributes" = "3:0"
+ "Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Linq.Expressions.dll"
@@ -6051,7 +6763,7 @@
"Folder" = "8:_C15E39669002469F98F297C08D55903C"
"Condition" = "8:"
"Transitive" = "11:FALSE"
- "Vital" = "11:FALSE"
+ "Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
@@ -6059,7 +6771,7 @@
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
- "Exclude" = "11:TRUE"
+ "Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
@@ -6156,6 +6868,37 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FC7C3735446215F02CF0C477948EAAFC"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Tango.BL, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_FC7C3735446215F02CF0C477948EAAFC"
+ {
+ "Name" = "8:Tango.BL.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Tango.BL.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C15E39669002469F98F297C08D55903C"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
}
"FileType"
{
@@ -6235,7 +6978,7 @@
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:Machine Studio"
"ProductCode" = "8:{85D89915-CDF5-4C10-AE24-99842E2FDAD0}"
- "PackageCode" = "8:{D9AA26EE-C3B6-4D51-8553-F458F996AD82}"
+ "PackageCode" = "8:{3619637E-3B7B-430E-9541-D4AAA77C0B46}"
"UpgradeCode" = "8:{EDD5BF5D-A0F0-4016-AE0A-5C008DD66BB6}"
"AspNetVersion" = "8:4.0.30319.0"
"RestartWWWService" = "11:FALSE"
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindow.xaml
index ab7e503ff..abbfa0aa6 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindow.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindow.xaml
@@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Tango.MachineStudio.Publisher"
mc:Ignorable="d"
- Title="Machine Studio Publisher" Height="400" Width="700" WindowStartupLocation="CenterScreen" WindowStyle="ToolWindow" ResizeMode="NoResize" Foreground="#202020" d:DataContext="{d:DesignInstance Type=local:MainWindowVM, IsDesignTimeCreatable=False}">
+ Title="Machine Studio Publisher" Height="432" Width="700" WindowStartupLocation="CenterScreen" WindowStyle="ToolWindow" ResizeMode="NoResize" Foreground="#202020" d:DataContext="{d:DesignInstance Type=local:MainWindowVM, IsDesignTimeCreatable=False}">
<Border BorderThickness="1" BorderBrush="#0288D1">
<Grid>
<Grid.RowDefinitions>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs
index 34d2f1b1f..3b92ac686 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/MainWindowVM.cs
@@ -21,7 +21,7 @@ namespace Tango.MachineStudio.Publisher
{
public class MainWindowVM : ViewModel
{
- private String _appPath = AppDomain.CurrentDomain.BaseDirectory;
+ private String _appPath = AppDomain.CurrentDomain.BaseDirectory + "..\\Release";
private ChannelFactory<IMachineStudioUpdateService> _service;
private IMachineStudioUpdateService _client;
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/Tango.MachineStudio.Publisher.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/Tango.MachineStudio.Publisher.csproj
index 7b59fa319..6f3276996 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/Tango.MachineStudio.Publisher.csproj
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher/Tango.MachineStudio.Publisher.csproj
@@ -43,7 +43,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml
index 63b2b3f6a..6b2bbaaec 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml
@@ -14,7 +14,7 @@
<Grid.Background>
<ImageBrush ImageSource="/Images/White-Abstract.png" Stretch="Fill"></ImageBrush>
</Grid.Background>
- <Viewbox Stretch="Fill" UseLayoutRounding="True" SnapsToDevicePixels="True">
+ <Viewbox Stretch="Fill">
<Grid Width="1920" Height="1145">
<Grid>
<sharedControls:MultiTransitionControl AlwaysFade="True" TransitionType="Zoom" x:Name="TransitionControl" x:FieldModifier="public">
@@ -22,16 +22,16 @@
<ContentControl Tag="LoadingView">
<views:LoadingView></views:LoadingView>
</ContentControl>
- <ContentControl Tag="LoginView">
+ <ContentControl Tag="LoginView" Visibility="Hidden">
<views:LoginView></views:LoginView>
</ContentControl>
- <ContentControl Tag="MainView">
+ <ContentControl Tag="MainView" Visibility="Hidden">
<views:MainView></views:MainView>
</ContentControl>
- <ContentControl Tag="ShutdownView">
+ <ContentControl Tag="ShutdownView" Visibility="Hidden">
<views:ShutdownView></views:ShutdownView>
</ContentControl>
- <ContentControl Tag="UpdateView">
+ <ContentControl Tag="UpdateView" Visibility="Hidden">
<views:UpdateView></views:UpdateView>
</ContentControl>
</sharedControls:MultiTransitionControl.Controls>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs
index 36ee95f10..c4d9b4a28 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs
@@ -10,7 +10,9 @@ using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
+using System.Windows.Interop;
using System.Windows.Media;
+using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
@@ -30,6 +32,8 @@ namespace Tango.MachineStudio.UI
public MainWindow()
{
+ //Timeline.DesiredFrameRateProperty.OverrideMetadata(typeof(Timeline), new FrameworkPropertyMetadata { DefaultValue = 40 });
+
try
{
InitializeComponent();
@@ -42,6 +46,15 @@ namespace Tango.MachineStudio.UI
{
LogManager.Log(ex);
}
+
+ this.Loaded += MainWindow_Loaded;
+ }
+
+ private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+ {
+ //HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
+ //HwndTarget hwndTarget = hwndSource.CompositionTarget;
+ //hwndTarget.RenderMode = RenderMode.SoftwareOnly;
}
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj
index 52bd44239..6fc530627 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj
@@ -30,7 +30,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -371,6 +371,10 @@
<Project>{5d39c1e1-3ecd-4634-bd1b-2bcf71c54a15}</Project>
<Name>Tango.MachineStudio.Technician</Name>
</ProjectReference>
+ <ProjectReference Include="..\Modules\Tango.MachineStudio.UsersAndRoles\Tango.MachineStudio.UsersAndRoles.csproj">
+ <Project>{88028f14-0028-4ded-b119-19b8ee23cf32}</Project>
+ <Name>Tango.MachineStudio.UsersAndRoles</Name>
+ </ProjectReference>
<ProjectReference Include="..\Tango.MachineStudio.Common\Tango.MachineStudio.Common.csproj">
<Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project>
<Name>Tango.MachineStudio.Common</Name>
@@ -407,7 +411,7 @@
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
- <PostBuildEvent>$(TargetDir)linkgen.exe -s "$(TargetPath)" -d "$(TargetDir)Utilities\Machine Studio.lnk"
+ <PostBuildEvent>if $(ConfigurationName) == Debug $(TargetDir)linkgen.exe -s "$(TargetPath)" -d "$(TargetDir)Utilities\Machine Studio.lnk"
RD /S /Q "$(TargetDir)cs\"
RD /S /Q "$(TargetDir)da\"
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
index 7d83fa032..9ee8471ec 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
@@ -28,6 +28,14 @@ namespace Tango.MachineStudio.UI.ViewModels
private LogManager logManager = LogManager.Default;
public IStudioApplicationManager ApplicationManager { get; set; }
+ private bool _isLoading;
+
+ public bool IsLoading
+ {
+ get { return _isLoading; }
+ set { _isLoading = value; RaisePropertyChangedAuto(); }
+ }
+
/// <summary>
/// Initializes a new instance of the <see cref="LoadingViewVM"/> class.
/// </summary>
@@ -48,6 +56,8 @@ namespace Tango.MachineStudio.UI.ViewModels
/// </summary>
private void Load()
{
+ IsLoading = true;
+
ThreadsHelper.StartStaThread(() =>
{
try
@@ -57,6 +67,7 @@ namespace Tango.MachineStudio.UI.ViewModels
{
_studioModuleLoader.LoadModules();
_navigationManager.NavigateTo(NavigationView.LoginView);
+ IsLoading = false;
});
}
catch (Exception ex)
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs
index 23be8d274..4fcebe3dd 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs
@@ -49,7 +49,6 @@ namespace Tango.MachineStudio.UI.ViewModels
{
Scanner = scanner;
ConnectCommand = new RelayCommand(Connect,(x) => SelectedMachine != null);
- Scanner.Start();
}
/// <summary>
@@ -59,10 +58,17 @@ namespace Tango.MachineStudio.UI.ViewModels
{
if (SelectedMachine != null)
{
+ Scanner.Stop();
Accept();
}
}
+ protected override void Cancel()
+ {
+ Scanner.Stop();
+ base.Cancel();
+ }
+
/// <summary>
/// Called when the dialog has been shown.
/// </summary>
@@ -70,6 +76,7 @@ namespace Tango.MachineStudio.UI.ViewModels
{
base.OnShow();
Scanner.AvailableMachines.Clear();
+ Scanner.Start();
}
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ShutdownViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ShutdownViewVM.cs
index ed771f00a..92e0eb9b5 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ShutdownViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ShutdownViewVM.cs
@@ -3,13 +3,15 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Tango.SharedUI;
namespace Tango.MachineStudio.UI.ViewModels
{
/// <summary>
/// Represents the Machine Studio shutdown view, view model.
/// </summary>
- public class ShutdownViewVM
+ public class ShutdownViewVM : ViewModel
{
+
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml
index 5f65100df..91fc11a22 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml
@@ -15,7 +15,7 @@
<TextBlock FontSize="70" Foreground="{StaticResource AccentColorBrush}">Machine Studio</TextBlock>
</StackPanel>
<TextBlock HorizontalAlignment="Right" FontSize="18" Margin="0 0 -50 0" Foreground="{StaticResource AccentColorBrush}">Twine Solutions</TextBlock>
- <mahapps:ProgressRing Margin="20 60 20 40" Width="80" Height="80"></mahapps:ProgressRing>
+ <mahapps:ProgressRing Margin="20 60 20 40" Width="80" Height="80" IsActive="{Binding IsLoading}"></mahapps:ProgressRing>
<TextBlock HorizontalAlignment="Center" FontSize="18" FontStyle="Italic">Loading, please wait...</TextBlock>
</StackPanel>
</Grid>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
index a4256436c..8e6fa36f5 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml
@@ -48,16 +48,19 @@
<StackPanel Margin="5 0 0 0" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
<Image Source="/Images/account.png" RenderOptions.BitmapScalingMode="Fant" VerticalAlignment="Center" Width="50" Height="50"></Image>
<StackPanel Margin="0 5 0 0">
- <TextBlock FontSize="16" TextTrimming="CharacterEllipsis" MaxWidth="170" FontStyle="Italic" FontWeight="Bold" Margin="10 0 0 0" VerticalAlignment="Center" Text="{Binding AuthenticationProvider.CurrentUser.Contact.FullName}"></TextBlock>
+ <TextBlock FontSize="16" TextTrimming="CharacterEllipsis" MaxWidth="170" FontStyle="Italic" FontWeight="Bold" Margin="10 0 0 0" VerticalAlignment="Center" Text="{Binding AuthenticationProvider.CurrentUser.Contact.FullName}"></TextBlock>
<TextBlock FontSize="12" TextTrimming="CharacterEllipsis" MaxWidth="170" FontStyle="Italic" Margin="10 5 0 0" VerticalAlignment="Center">
<Run Text="{Binding AuthenticationProvider.CurrentUser.Organization.Name}"></Run>
,
- <Run Text="{Binding AuthenticationProvider.CurrentUser.Roles[0]}">
+ <Run Text="{Binding AuthenticationProvider.CurrentUser.Roles[0].Name}">
<Run.ToolTip>
<ItemsControl ItemsSource="{Binding AuthenticationProvider.CurrentUser.Roles}">
<ItemsControl.ItemTemplate>
<DataTemplate>
- <TextBlock Text="{Binding Name}"></TextBlock>
+ <StackPanel Orientation="Horizontal" Margin="2">
+ <materialDesign:PackIcon Kind="AccountKey" Width="16" Height="16" />
+ <TextBlock Margin="5 0 0 0" Text="{Binding Name}"></TextBlock>
+ </StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs
index c40904173..e0ae60b87 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml.cs
@@ -76,6 +76,7 @@ namespace Tango.MachineStudio.UI.Views
{
Tag = module.Name,
Content = grid,
+ Visibility = Visibility.Hidden,
});
_loader.UserModules.Add(module);
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml
index dd86238ce..cc1060b2a 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml
@@ -15,7 +15,7 @@
<TextBlock FontSize="70" Foreground="Gray">Machine Studio</TextBlock>
</StackPanel>
<TextBlock HorizontalAlignment="Right" FontSize="18" Margin="0 0 -50 0" Foreground="Gray">Twine Solutions</TextBlock>
- <mahapps:ProgressRing Margin="20 60 20 40" Width="80" Height="80" Foreground="Gray"></mahapps:ProgressRing>
+ <mahapps:ProgressRing x:Name="progressRing" IsActive="False" Margin="20 60 20 40" Width="80" Height="80" Foreground="Gray"></mahapps:ProgressRing>
<TextBlock HorizontalAlignment="Center" FontSize="18" FontStyle="Italic" Foreground="Gray">Shutting Down, please wait...</TextBlock>
</StackPanel>
</Grid>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml.cs
index e1d49aec0..afe6d3800 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml.cs
@@ -12,17 +12,23 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
+using static Tango.SharedUI.Controls.MultiTransitionControl;
namespace Tango.MachineStudio.UI.Views
{
/// <summary>
/// Interaction logic for ShutdownView.xaml
/// </summary>
- public partial class ShutdownView : UserControl
+ public partial class ShutdownView : UserControl, ITransitionView
{
public ShutdownView()
{
InitializeComponent();
}
+
+ public void OnTransitionCompleted()
+ {
+ progressRing.IsActive = true;
+ }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml
index dabbaab94..e34cdb83b 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/UpdateView.xaml
@@ -16,9 +16,9 @@
<Grid MaxWidth="1200" MaxHeight="700">
<DockPanel>
<Grid DockPanel.Dock="Top" HorizontalAlignment="Center">
- <Grid.Effect>
+ <!--<Grid.Effect>
<DropShadowEffect BlurRadius="200" ShadowDepth="0" Opacity="0.5" />
- </Grid.Effect>
+ </Grid.Effect>-->
<StackPanel Orientation="Horizontal">
<Image Source="/Images/update.png" Width="100" />
<TextBlock Margin="10 0 0 0" VerticalAlignment="Center" FontSize="70">Update Center</TextBlock>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Tango.MachineStudio.UpdateService.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Tango.MachineStudio.UpdateService.csproj
index f572056ba..08d40b49a 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Tango.MachineStudio.UpdateService.csproj
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UpdateService/Tango.MachineStudio.UpdateService.csproj
@@ -81,10 +81,7 @@
</ItemGroup>
<ItemGroup>
<Content Include="packages.config" />
- <None Include="Properties\PublishProfiles\CustomProfile.pubxml" />
- <None Include="Properties\PublishProfiles\CustomProfile1.pubxml" />
- <None Include="Properties\PublishProfiles\CustomProfile2.pubxml" />
- <None Include="Properties\PublishProfiles\FolderProfile.pubxml" />
+ <None Include="Properties\PublishProfiles\Twine Local Via FTP.pubxml" />
<None Include="Web.Debug.config">
<DependentUpon>Web.config</DependentUpon>
</None>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Updater/Tango.MachineStudio.Updater.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Updater/Tango.MachineStudio.Updater.csproj
index c77222c03..37a6dbf63 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Updater/Tango.MachineStudio.Updater.csproj
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Updater/Tango.MachineStudio.Updater.csproj
@@ -28,7 +28,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Native/Tango.ColorLib/Tango.ColorLib.vcxproj b/Software/Visual_Studio/Native/Tango.ColorLib/Tango.ColorLib.vcxproj
index 071c0a4bc..a05e31bf6 100644
--- a/Software/Visual_Studio/Native/Tango.ColorLib/Tango.ColorLib.vcxproj
+++ b/Software/Visual_Studio/Native/Tango.ColorLib/Tango.ColorLib.vcxproj
@@ -73,13 +73,14 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)Build\Debug</OutDir>
- <IncludePath>$(ProjectDir);$(IncludePath)</IncludePath>
+ <IncludePath>$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
+ <OutDir>$(SolutionDir)Build\Release</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
@@ -92,6 +93,7 @@
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;TANGOCOLORLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -121,6 +123,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;TANGOCOLORLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
diff --git a/Software/Visual_Studio/Native/Tango.ProtoTest/Tango.ProtoTest.vcxproj b/Software/Visual_Studio/Native/Tango.ProtoTest/Tango.ProtoTest.vcxproj
index e657d78b8..c79c4de99 100644
--- a/Software/Visual_Studio/Native/Tango.ProtoTest/Tango.ProtoTest.vcxproj
+++ b/Software/Visual_Studio/Native/Tango.ProtoTest/Tango.ProtoTest.vcxproj
@@ -32,10 +32,10 @@
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
+ <WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
@@ -72,7 +72,10 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<TargetExt>.dll</TargetExt>
<OutDir>$(SolutionDir)Build\Debug</OutDir>
- <IncludePath>..\..\..\External_Repositories\Protobuf\protobuf-3.4.1\src;$(IncludePath)</IncludePath>
+ <IncludePath>$(IncludePath)</IncludePath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>$(SolutionDir)Build\Release</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@@ -80,6 +83,7 @@
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <AdditionalIncludeDirectories>..\..\..\External_Repositories\Protobuf\protobuf-3.4.1\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<PreBuildEvent>
<Command>"$(TargetDir)proto-tc.exe" -i "$(SolutionDir)..\PMR\Messages" -o "$(SolutionDir)Native\Tango.ProtoTest\PMR" -l CPP</Command>
@@ -95,10 +99,12 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
+ <Optimization>Disabled</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
+ <IntrinsicFunctions>false</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>..\..\..\External_Repositories\Protobuf\protobuf-3.4.1\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
diff --git a/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.xaml b/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.xaml
index 484d43fda..5f5f1887d 100644
--- a/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.xaml
+++ b/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.xaml
@@ -38,11 +38,21 @@
<Style TargetType="{x:Type cc:CompletionList}">
<Style.Resources>
- <!--<ResourceDictionary Source="/Theme.xaml"></ResourceDictionary>-->
+ <Style TargetType="ListBoxItem">
+ <Setter Property="Background" Value="#202020"></Setter>
+ <Setter Property="Foreground" Value="Gainsboro"></Setter>
+ <Setter Property="Padding" Value="2"></Setter>
+ <Setter Property="BorderThickness" Value="0"></Setter>
+ <Style.Triggers>
+ <Trigger Property="IsSelected" Value="True">
+ <Setter Property="Foreground" Value="#202020"></Setter>
+ </Trigger>
+ </Style.Triggers>
+ </Style>
</Style.Resources>
<Setter Property="Background" Value="#202020"></Setter>
<Setter Property="BorderThickness" Value="0"></Setter>
- <Setter Property="Template">
+ <Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type cc:CompletionList}">
<cc:CompletionListBox x:Name="PART_ListBox">
diff --git a/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs b/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs
index 9953b7a38..c5ee45f5f 100644
--- a/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs
+++ b/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs
@@ -45,7 +45,7 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
// prevent user from resizing window to 0x0
this.MinHeight = 15;
this.MinWidth = 30;
- this.Background = new SolidColorBrush(Color.FromRgb(15, 15, 15));
+ //this.Background = new SolidColorBrush(Color.FromRgb(15, 15, 15));
this.Foreground = Brushes.Gainsboro;
toolTip.PlacementTarget = this;
diff --git a/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj b/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj
index abf0d23a2..a9fcdcbcf 100644
--- a/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj
+++ b/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj
@@ -59,7 +59,7 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<Prefer32Bit>false</Prefer32Bit>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Release\</OutputPath>
<DocumentationFile />
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
diff --git a/Software/Visual_Studio/SideChains/Tango.AutoComplete/Editors/Themes/Generic.xaml b/Software/Visual_Studio/SideChains/Tango.AutoComplete/Editors/Themes/Generic.xaml
index a3c124841..25667d1d1 100644
--- a/Software/Visual_Studio/SideChains/Tango.AutoComplete/Editors/Themes/Generic.xaml
+++ b/Software/Visual_Studio/SideChains/Tango.AutoComplete/Editors/Themes/Generic.xaml
@@ -93,7 +93,8 @@
</DockPanel>
<Popup x:Name="PART_Popup"
IsOpen="{Binding Path=IsDropDownOpen, RelativeSource={RelativeSource Mode=TemplatedParent},Mode=TwoWay}"
- Width="{TemplateBinding ActualWidth}"
+ MinWidth="{TemplateBinding ActualWidth}"
+ MaxWidth="800"
HorizontalOffset="0"
MinHeight="25"
MaxHeight="600"
diff --git a/Software/Visual_Studio/Tango.BL/Entities/MediaColor.cs b/Software/Visual_Studio/Tango.BL/Entities/MediaColor.cs
index 06ae68a86..dda8125e0 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/MediaColor.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/MediaColor.cs
@@ -14,22 +14,82 @@ namespace Tango.BL.Entities
public partial class MediaColor : ObservableEntity<MediaColor>
{
- protected Int32 _color;
+ protected String _name;
/// <summary>
- /// Gets or sets the mediacolor color.
+ /// Gets or sets the mediacolor name.
/// </summary>
- [Column("COLOR")]
+ [Column("NAME")]
- public Int32 Color
+ public String Name
{
get
{
- return _color;
+ return _name;
}
set
{
- _color = value; RaisePropertyChanged(nameof(Color));
+ _name = value; RaisePropertyChanged(nameof(Name));
+ }
+
+ }
+
+ protected Double _l;
+ /// <summary>
+ /// Gets or sets the mediacolor l.
+ /// </summary>
+ [Column("L")]
+
+ public Double L
+ {
+ get
+ {
+ return _l;
+ }
+
+ set
+ {
+ _l = value; RaisePropertyChanged(nameof(L));
+ }
+
+ }
+
+ protected Double _a;
+ /// <summary>
+ /// Gets or sets the mediacolor a.
+ /// </summary>
+ [Column("A")]
+
+ public Double A
+ {
+ get
+ {
+ return _a;
+ }
+
+ set
+ {
+ _a = value; RaisePropertyChanged(nameof(A));
+ }
+
+ }
+
+ protected Double _b;
+ /// <summary>
+ /// Gets or sets the mediacolor b.
+ /// </summary>
+ [Column("B")]
+
+ public Double B
+ {
+ get
+ {
+ return _b;
+ }
+
+ set
+ {
+ _b = value; RaisePropertyChanged(nameof(B));
}
}
diff --git a/Software/Visual_Studio/Tango.BL/Entities/TechController.cs b/Software/Visual_Studio/Tango.BL/Entities/TechController.cs
new file mode 100644
index 000000000..5f6b14463
--- /dev/null
+++ b/Software/Visual_Studio/Tango.BL/Entities/TechController.cs
@@ -0,0 +1,144 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Xml.Serialization;
+using Newtonsoft.Json;
+using System.Linq;
+using Tango.DAL.Remote.DB;
+
+namespace Tango.BL.Entities
+{
+ [Table("TECH_CONTROLLERS")]
+ public partial class TechController : ObservableEntity<TechController>
+ {
+
+ protected Int32 _code;
+ /// <summary>
+ /// Gets or sets the techcontroller code.
+ /// </summary>
+ [Column("CODE")]
+
+ public Int32 Code
+ {
+ get
+ {
+ return _code;
+ }
+
+ set
+ {
+ _code = value; RaisePropertyChanged(nameof(Code));
+ }
+
+ }
+
+ protected String _name;
+ /// <summary>
+ /// Gets or sets the techcontroller name.
+ /// </summary>
+ [Column("NAME")]
+
+ public String Name
+ {
+ get
+ {
+ return _name;
+ }
+
+ set
+ {
+ _name = value; RaisePropertyChanged(nameof(Name));
+ }
+
+ }
+
+ protected String _description;
+ /// <summary>
+ /// Gets or sets the techcontroller description.
+ /// </summary>
+ [Column("DESCRIPTION")]
+
+ public String Description
+ {
+ get
+ {
+ return _description;
+ }
+
+ set
+ {
+ _description = value; RaisePropertyChanged(nameof(Description));
+ }
+
+ }
+
+ protected Double _min;
+ /// <summary>
+ /// Gets or sets the techcontroller min.
+ /// </summary>
+ [Column("MIN")]
+
+ public Double Min
+ {
+ get
+ {
+ return _min;
+ }
+
+ set
+ {
+ _min = value; RaisePropertyChanged(nameof(Min));
+ }
+
+ }
+
+ protected Double _max;
+ /// <summary>
+ /// Gets or sets the techcontroller max.
+ /// </summary>
+ [Column("MAX")]
+
+ public Double Max
+ {
+ get
+ {
+ return _max;
+ }
+
+ set
+ {
+ _max = value; RaisePropertyChanged(nameof(Max));
+ }
+
+ }
+
+ protected String _units;
+ /// <summary>
+ /// Gets or sets the techcontroller units.
+ /// </summary>
+ [Column("UNITS")]
+
+ public String Units
+ {
+ get
+ {
+ return _units;
+ }
+
+ set
+ {
+ _units = value; RaisePropertyChanged(nameof(Units));
+ }
+
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TechController" /> class.
+ /// </summary>
+ public TechController() : base()
+ {
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.BL/Entities/TechHeater.cs b/Software/Visual_Studio/Tango.BL/Entities/TechHeater.cs
deleted file mode 100644
index dff290eb1..000000000
--- a/Software/Visual_Studio/Tango.BL/Entities/TechHeater.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Xml.Serialization;
-using Newtonsoft.Json;
-using System.Linq;
-using Tango.DAL.Remote.DB;
-
-namespace Tango.BL.Entities
-{
- [Table("TECH_HEATERS")]
- public partial class TechHeater : ObservableEntity<TechHeater>
- {
-
- protected Int32 _code;
- /// <summary>
- /// Gets or sets the techheater code.
- /// </summary>
- [Column("CODE")]
-
- public Int32 Code
- {
- get
- {
- return _code;
- }
-
- set
- {
- _code = value; RaisePropertyChanged(nameof(Code));
- }
-
- }
-
- protected String _name;
- /// <summary>
- /// Gets or sets the techheater name.
- /// </summary>
- [Column("NAME")]
-
- public String Name
- {
- get
- {
- return _name;
- }
-
- set
- {
- _name = value; RaisePropertyChanged(nameof(Name));
- }
-
- }
-
- protected String _description;
- /// <summary>
- /// Gets or sets the techheater description.
- /// </summary>
- [Column("DESCRIPTION")]
-
- public String Description
- {
- get
- {
- return _description;
- }
-
- set
- {
- _description = value; RaisePropertyChanged(nameof(Description));
- }
-
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="TechHeater" /> class.
- /// </summary>
- public TechHeater() : base()
- {
- }
- }
-}
diff --git a/Software/Visual_Studio/Tango.BL/Entities/User.cs b/Software/Visual_Studio/Tango.BL/Entities/User.cs
index 4d1cc4c54..546ff4a1a 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/User.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/User.cs
@@ -137,6 +137,26 @@ namespace Tango.BL.Entities
}
+ protected Nullable<DateTime> _lastlogin;
+ /// <summary>
+ /// Gets or sets the user last login.
+ /// </summary>
+ [Column("LAST_LOGIN")]
+
+ public Nullable<DateTime> LastLogin
+ {
+ get
+ {
+ return _lastlogin;
+ }
+
+ set
+ {
+ _lastlogin = value; RaisePropertyChanged(nameof(LastLogin));
+ }
+
+ }
+
protected Address _address;
/// <summary>
/// Gets or sets the user address.
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/BrushStop.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/BrushStop.cs
index 8ab24b308..8ab24b308 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/BrushStop.cs
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/BrushStop.cs
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/Cat.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Cat.cs
index 3f95ed149..3f95ed149 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/Cat.cs
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Cat.cs
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/Configuration.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Configuration.cs
index 963ed638d..963ed638d 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/Configuration.cs
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Configuration.cs
diff --git a/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Contact.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Contact.cs
new file mode 100644
index 000000000..26f0329b0
--- /dev/null
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Contact.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SimpleValidator.Extensions;
+
+namespace Tango.BL.Entities
+{
+ public partial class Contact
+ {
+ protected override void RaisePropertyChanged(string propName)
+ {
+ base.RaisePropertyChanged(propName);
+
+ if (propName == nameof(FirstName) || propName == nameof(LastName))
+ {
+ FixNames();
+ }
+ }
+
+ private void FixNames()
+ {
+ if (_firstname != null)
+ {
+ _firstname = _firstname.Trim();
+ }
+
+ if (_lastname != null)
+ {
+ _lastname = _lastname.Trim();
+ }
+
+ FullName = FirstName + " " + LastName;
+ }
+
+ public override void Validate(ObservablesContext context)
+ {
+ base.Validate(context);
+
+ if (FirstName.IsNullOrWhiteSpace() || LastName.IsNullOrWhiteSpace())
+ {
+ throw new ArgumentException("Contact first name and last name was not provided.");
+ }
+
+ if (!Email.IsEmail())
+ {
+ throw new ArgumentException("Invalid contact email format.");
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/HardwareVersion.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/HardwareVersion.cs
index 0a97a3f9a..0a97a3f9a 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/HardwareVersion.cs
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/HardwareVersion.cs
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/Job.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Job.cs
index e5854a406..e5854a406 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/Job.cs
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Job.cs
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/Machine.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Machine.cs
index e00715795..e00715795 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/Machine.cs
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Machine.cs
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/MachineVersion.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/MachineVersion.cs
index aeec23b33..aeec23b33 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/MachineVersion.cs
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/MachineVersion.cs
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/ProcessParametersTable.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/ProcessParametersTable.cs
index 0bb75120e..0bb75120e 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/ProcessParametersTable.cs
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/ProcessParametersTable.cs
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/Segment.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Segment.cs
index 6f37f4788..6f37f4788 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/Segment.cs
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/Segment.cs
diff --git a/Software/Visual_Studio/Tango.BL/EntitiesExtensions/User.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/User.cs
new file mode 100644
index 000000000..321fa5570
--- /dev/null
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/User.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.BL.Enumerations;
+using SimpleValidator.Extensions;
+
+namespace Tango.BL.Entities
+{
+ public partial class User
+ {
+ /// <summary>
+ /// Determines whether the user has the specified permission.
+ /// </summary>
+ /// <param name="permission">The permission.</param>
+ /// <returns>
+ /// <c>true</c> if the user has permission; otherwise, <c>false</c>.
+ /// </returns>
+ public bool HasPermission(Permissions permission)
+ {
+ return UsersRoles.Select(x => x.Role).ToList().SelectMany(x => x.RolesPermissions).ToList().Exists(x => x.Permission.Code == permission.ToInt32());
+ }
+
+ /// <summary>
+ /// Gets the aggregated user roles as enumerations.
+ /// </summary>
+ [NotMapped]
+ public List<Role> Roles
+ {
+ get { return UsersRoles.Select(x => x.Role).ToList(); }
+ }
+
+ /// <summary>
+ /// Gets the aggregated user permissions as enumerations.
+ /// </summary>
+ [NotMapped]
+ public List<Permission> Permissions
+ {
+ get
+ {
+ return UsersRoles.Select(x => x.Role).ToList().SelectMany(x => x.RolesPermissions).Select(x => x.Permission).ToList();
+ }
+ }
+
+ public override void Validate(ObservablesContext context)
+ {
+ var users = context.Users.ToList();
+
+ if (users.Exists(x => x.Guid != Guid && x.Email.ToLower() == Email.ToLower()))
+ {
+ throw new ArgumentException("The specified email is already taken by another account.");
+ }
+
+ if (!Email.IsEmail())
+ {
+ throw new ArgumentException("The specified email address is invalid.");
+ }
+
+ if (!Password.IsBetweenLength(4, 30))
+ {
+ throw new ArgumentException("A user password must be at least 4 characters long and maximum 30.");
+ }
+
+ if (Contact != null)
+ {
+ Contact.Validate(context);
+ }
+
+ if (Address != null)
+ {
+ Address.Validate(context);
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs b/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs
index a8a4aa2c0..ee77c6f0f 100644
--- a/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs
+++ b/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs
@@ -63,5 +63,17 @@ namespace Tango.BL.Enumerations
[Description("Allows loading the stubs module in machine studio")]
RunStubsModule = 8,
+ /// <summary>
+ /// (Allows loading the ColorLab module in Machine Studio)
+ /// </summary>
+ [Description("Allows loading the ColorLab module in Machine Studio")]
+ RunColorLabModule = 9,
+
+ /// <summary>
+ /// (Allows loading the Users & Roles module in machine studio)
+ /// </summary>
+ [Description("Allows loading the Users & Roles module in machine studio")]
+ RunUsersAndRolesModule = 10,
+
}
}
diff --git a/Software/Visual_Studio/Tango.BL/Enumerations/Roles.cs b/Software/Visual_Studio/Tango.BL/Enumerations/Roles.cs
index c99739f12..f86a73cfb 100644
--- a/Software/Visual_Studio/Tango.BL/Enumerations/Roles.cs
+++ b/Software/Visual_Studio/Tango.BL/Enumerations/Roles.cs
@@ -51,5 +51,17 @@ namespace Tango.BL.Enumerations
[Description("Twine Software Developer")]
SoftwareDeveloper = 6,
+ /// <summary>
+ /// (Manage organizations users and roles)
+ /// </summary>
+ [Description("Manage organizations users and roles")]
+ UsersAndRolesManager = 7,
+
+ /// <summary>
+ /// (Color adjustment & calibration algorithms developer )
+ /// </summary>
+ [Description("Color adjustment & calibration algorithms developer ")]
+ ColorScientist = 8,
+
}
}
diff --git a/Software/Visual_Studio/Tango.BL/Enumerations/Sensors.cs b/Software/Visual_Studio/Tango.BL/Enumerations/Sensors.cs
deleted file mode 100644
index 9d80595d2..000000000
--- a/Software/Visual_Studio/Tango.BL/Enumerations/Sensors.cs
+++ /dev/null
@@ -1,181 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
-using System.ComponentModel;
-
-namespace Tango.BL.Entities
-{
- public enum Sensors
- {
-
- /// <summary>
- /// (Dancer 1)
- /// </summary>
- [Description("Dancer 1")]
- Dancer1Angle = 0,
-
- /// <summary>
- /// (Dancer 2)
- /// </summary>
- [Description("Dancer 2")]
- Dancer2Angle = 1,
-
- /// <summary>
- /// (Dancer 3)
- /// </summary>
- [Description("Dancer 3")]
- Dancer3Angle = 2,
-
- /// <summary>
- /// (Feeder Motor)
- /// </summary>
- [Description("Feeder Motor")]
- FeederMotorFrequency = 3,
-
- /// <summary>
- /// (Dryer Motor)
- /// </summary>
- [Description("Dryer Motor")]
- DryerMotor = 4,
-
- /// <summary>
- /// (Poller Motor)
- /// </summary>
- [Description("Poller Motor")]
- PollerMotor = 5,
-
- /// <summary>
- /// (Winder Motor)
- /// </summary>
- [Description("Winder Motor")]
- WinderMotor = 6,
-
- /// <summary>
- /// (Screw Motor)
- /// </summary>
- [Description("Screw Motor")]
- ScrewMotor = 7,
-
- /// <summary>
- /// (Thread Speed)
- /// </summary>
- [Description("Thread Speed")]
- ThreadSpeed = 8,
-
- /// <summary>
- /// (Mixer)
- /// </summary>
- [Description("Mixer")]
- MixerTemperature = 9,
-
- /// <summary>
- /// (Head Zone 1)
- /// </summary>
- [Description("Head Zone 1")]
- HeadZone1Temperature = 10,
-
- /// <summary>
- /// (Head Zone 2)
- /// </summary>
- [Description("Head Zone 2")]
- HeadZone2Temperature = 11,
-
- /// <summary>
- /// (Head Zone 3)
- /// </summary>
- [Description("Head Zone 3")]
- HeadZone3Temperature = 12,
-
- /// <summary>
- /// (Head Air Flow)
- /// </summary>
- [Description("Head Air Flow")]
- HeadAirFlow = 13,
-
- /// <summary>
- /// (Feeder Tension)
- /// </summary>
- [Description("Feeder Tension")]
- FeederTension = 14,
-
- /// <summary>
- /// (Puller Tension)
- /// </summary>
- [Description("Puller Tension")]
- PullerTension = 15,
-
- /// <summary>
- /// (Dryer Zone 1)
- /// </summary>
- [Description("Dryer Zone 1")]
- DryerZone1Temperature = 16,
-
- /// <summary>
- /// (Dryer Zone 2)
- /// </summary>
- [Description("Dryer Zone 2")]
- DryerZone2Temperature = 17,
-
- /// <summary>
- /// (Dryer Zone 3)
- /// </summary>
- [Description("Dryer Zone 3")]
- DryerZone3Temperature = 18,
-
- /// <summary>
- /// (Dryer Air Flow)
- /// </summary>
- [Description("Dryer Air Flow")]
- DryerAirFlow = 19,
-
- /// <summary>
- /// (Winder Tension)
- /// </summary>
- [Description("Winder Tension")]
- WinderTension = 20,
-
- /// <summary>
- /// (Dispensers Motors)
- /// </summary>
- [Description("Dispensers Motors")]
- DispensersMotorsFrequency = 21,
-
- /// <summary>
- /// (Dispensers Angular Encoders)
- /// </summary>
- [Description("Dispensers Angular Encoders")]
- DispensersAngularEncoders = 22,
-
- /// <summary>
- /// (Dispensers Linear Positions)
- /// </summary>
- [Description("Dispensers Linear Positions")]
- DispensersLinearPositions = 23,
-
- /// <summary>
- /// (Dispensers Pressure)
- /// </summary>
- [Description("Dispensers Pressure")]
- DispensersPressure = 24,
-
- /// <summary>
- /// (Mid Tank Pressure)
- /// </summary>
- [Description("Mid Tank Pressure")]
- MidTankPressure = 25,
-
- /// <summary>
- /// (Filter Delta Pressure)
- /// </summary>
- [Description("Filter Delta Pressure")]
- FilterDeltaPressure = 26,
-
- /// <summary>
- /// (Chiller Temperature)
- /// </summary>
- [Description("Chiller Temperature")]
- ChillerTemperature = 27,
-
- }
-}
diff --git a/Software/Visual_Studio/Tango.BL/Enumerations/TechControllers.cs b/Software/Visual_Studio/Tango.BL/Enumerations/TechControllers.cs
new file mode 100644
index 000000000..570f647c0
--- /dev/null
+++ b/Software/Visual_Studio/Tango.BL/Enumerations/TechControllers.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.ComponentModel;
+
+namespace Tango.BL.Enumerations
+{
+ public enum TechControllers
+ {
+
+ /// <summary>
+ /// (Heater 1 Temperature)
+ /// </summary>
+ [Description("Heater 1 Temperature")]
+ Heater1Temp = 0,
+
+ /// <summary>
+ /// (Heater 2 Temperature)
+ /// </summary>
+ [Description("Heater 2 Temperature")]
+ Heater2Temp = 1,
+
+ }
+}
diff --git a/Software/Visual_Studio/Tango.BL/ExtensionMethods/MediaColor.cs b/Software/Visual_Studio/Tango.BL/ExtensionMethods/MediaColor.cs
new file mode 100644
index 000000000..e4a312775
--- /dev/null
+++ b/Software/Visual_Studio/Tango.BL/ExtensionMethods/MediaColor.cs
@@ -0,0 +1,33 @@
+using ColorMine.ColorSpaces;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Media;
+
+namespace Tango.BL.Entities
+{
+ public partial class MediaColor
+ {
+ private Color _color;
+
+ public Color Color
+ {
+ get { return _color; }
+ set { _color = value; RaisePropertyChangedAuto(); }
+ }
+
+ protected override void RaisePropertyChanged(string propName)
+ {
+ base.RaisePropertyChanged(propName);
+
+ if (propName == nameof(L) || propName == nameof(A) || propName == nameof(B))
+ {
+ Lab lab = new Lab(L, A, B);
+ var rgb = lab.To<Rgb>();
+ Color = Color.FromRgb((byte)rgb.R, (byte)rgb.G, (byte)rgb.B);
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.BL/IObservableEntity.cs b/Software/Visual_Studio/Tango.BL/IObservableEntity.cs
index 9e0a8801d..265b51179 100644
--- a/Software/Visual_Studio/Tango.BL/IObservableEntity.cs
+++ b/Software/Visual_Studio/Tango.BL/IObservableEntity.cs
@@ -78,5 +78,17 @@ namespace Tango.BL
/// Deletes this entity from the database.
/// </summary>
Task DeleteAsync(ObservablesContext context);
+
+ /// <summary>
+ /// Deletes this entity using an SQL statement which will cause the database delete cascade effect.
+ /// </summary>
+ Task DeleteCascadeAsync(ObservablesContext context);
+
+ /// <summary>
+ /// Performs entity field validation.
+ /// Will throw an exception with the proper message if one of the fields is invalid.
+ /// </summary>
+ /// <param name="context">The context.</param>
+ void Validate(ObservablesContext context);
}
}
diff --git a/Software/Visual_Studio/Tango.BL/ObservableEntity.cs b/Software/Visual_Studio/Tango.BL/ObservableEntity.cs
index add6877cb..e46e54ad3 100644
--- a/Software/Visual_Studio/Tango.BL/ObservableEntity.cs
+++ b/Software/Visual_Studio/Tango.BL/ObservableEntity.cs
@@ -123,6 +123,18 @@ namespace Tango.BL
{
if (context == ObservablesEntitiesAdapter.Instance.Context)
{
+ var tableName = this.GetType().GetCustomAttribute<TableAttribute>().Name;
+
+ String propName = tableName.FromDalNameToTitleCase();
+
+ DbSet<T> set = ObservablesEntitiesAdapter.Instance.Context.GetType().GetProperty(propName, BindingFlags.Instance | BindingFlags.Public).GetValue(context) as DbSet<T>;
+ ObservableCollection<T> obs = ObservablesEntitiesAdapter.Instance.GetType().GetProperty(propName, BindingFlags.Instance | BindingFlags.Public).GetValue(ObservablesEntitiesAdapter.Instance) as ObservableCollection<T>;
+
+ if (!obs.Contains(this as T))
+ {
+ set.Add(this as T);
+ }
+
ObservablesEntitiesAdapter.Instance.SaveChanges();
}
else
@@ -154,7 +166,7 @@ namespace Tango.BL
/// <returns></returns>
public Task SaveAsync(ObservablesContext context)
{
- return Task.Factory.StartNew(() =>
+ return Task.Factory.StartNew(() =>
{
Save(context);
});
@@ -284,6 +296,26 @@ Maybe you have deleted an entity that was no yet inserted into database?", LogCa
return me == other;
}
+ /// <summary>
+ /// Deletes this entity using an SQL statement which will cause the database delete cascade effect.
+ /// </summary>
+ /// <param name="context"></param>
+ /// <returns></returns>
+ public Task DeleteCascadeAsync(ObservablesContext context)
+ {
+ return context.Database.ExecuteSqlCommandAsync(String.Format("DELETE FROM {0} WHERE GUID='{1}'", this.GetType().GetCustomAttribute<TableAttribute>().Name, Guid));
+ }
+
+ /// <summary>
+ /// Performs entity field validation.
+ /// Will throw an exception with the proper message if one of the fields is invalid.
+ /// </summary>
+ /// <param name="context">The context.</param>
+ public virtual void Validate(ObservablesContext context)
+ {
+
+ }
+
#region Operator Overloading
//public static bool operator ==(ObservableEntity<T> observable1, ObservableEntity<T> observable2)
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesContext.cs b/Software/Visual_Studio/Tango.BL/ObservablesContext.cs
index aa64cebcb..20eabd0ae 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesContext.cs
+++ b/Software/Visual_Studio/Tango.BL/ObservablesContext.cs
@@ -469,17 +469,17 @@ namespace Tango.BL
}
/// <summary>
- /// Gets or sets the TechDispensers.
+ /// Gets or sets the TechControllers.
/// </summary>
- public DbSet<TechDispenser> TechDispensers
+ public DbSet<TechController> TechControllers
{
get; set;
}
/// <summary>
- /// Gets or sets the TechHeaters.
+ /// Gets or sets the TechDispensers.
/// </summary>
- public DbSet<TechHeater> TechHeaters
+ public DbSet<TechDispenser> TechDispensers
{
get; set;
}
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapter.cs b/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapter.cs
index 297de3b88..59f5d31fa 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapter.cs
+++ b/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapter.cs
@@ -274,7 +274,7 @@ namespace Tango.BL
TechIos = Context.TechIos.ToObservableCollection();
- TechHeaters = Context.TechHeaters.ToObservableCollection();
+ TechControllers = Context.TechControllers.ToObservableCollection();
IdsPackFormulas = Context.IdsPackFormulas.ToObservableCollection();
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapterExtension.cs b/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapterExtension.cs
index 0964f29f7..97265b8a8 100644
--- a/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapterExtension.cs
+++ b/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapterExtension.cs
@@ -2059,74 +2059,74 @@ namespace Tango.BL
}
- private ObservableCollection<TechDispenser> _techdispensers;
+ private ObservableCollection<TechController> _techcontrollers;
/// <summary>
- /// Gets or sets the TechDispensers.
+ /// Gets or sets the TechControllers.
/// </summary>
- public ObservableCollection<TechDispenser> TechDispensers
+ public ObservableCollection<TechController> TechControllers
{
get
{
- return _techdispensers;
+ return _techcontrollers;
}
set
{
- _techdispensers = value; RaisePropertyChanged(nameof(TechDispensers));
+ _techcontrollers = value; RaisePropertyChanged(nameof(TechControllers));
}
}
- private ICollectionView _techdispensersViewSource;
+ private ICollectionView _techcontrollersViewSource;
/// <summary>
- /// Gets or sets the TechDispensers View Source.
+ /// Gets or sets the TechControllers View Source.
///</summary>
- public ICollectionView TechDispensersViewSource
+ public ICollectionView TechControllersViewSource
{
get
{
- return _techdispensersViewSource;
+ return _techcontrollersViewSource;
}
set
{
- _techdispensersViewSource = value; RaisePropertyChanged(nameof(TechDispensersViewSource));
+ _techcontrollersViewSource = value; RaisePropertyChanged(nameof(TechControllersViewSource));
}
}
- private ObservableCollection<TechHeater> _techheaters;
+ private ObservableCollection<TechDispenser> _techdispensers;
/// <summary>
- /// Gets or sets the TechHeaters.
+ /// Gets or sets the TechDispensers.
/// </summary>
- public ObservableCollection<TechHeater> TechHeaters
+ public ObservableCollection<TechDispenser> TechDispensers
{
get
{
- return _techheaters;
+ return _techdispensers;
}
set
{
- _techheaters = value; RaisePropertyChanged(nameof(TechHeaters));
+ _techdispensers = value; RaisePropertyChanged(nameof(TechDispensers));
}
}
- private ICollectionView _techheatersViewSource;
+ private ICollectionView _techdispensersViewSource;
/// <summary>
- /// Gets or sets the TechHeaters View Source.
+ /// Gets or sets the TechDispensers View Source.
///</summary>
- public ICollectionView TechHeatersViewSource
+ public ICollectionView TechDispensersViewSource
{
get
{
- return _techheatersViewSource;
+ return _techdispensersViewSource;
}
set
{
- _techheatersViewSource = value; RaisePropertyChanged(nameof(TechHeatersViewSource));
+ _techdispensersViewSource = value; RaisePropertyChanged(nameof(TechDispensersViewSource));
}
}
@@ -2503,9 +2503,9 @@ namespace Tango.BL
SyncConfigurationsViewSource = CreateCollectionView(SyncConfigurations);
- TechDispensersViewSource = CreateCollectionView(TechDispensers);
+ TechControllersViewSource = CreateCollectionView(TechControllers);
- TechHeatersViewSource = CreateCollectionView(TechHeaters);
+ TechDispensersViewSource = CreateCollectionView(TechDispensers);
TechIosViewSource = CreateCollectionView(TechIos);
diff --git a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/User.cs b/Software/Visual_Studio/Tango.BL/ObservablesExtensions/User.cs
deleted file mode 100644
index 52b3970dc..000000000
--- a/Software/Visual_Studio/Tango.BL/ObservablesExtensions/User.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tango.BL.Enumerations;
-
-namespace Tango.BL.Entities
-{
- public partial class User
- {
- /// <summary>
- /// Determines whether the user has the specified permission.
- /// </summary>
- /// <param name="permission">The permission.</param>
- /// <returns>
- /// <c>true</c> if the user has permission; otherwise, <c>false</c>.
- /// </returns>
- public bool HasPermission(Permissions permission)
- {
- return UsersRoles.Select(x => x.Role).ToList().SelectMany(x => x.RolesPermissions).ToList().Exists(x => x.Permission.Code == permission.ToInt32());
- }
-
- /// <summary>
- /// Gets the aggregated user roles as enumerations.
- /// </summary>
- public List<Roles> Roles
- {
- get { return UsersRoles.Select(x => (Roles)x.Role.Code).ToList(); }
- }
-
- /// <summary>
- /// Gets the aggregated user permissions as enumerations.
- /// </summary>
- public List<Permissions> Permissions
- {
-
- get
- {
- return UsersRoles.Select(x => x.Role).ToList().SelectMany(x => x.RolesPermissions).Select(x => (Permissions)x.Permission.Code).ToList();
- }
- }
- }
-}
diff --git a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj
index 79667148b..714d74b77 100644
--- a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj
+++ b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj
@@ -27,7 +27,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -45,6 +45,9 @@
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
+ <Reference Include="SimpleValidator, Version=0.6.1.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\SimpleValidator.0.6.1.0\lib\net40\SimpleValidator.dll</HintPath>
+ </Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Data" />
@@ -85,6 +88,9 @@
<Compile Include="Dispensing\LubricantDispensingCalc.cs" />
<Compile Include="Dispensing\StandardColorDispensingCalc.cs" />
<Compile Include="Dispensing\TransparentLiquidDispensingCalc.cs" />
+ <Compile Include="EntitiesExtensions\Contact.cs" />
+ <Compile Include="Entities\TechController.cs" />
+ <Compile Include="ExtensionMethods\MediaColor.cs" />
<Compile Include="LiquidVolume.cs" />
<Compile Include="Entities\ActionType.cs" />
<Compile Include="Entities\Address.cs" />
@@ -144,7 +150,6 @@
<Compile Include="Entities\SpoolType.cs" />
<Compile Include="Entities\SyncConfiguration.cs" />
<Compile Include="Entities\TechDispenser.cs" />
- <Compile Include="Entities\TechHeater.cs" />
<Compile Include="Entities\TechIo.cs" />
<Compile Include="Entities\TechMonitor.cs" />
<Compile Include="Entities\TechMotor.cs" />
@@ -169,7 +174,6 @@
<Compile Include="Enumerations\MidTankTypes.cs" />
<Compile Include="Enumerations\Permissions.cs" />
<Compile Include="Enumerations\Roles.cs" />
- <Compile Include="Enumerations\Sensors.cs" />
<Compile Include="Enumerations\WindingMethods.cs" />
<Compile Include="ExtensionMethods\ConfigurationExtensions.cs" />
<Compile Include="ExtensionMethods\LiquidTypeExtensions.cs" />
@@ -181,16 +185,16 @@
<Compile Include="ObservablesContextExtension.cs" />
<Compile Include="ObservablesEntitiesAdapter.cs" />
<Compile Include="ObservablesEntitiesAdapterExtension.cs" />
- <Compile Include="ObservablesExtensions\BrushStop.cs" />
- <Compile Include="ObservablesExtensions\Cat.cs" />
- <Compile Include="ObservablesExtensions\Configuration.cs" />
- <Compile Include="ObservablesExtensions\HardwareVersion.cs" />
- <Compile Include="ObservablesExtensions\Job.cs" />
- <Compile Include="ObservablesExtensions\Machine.cs" />
- <Compile Include="ObservablesExtensions\MachineVersion.cs" />
- <Compile Include="ObservablesExtensions\ProcessParametersTable.cs" />
- <Compile Include="ObservablesExtensions\Segment.cs" />
- <Compile Include="ObservablesExtensions\User.cs" />
+ <Compile Include="EntitiesExtensions\BrushStop.cs" />
+ <Compile Include="EntitiesExtensions\Cat.cs" />
+ <Compile Include="EntitiesExtensions\Configuration.cs" />
+ <Compile Include="EntitiesExtensions\HardwareVersion.cs" />
+ <Compile Include="EntitiesExtensions\Job.cs" />
+ <Compile Include="EntitiesExtensions\Machine.cs" />
+ <Compile Include="EntitiesExtensions\MachineVersion.cs" />
+ <Compile Include="EntitiesExtensions\ProcessParametersTable.cs" />
+ <Compile Include="EntitiesExtensions\Segment.cs" />
+ <Compile Include="EntitiesExtensions\User.cs" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
diff --git a/Software/Visual_Studio/Tango.BL/packages.config b/Software/Visual_Studio/Tango.BL/packages.config
index dcc94a0a3..ed5d800c9 100644
--- a/Software/Visual_Studio/Tango.BL/packages.config
+++ b/Software/Visual_Studio/Tango.BL/packages.config
@@ -3,6 +3,7 @@
<package id="EntityFramework" version="6.0.0" targetFramework="net46" />
<package id="Google.Protobuf" version="3.4.1" targetFramework="net46" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net46" />
+ <package id="SimpleValidator" version="0.6.1.0" targetFramework="net46" />
<package id="System.Data.SQLite" version="1.0.106.0" targetFramework="net46" />
<package id="System.Data.SQLite.Core" version="1.0.106.0" targetFramework="net46" />
<package id="System.Data.SQLite.EF6" version="1.0.106.0" targetFramework="net46" />
diff --git a/Software/Visual_Studio/Tango.BrushPicker/Tango.BrushPicker.csproj b/Software/Visual_Studio/Tango.BrushPicker/Tango.BrushPicker.csproj
index cc8ba2fc6..c007f793d 100644
--- a/Software/Visual_Studio/Tango.BrushPicker/Tango.BrushPicker.csproj
+++ b/Software/Visual_Studio/Tango.BrushPicker/Tango.BrushPicker.csproj
@@ -30,7 +30,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.CircularGauge/CircularGaugeControl.cs b/Software/Visual_Studio/Tango.CircularGauge/CircularGaugeControl.cs
new file mode 100644
index 000000000..1d1d598c6
--- /dev/null
+++ b/Software/Visual_Studio/Tango.CircularGauge/CircularGaugeControl.cs
@@ -0,0 +1,1419 @@
+/*Copyright (c) 2009 T.Evelyn (evescode@gmail.com)
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1.Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+
+DAMAGE.*/
+
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Media.Animation;
+
+namespace Tango.CircularGauge
+{
+ /// <summary>
+ /// Represents a Circular Gauge control
+ /// </summary>
+ [TemplatePart(Name = "LayoutRoot", Type = typeof(Grid))]
+ [TemplatePart(Name = "Pointer", Type = typeof(Path))]
+ [TemplatePart(Name = "RangeIndicatorLight", Type = typeof(Ellipse))]
+ [TemplatePart(Name = "PointerCap", Type = typeof(Ellipse))]
+ public class CircularGaugeControl : Control
+ {
+ #region Private variables
+
+ //Private variables
+ private Grid rootGrid;
+ private Path rangeIndicator;
+ private Path pointer;
+ private Ellipse pointerCap;
+ private Ellipse lightIndicator;
+ private bool isInitialValueSet = false;
+ private Double arcradius1;
+ private Double arcradius2;
+ private int animatingSpeedFactor = 6;
+
+ #endregion
+
+ #region Dependency properties
+
+ /// <summary>
+ /// Dependency property to Get/Set the current value
+ /// </summary>
+ public static readonly DependencyProperty CurrentValueProperty =
+ DependencyProperty.Register("CurrentValue", typeof(double), typeof(CircularGaugeControl),
+ new PropertyMetadata(Double.MinValue, new PropertyChangedCallback(CircularGaugeControl.OnCurrentValuePropertyChanged)));
+
+ /// <summary>
+ /// Dependency property to Get/Set the Minimum Value
+ /// </summary>
+ public static readonly DependencyProperty MinValueProperty =
+ DependencyProperty.Register("MinValue", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Maximum Value
+ /// </summary>
+ public static readonly DependencyProperty MaxValueProperty =
+ DependencyProperty.Register("MaxValue", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Radius of the gauge
+ /// </summary>
+ public static readonly DependencyProperty RadiusProperty =
+ DependencyProperty.Register("Radius", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Pointer cap Radius
+ /// </summary>
+ public static readonly DependencyProperty PointerCapRadiusProperty =
+ DependencyProperty.Register("PointerCapRadius", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the pointer length
+ /// </summary>
+ public static readonly DependencyProperty PointerLengthProperty =
+ DependencyProperty.Register("PointerLength", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the scale Radius
+ /// </summary>
+ public static readonly DependencyProperty ScaleRadiusProperty =
+ DependencyProperty.Register("ScaleRadius", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the starting angle of scale
+ /// </summary>
+ public static readonly DependencyProperty ScaleStartAngleProperty =
+ DependencyProperty.Register("ScaleStartAngle", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the sweep angle of scale
+ /// </summary>
+ public static readonly DependencyProperty ScaleSweepAngleProperty =
+ DependencyProperty.Register("ScaleSweepAngle", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the number of major divisions on the scale
+ /// </summary>
+ public static readonly DependencyProperty MajorDivisionsCountProperty =
+ DependencyProperty.Register("MajorDivisionsCount", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the number of minor divisions on the scale
+ /// </summary>
+ public static readonly DependencyProperty MinorDivisionsCountProperty =
+ DependencyProperty.Register("MinorDivisionsCount", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set Optimal Range End Value
+ /// </summary>
+ public static readonly DependencyProperty OptimalRangeEndValueProperty =
+ DependencyProperty.Register("OptimalRangeEndValue", typeof(double), typeof(CircularGaugeControl), new PropertyMetadata(new PropertyChangedCallback(CircularGaugeControl.OnOptimalRangeEndValuePropertyChanged)));
+
+ /// <summary>
+ /// Dependency property to Get/Set Optimal Range Start Value
+ /// </summary>
+ public static readonly DependencyProperty OptimalRangeStartValueProperty =
+ DependencyProperty.Register("OptimalRangeStartValue", typeof(double), typeof(CircularGaugeControl), new PropertyMetadata(new PropertyChangedCallback(CircularGaugeControl.OnOptimalRangeStartValuePropertyChanged)));
+
+ /// <summary>
+ /// Dependency property to Get/Set the image source
+ /// </summary>
+ public static readonly DependencyProperty ImageSourceProperty =
+ DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the image offset
+ /// </summary>
+ public static readonly DependencyProperty ImageOffsetProperty =
+ DependencyProperty.Register("ImageOffset", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the range indicator light offset
+ /// </summary>
+ public static readonly DependencyProperty RangeIndicatorLightOffsetProperty =
+ DependencyProperty.Register("RangeIndicatorLightOffset", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the image Size
+ /// </summary>
+ public static readonly DependencyProperty ImageSizeProperty =
+ DependencyProperty.Register("ImageSize", typeof(Size), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Range Indicator Radius
+ /// </summary>
+ public static readonly DependencyProperty RangeIndicatorRadiusProperty =
+ DependencyProperty.Register("RangeIndicatorRadius", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Range Indicator Thickness
+ /// </summary>
+ public static readonly DependencyProperty RangeIndicatorThicknessProperty =
+ DependencyProperty.Register("RangeIndicatorThickness", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the scale label Radius
+ /// </summary>
+ public static readonly DependencyProperty ScaleLabelRadiusProperty =
+ DependencyProperty.Register("ScaleLabelRadius", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Scale Label Size
+ /// </summary>
+ public static readonly DependencyProperty ScaleLabelSizeProperty =
+ DependencyProperty.Register("ScaleLabelSize", typeof(Size), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Scale Label FontSize
+ /// </summary>
+ public static readonly DependencyProperty ScaleLabelFontSizeProperty =
+ DependencyProperty.Register("ScaleLabelFontSize", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Scale Label Foreground
+ /// </summary>
+
+ public static readonly DependencyProperty ScaleLabelForegroundProperty =
+ DependencyProperty.Register("ScaleLabelForeground", typeof(Color), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Major Tick Size
+ /// </summary>
+ public static readonly DependencyProperty MajorTickSizeProperty =
+ DependencyProperty.Register("MajorTickRectSize", typeof(Size), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Minor Tick Size
+ /// </summary>
+ public static readonly DependencyProperty MinorTickSizeProperty =
+ DependencyProperty.Register("MinorTickSize", typeof(Size), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Major Tick Color
+ /// </summary>
+ public static readonly DependencyProperty MajorTickColorProperty =
+ DependencyProperty.Register("MajorTickColor", typeof(Color), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Minor Tick Color
+ /// </summary>
+ public static readonly DependencyProperty MinorTickColorProperty =
+ DependencyProperty.Register("MinorTickColor", typeof(Color), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Gauge Background Color
+ /// </summary>
+ public static readonly DependencyProperty GaugeBackgroundColorProperty =
+ DependencyProperty.Register("GaugeBackgroundColor", typeof(Color), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Pointer Thickness
+ /// </summary>
+ public static readonly DependencyProperty PointerThicknessProperty =
+ DependencyProperty.Register("PointerThickness", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the an option to reset the pointer on start up to the minimum value
+ /// </summary>
+ public static readonly DependencyProperty ResetPointerOnStartUpProperty =
+ DependencyProperty.Register("ResetPointerOnStartUp", typeof(bool), typeof(CircularGaugeControl), new PropertyMetadata(false, null));
+
+ /// <summary>
+ /// Dependency property to Get/Set the Scale Value Precision
+ /// </summary>
+ public static readonly DependencyProperty ScaleValuePrecisionProperty =
+ DependencyProperty.Register("ScaleValuePrecision", typeof(int), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Below Optimal Range Color
+ /// </summary>
+
+ public static readonly DependencyProperty BelowOptimalRangeColorProperty =
+ DependencyProperty.Register("BelowOptimalRangeColor", typeof(Color), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Optimal Range Color
+ /// </summary>
+
+ public static readonly DependencyProperty OptimalRangeColorProperty =
+ DependencyProperty.Register("OptimalRangeColor", typeof(Color), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Above Optimal Range Color
+ /// </summary>
+
+ public static readonly DependencyProperty AboveOptimalRangeColorProperty =
+ DependencyProperty.Register("AboveOptimalRangeColor", typeof(Color), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Dial Text
+ /// </summary>
+
+ public static readonly DependencyProperty DialTextProperty =
+ DependencyProperty.Register("DialText", typeof(string), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Dial Text Color
+ /// </summary>
+
+ public static readonly DependencyProperty DialTextColorProperty =
+ DependencyProperty.Register("DialTextColor", typeof(Color), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Dial Text Font Size
+ /// </summary>
+
+ public static readonly DependencyProperty DialTextFontSizeProperty =
+ DependencyProperty.Register("DialTextFontSize", typeof(int), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Dial Text Offset
+ /// </summary>
+
+ public static readonly DependencyProperty DialTextOffsetProperty =
+ DependencyProperty.Register("DialTextOffset", typeof(double), typeof(CircularGaugeControl), null);
+
+ /// <summary>
+ /// Dependency property to Get/Set the Range Indicator light Radius
+ /// </summary>
+
+ public static readonly DependencyProperty RangeIndicatorLightRadiusProperty =
+ DependencyProperty.Register("RangeIndicatorLightRadius", typeof(double), typeof(CircularGaugeControl), null);
+
+
+ #endregion
+
+ #region Wrapper properties
+
+ /// <summary>
+ /// Gets/Sets the current value
+ /// </summary>
+ public double CurrentValue
+ {
+ get
+ {
+ return (double)GetValue(CurrentValueProperty);
+ }
+ set
+ {
+ SetValue(CurrentValueProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Minimum Value
+ /// </summary>
+ public double MinValue
+ {
+ get
+ {
+ return (double)GetValue(MinValueProperty);
+ }
+ set
+ {
+ SetValue(MinValueProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Maximum Value
+ /// </summary>
+ public double MaxValue
+ {
+ get
+ {
+ return (double)GetValue(MaxValueProperty);
+ }
+ set
+ {
+ SetValue(MaxValueProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Minimum Value
+ /// </summary>
+ public double Radius
+ {
+ get
+ {
+ return (double)GetValue(RadiusProperty);
+ }
+ set
+ {
+ SetValue(RadiusProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Pointer cap radius
+ /// </summary>
+ public double PointerCapRadius
+ {
+ get
+ {
+ return (double)GetValue(PointerCapRadiusProperty);
+ }
+ set
+ {
+ SetValue(PointerCapRadiusProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Pointer Length
+ /// </summary>
+ public double PointerLength
+ {
+ get
+ {
+ return (double)GetValue(PointerLengthProperty);
+ }
+ set
+ {
+ SetValue(PointerLengthProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Pointer Thickness
+ /// </summary>
+ public double PointerThickness
+ {
+ get
+ {
+ return (double)GetValue(PointerThicknessProperty);
+ }
+ set
+ {
+ SetValue(PointerThicknessProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Scale radius
+ /// </summary>
+ public double ScaleRadius
+ {
+ get
+ {
+ return (double)GetValue(ScaleRadiusProperty);
+ }
+ set
+ {
+ SetValue(ScaleRadiusProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the scale start angle
+ /// </summary>
+ public double ScaleStartAngle
+ {
+ get
+ {
+ return (double)GetValue(ScaleStartAngleProperty);
+ }
+ set
+ {
+ SetValue(ScaleStartAngleProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the scale sweep angle
+ /// </summary>
+ public double ScaleSweepAngle
+ {
+ get
+ {
+ return (double)GetValue(ScaleSweepAngleProperty);
+ }
+ set
+ {
+ SetValue(ScaleSweepAngleProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the number of major divisions on the scale
+ /// </summary>
+ public double MajorDivisionsCount
+ {
+ get
+ {
+ return (double)GetValue(MajorDivisionsCountProperty);
+ }
+ set
+ {
+ SetValue(MajorDivisionsCountProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the number of minor divisions on the scale
+ /// </summary>
+ public double MinorDivisionsCount
+ {
+ get
+ {
+ return (double)GetValue(MinorDivisionsCountProperty);
+ }
+ set
+ {
+ SetValue(MinorDivisionsCountProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Optimal range end value
+ /// </summary>
+ public double OptimalRangeEndValue
+ {
+ get
+ {
+ return (double)GetValue(OptimalRangeEndValueProperty);
+ }
+ set
+ {
+ SetValue(OptimalRangeEndValueProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets the Optimal Range Start Value
+ /// </summary>
+ public double OptimalRangeStartValue
+ {
+ get
+ {
+ return (double)GetValue(OptimalRangeStartValueProperty);
+ }
+ set
+ {
+ SetValue(OptimalRangeStartValueProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Gauge image source
+ /// </summary>
+ public ImageSource ImageSource
+ {
+ get
+ {
+ return (ImageSource)GetValue(ImageSourceProperty);
+ }
+ set
+ {
+ SetValue(ImageSourceProperty, value);
+ }
+ }
+
+
+ /// <summary>
+ /// Gets/Sets the Image offset
+ /// </summary>
+ public double ImageOffset
+ {
+ get
+ {
+ return (double)GetValue(ImageOffsetProperty);
+ }
+ set
+ {
+ SetValue(ImageOffsetProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Range Indicator Light offset
+ /// </summary>
+ public double RangeIndicatorLightOffset
+ {
+ get
+ {
+ return (double)GetValue(RangeIndicatorLightOffsetProperty);
+ }
+ set
+ {
+ SetValue(RangeIndicatorLightOffsetProperty, value);
+ }
+ }
+
+
+ /// <summary>
+ /// Gets/Sets the Image width and height
+ /// </summary>
+ public Size ImageSize
+ {
+ get
+ {
+ return (Size)GetValue(ImageSizeProperty);
+ }
+ set
+ {
+ SetValue(ImageSizeProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets the Range Indicator Radius
+ /// </summary>
+ public double RangeIndicatorRadius
+ {
+ get
+ {
+ return (double)GetValue(RangeIndicatorRadiusProperty);
+ }
+ set
+ {
+ SetValue(RangeIndicatorRadiusProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Range Indicator Thickness
+ /// </summary>
+ public double RangeIndicatorThickness
+ {
+ get
+ {
+ return (double)GetValue(RangeIndicatorThicknessProperty);
+ }
+ set
+ {
+ SetValue(RangeIndicatorThicknessProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets the Scale Label Radius
+ /// </summary>
+ public double ScaleLabelRadius
+ {
+ get
+ {
+ return (double)GetValue(ScaleLabelRadiusProperty);
+ }
+ set
+ {
+ SetValue(ScaleLabelRadiusProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets the Scale Label Size
+ /// </summary>
+ public Size ScaleLabelSize
+ {
+ get
+ {
+ return (Size)GetValue(ScaleLabelSizeProperty);
+ }
+ set
+ {
+ SetValue(ScaleLabelSizeProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets the Scale Label Font Size
+ /// </summary>
+ public double ScaleLabelFontSize
+ {
+ get
+ {
+ return (double)GetValue(ScaleLabelFontSizeProperty);
+ }
+ set
+ {
+ SetValue(ScaleLabelFontSizeProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets the Scale Label Foreground
+ /// </summary>
+ public Color ScaleLabelForeground
+ {
+ get
+ {
+ return (Color)GetValue(ScaleLabelForegroundProperty);
+ }
+ set
+ {
+ SetValue(ScaleLabelForegroundProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets the Major Tick Size
+ /// </summary>
+ public Size MajorTickSize
+ {
+ get
+ {
+ return (Size)GetValue(MajorTickSizeProperty);
+ }
+ set
+ {
+ SetValue(MajorTickSizeProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Minor Tick Size
+ /// </summary>
+ public Size MinorTickSize
+ {
+ get
+ {
+ return (Size)GetValue(MinorTickSizeProperty);
+ }
+ set
+ {
+ SetValue(MinorTickSizeProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets the Major Tick Color
+ /// </summary>
+ public Color MajorTickColor
+ {
+ get
+ {
+ return (Color)GetValue(MajorTickColorProperty);
+ }
+ set
+ {
+ SetValue(MajorTickColorProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets the Minor Tick Color
+ /// </summary>
+ public Color MinorTickColor
+ {
+ get
+ {
+ return (Color)GetValue(MinorTickColorProperty);
+ }
+ set
+ {
+ SetValue(MinorTickColorProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the Gauge Background color
+ /// </summary>
+ public Color GaugeBackgroundColor
+ {
+ get
+ {
+ return (Color)GetValue(GaugeBackgroundColorProperty);
+ }
+ set
+ {
+ SetValue(GaugeBackgroundColorProperty, value);
+ }
+ }
+
+
+ /// <summary>
+ /// Gets/Sets option to reset the pointer to minimum on start up, Default is true
+ /// </summary>
+ public bool ResetPointerOnStartUp
+ {
+ get
+ {
+ return (bool)GetValue(ResetPointerOnStartUpProperty);
+ }
+ set
+ {
+ SetValue(ResetPointerOnStartUpProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets scale value precision
+ /// </summary>
+ public int ScaleValuePrecision
+ {
+ get
+ {
+ return (int)GetValue(ScaleValuePrecisionProperty);
+ }
+ set
+ {
+ SetValue(ScaleValuePrecisionProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets Below Optimal Range Color
+ /// </summary>
+ public Color BelowOptimalRangeColor
+ {
+ get
+ {
+ return (Color)GetValue(BelowOptimalRangeColorProperty);
+ }
+ set
+ {
+ SetValue(BelowOptimalRangeColorProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets Optimal Range Color
+ /// </summary>
+ public Color OptimalRangeColor
+ {
+ get
+ {
+ return (Color)GetValue(OptimalRangeColorProperty);
+ }
+ set
+ {
+ SetValue(OptimalRangeColorProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets Above Optimal Range Color
+ /// </summary>
+ public Color AboveOptimalRangeColor
+ {
+ get
+ {
+ return (Color)GetValue(AboveOptimalRangeColorProperty);
+ }
+ set
+ {
+ SetValue(AboveOptimalRangeColorProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets Dial Text
+ /// </summary>
+ public string DialText
+ {
+ get
+ {
+ return (string)GetValue(DialTextProperty);
+ }
+ set
+ {
+ SetValue(DialTextProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets Dial Text Color
+ /// </summary>
+ public Color DialTextColor
+ {
+ get
+ {
+ return (Color)GetValue(DialTextColorProperty);
+ }
+ set
+ {
+ SetValue(DialTextColorProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets Dial Text Font Size
+ /// </summary>
+ public int DialTextFontSize
+ {
+ get
+ {
+ return (int)GetValue(DialTextFontSizeProperty);
+ }
+ set
+ {
+ SetValue(DialTextFontSizeProperty, value);
+ }
+ }
+ /// <summary>
+ /// Gets/Sets Dial Text Offset
+ /// </summary>
+ public double DialTextOffset
+ {
+ get
+ {
+ return (double)GetValue(DialTextOffsetProperty);
+ }
+ set
+ {
+ SetValue(DialTextOffsetProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets Range Indicator Light Radius
+ /// </summary>
+ public double RangeIndicatorLightRadius
+ {
+ get
+ {
+ return (double)GetValue(RangeIndicatorLightRadiusProperty);
+ }
+ set
+ {
+ SetValue(RangeIndicatorLightRadiusProperty, value);
+ }
+ }
+
+ #endregion
+
+ #region Constructor
+ static CircularGaugeControl()
+ {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(CircularGaugeControl), new FrameworkPropertyMetadata(typeof(CircularGaugeControl)));
+ }
+ #endregion
+
+ #region Methods
+ private static void OnCurrentValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ //Get access to the instance of CircularGaugeConrol whose property value changed
+ CircularGaugeControl gauge = d as CircularGaugeControl;
+ gauge.OnCurrentValueChanged(e);
+
+ }
+
+ private static void OnOptimalRangeEndValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ //Get access to the instance of CircularGaugeConrol whose property value changed
+ CircularGaugeControl gauge = d as CircularGaugeControl;
+ if ((double)e.NewValue > gauge.MaxValue)
+ {
+ gauge.OptimalRangeEndValue = gauge.MaxValue;
+ }
+
+ }
+ private static void OnOptimalRangeStartValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ //Get access to the instance of CircularGaugeConrol whose property value changed
+ CircularGaugeControl gauge = d as CircularGaugeControl;
+ if ((double)e.NewValue < gauge.MinValue)
+ {
+ gauge.OptimalRangeStartValue = gauge.MinValue;
+ }
+
+
+ }
+
+ public virtual void OnCurrentValueChanged(DependencyPropertyChangedEventArgs e)
+ {
+ //Validate and set the new value
+ double newValue = (double)e.NewValue;
+ double oldValue = (double)e.OldValue;
+
+ if (newValue > this.MaxValue)
+ {
+ newValue = this.MaxValue;
+ }
+ else if (newValue < this.MinValue)
+ {
+ newValue = this.MinValue;
+ }
+
+ if (oldValue > this.MaxValue)
+ {
+ oldValue = this.MaxValue;
+ }
+ else if (oldValue < this.MinValue)
+ {
+ oldValue = this.MinValue;
+ }
+
+ if (pointer != null)
+ {
+ double db1 = 0;
+ Double oldcurr_realworldunit = 0;
+ Double newcurr_realworldunit = 0;
+ Double realworldunit = (ScaleSweepAngle / (MaxValue - MinValue));
+ //Resetting the old value to min value the very first time.
+ if (oldValue == 0 && !isInitialValueSet)
+ {
+ oldValue = MinValue;
+ isInitialValueSet = true;
+
+ }
+ if (oldValue < 0)
+ {
+ db1 = MinValue + Math.Abs(oldValue);
+ oldcurr_realworldunit = ((double)(Math.Abs(db1 * realworldunit)));
+ }
+ else
+ {
+ db1 = Math.Abs(MinValue) + oldValue;
+ oldcurr_realworldunit = ((double)(db1 * realworldunit));
+ }
+ if (newValue < 0)
+ {
+ db1 = MinValue + Math.Abs(newValue);
+ newcurr_realworldunit = ((double)(Math.Abs(db1 * realworldunit)));
+ }
+ else
+ {
+ db1 = Math.Abs(MinValue) + newValue;
+ newcurr_realworldunit = ((double)(db1 * realworldunit));
+ }
+
+ Double oldcurrentvalueAngle = (ScaleStartAngle + oldcurr_realworldunit);
+ Double newcurrentvalueAngle = (ScaleStartAngle + newcurr_realworldunit);
+
+ //Animate the pointer from the old value to the new value
+ AnimatePointer(oldcurrentvalueAngle, newcurrentvalueAngle);
+
+ }
+
+ }
+
+ /// <summary>
+ /// Animates the pointer to the current value to the new one
+ /// </summary>
+ /// <param name="oldcurrentvalueAngle"></param>
+ /// <param name="newcurrentvalueAngle"></param>
+ void AnimatePointer(double oldcurrentvalueAngle, double newcurrentvalueAngle)
+ {
+ if (pointer != null)
+ {
+ DoubleAnimation da = new DoubleAnimation();
+ da.From = oldcurrentvalueAngle;
+ da.To = newcurrentvalueAngle;
+
+ double animDuration = Math.Abs(oldcurrentvalueAngle - newcurrentvalueAngle) * animatingSpeedFactor;
+ da.Duration = new Duration(TimeSpan.FromMilliseconds(animDuration));
+
+ Storyboard sb = new Storyboard();
+ sb.Completed += new EventHandler(sb_Completed);
+ sb.Children.Add(da);
+ Storyboard.SetTarget(da, pointer);
+ Storyboard.SetTargetProperty(da, new PropertyPath("(Path.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)"));
+
+ if (newcurrentvalueAngle != oldcurrentvalueAngle)
+ {
+ sb.Begin();
+ }
+ }
+ }
+
+ /// <summary>
+ /// Move pointer without animating
+ /// </summary>
+ /// <param name="angleValue"></param>
+ void MovePointer(double angleValue)
+ {
+ if (pointer != null)
+ {
+ TransformGroup tg = pointer.RenderTransform as TransformGroup;
+ RotateTransform rt = tg.Children[0] as RotateTransform;
+ rt.Angle = angleValue;
+
+ }
+ }
+
+ /// <summary>
+ /// Switch on the Range indicator light after the pointer completes animating
+ /// </summary>
+ /// <param name="sender"></param>
+ /// <param name="e"></param>
+ void sb_Completed(object sender, EventArgs e)
+ {
+ if (this.CurrentValue > OptimalRangeEndValue)
+ {
+ lightIndicator.Fill = GetRangeIndicatorGradEffect(AboveOptimalRangeColor);
+
+ }
+ else if (this.CurrentValue <= OptimalRangeEndValue && this.CurrentValue >= OptimalRangeStartValue)
+ {
+ lightIndicator.Fill = GetRangeIndicatorGradEffect(OptimalRangeColor);
+
+ }
+ else if (this.CurrentValue < OptimalRangeStartValue)
+ {
+ lightIndicator.Fill = GetRangeIndicatorGradEffect(BelowOptimalRangeColor);
+ }
+
+ }
+
+ /// <summary>
+ /// Get gradient brush effect for the range indicator light
+ /// </summary>
+ /// <param name="gradientColor"></param>
+ /// <returns></returns>
+ private GradientBrush GetRangeIndicatorGradEffect(Color gradientColor)
+ {
+
+ LinearGradientBrush gradient = new LinearGradientBrush();
+ gradient.StartPoint = new Point(0, 0);
+ gradient.EndPoint = new Point(1, 1);
+ GradientStop color1 = new GradientStop();
+ if (gradientColor == Colors.Transparent)
+ {
+ color1.Color = gradientColor;
+ }
+ else
+ color1.Color = Colors.LightGray;
+
+ color1.Offset = 0.2;
+ gradient.GradientStops.Add(color1);
+ GradientStop color2 = new GradientStop();
+ color2.Color = gradientColor; color2.Offset = 0.5;
+ gradient.GradientStops.Add(color2);
+ GradientStop color3 = new GradientStop();
+ color3.Color = gradientColor; color3.Offset = 0.8;
+ gradient.GradientStops.Add(color3);
+ return gradient;
+ }
+
+
+
+ public override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+ //Get reference to known elements on the control template
+ rootGrid = GetTemplateChild("LayoutRoot") as Grid;
+ pointer = GetTemplateChild("Pointer") as Path;
+ pointerCap = GetTemplateChild("PointerCap") as Ellipse;
+ lightIndicator = GetTemplateChild("RangeIndicatorLight") as Ellipse;
+
+ //Draw scale and range indicator
+ DrawScale();
+ DrawRangeIndicator();
+
+ //Set Zindex of pointer and pointer cap to a really high number so that it stays on top of the
+ //scale and the range indicator
+ Canvas.SetZIndex(pointer, 100000);
+ Canvas.SetZIndex(pointerCap, 100001);
+
+ if (ResetPointerOnStartUp)
+ {
+ //Reset Pointer
+ MovePointer(ScaleStartAngle);
+ }
+
+
+
+ }
+
+
+ //Drawing the scale with the Scale Radius
+ private void DrawScale()
+ {
+ //Calculate one major tick angle
+ Double majorTickUnitAngle = ScaleSweepAngle / MajorDivisionsCount;
+
+ //Obtaining One minor tick angle
+ Double minorTickUnitAngle = ScaleSweepAngle / MinorDivisionsCount;
+
+ //Obtaining One major ticks value
+ Double majorTicksUnitValue = (MaxValue - MinValue) / MajorDivisionsCount;
+ majorTicksUnitValue = Math.Round(majorTicksUnitValue, ScaleValuePrecision);
+
+ Double minvalue = MinValue; ;
+
+ // Drawing Major scale ticks
+ for (Double i = ScaleStartAngle; i <= (ScaleStartAngle + ScaleSweepAngle); i = i + majorTickUnitAngle)
+ {
+
+ //Majortick is drawn as a rectangle
+ Rectangle majortickrect = new Rectangle();
+ majortickrect.Height = MajorTickSize.Height;
+ majortickrect.Width = MajorTickSize.Width;
+ majortickrect.Fill = new SolidColorBrush(MajorTickColor);
+ Point p = new Point(0.5, 0.5);
+ majortickrect.RenderTransformOrigin = p;
+ majortickrect.HorizontalAlignment = HorizontalAlignment.Center;
+ majortickrect.VerticalAlignment = VerticalAlignment.Center;
+
+ TransformGroup majortickgp = new TransformGroup();
+ RotateTransform majortickrt = new RotateTransform();
+
+ //Obtaining the angle in radians for calulating the points
+ Double i_radian = (i * Math.PI) / 180;
+ majortickrt.Angle = i;
+ majortickgp.Children.Add(majortickrt);
+ TranslateTransform majorticktt = new TranslateTransform();
+
+ //Finding the point on the Scale where the major ticks are drawn
+ //here drawing the points with center as (0,0)
+ majorticktt.X = (int)((ScaleRadius) * Math.Cos(i_radian));
+ majorticktt.Y = (int)((ScaleRadius) * Math.Sin(i_radian));
+
+ //Points for the textblock which hold the scale value
+ TranslateTransform majorscalevaluett = new TranslateTransform();
+ //here drawing the points with center as (0,0)
+ majorscalevaluett.X = (int)((ScaleLabelRadius) * Math.Cos(i_radian));
+ majorscalevaluett.Y = (int)((ScaleLabelRadius) * Math.Sin(i_radian));
+
+ //Defining the properties of the scale value textbox
+ TextBlock tb = new TextBlock();
+
+ tb.Height = ScaleLabelSize.Height;
+ tb.Width = ScaleLabelSize.Width;
+ tb.FontSize = ScaleLabelFontSize;
+ tb.Foreground = new SolidColorBrush(ScaleLabelForeground);
+ tb.TextAlignment = TextAlignment.Center;
+ tb.VerticalAlignment = VerticalAlignment.Center;
+ tb.HorizontalAlignment = HorizontalAlignment.Center;
+
+ //Writing and appending the scale value
+
+ //checking minvalue < maxvalue w.r.t scale precion value
+ if (Math.Round(minvalue, ScaleValuePrecision) <= Math.Round(MaxValue, ScaleValuePrecision))
+ {
+ minvalue = Math.Round(minvalue, ScaleValuePrecision);
+ tb.Text = minvalue.ToString();
+ minvalue = minvalue + majorTicksUnitValue;
+
+ }
+ else
+ {
+ break;
+ }
+ majortickgp.Children.Add(majorticktt);
+ majortickrect.RenderTransform = majortickgp;
+ tb.RenderTransform = majorscalevaluett;
+ rootGrid.Children.Add(majortickrect);
+ rootGrid.Children.Add(tb);
+
+
+ //Drawing the minor axis ticks
+ Double onedegree = ((i + majorTickUnitAngle) - i) / (MinorDivisionsCount);
+
+ if ((i < (ScaleStartAngle + ScaleSweepAngle)) && (Math.Round(minvalue, ScaleValuePrecision) <= Math.Round(MaxValue, ScaleValuePrecision)))
+ {
+ //Drawing the minor scale
+ for (Double mi = i + onedegree; mi < (i + majorTickUnitAngle); mi = mi + onedegree)
+ {
+ //here the minortick is drawn as a rectangle
+ Rectangle mr = new Rectangle();
+ mr.Height = MinorTickSize.Height;
+ mr.Width = MinorTickSize.Width;
+ mr.Fill = new SolidColorBrush(MinorTickColor);
+ mr.HorizontalAlignment = HorizontalAlignment.Center;
+ mr.VerticalAlignment = VerticalAlignment.Center;
+ Point p1 = new Point(0.5, 0.5);
+ mr.RenderTransformOrigin = p1;
+
+ TransformGroup minortickgp = new TransformGroup();
+ RotateTransform minortickrt = new RotateTransform();
+ minortickrt.Angle = mi;
+ minortickgp.Children.Add(minortickrt);
+ TranslateTransform minorticktt = new TranslateTransform();
+
+ //Obtaining the angle in radians for calulating the points
+ Double mi_radian = (mi * Math.PI) / 180;
+ //Finding the point on the Scale where the minor ticks are drawn
+ minorticktt.X = (int)((ScaleRadius) * Math.Cos(mi_radian));
+ minorticktt.Y = (int)((ScaleRadius) * Math.Sin(mi_radian));
+
+ minortickgp.Children.Add(minorticktt);
+ mr.RenderTransform = minortickgp;
+ rootGrid.Children.Add(mr);
+
+
+ }
+
+ }
+
+ }
+ }
+
+ /// <summary>
+ /// Obtaining the Point (x,y) in the circumference
+ /// </summary>
+ /// <param name="angle"></param>
+ /// <param name="radius"></param>
+ /// <returns></returns>
+ private Point GetCircumferencePoint(Double angle, Double radius)
+ {
+ Double angle_radian = (angle * Math.PI) / 180;
+ //Radius-- is the Radius of the gauge
+ Double X = (Double)((Radius) + (radius) * Math.Cos(angle_radian));
+ Double Y = (Double)((Radius) + (radius) * Math.Sin(angle_radian));
+ Point p = new Point(X, Y);
+ return p;
+ }
+
+ /// <summary>
+ /// Draw the range indicator
+ /// </summary>
+ private void DrawRangeIndicator()
+ {
+ Double realworldunit = (ScaleSweepAngle / (MaxValue - MinValue));
+ Double optimalStartAngle;
+ Double optimalEndAngle;
+ double db;
+
+ //Checking whether the OptimalRangeStartvalue is -ve
+ if (OptimalRangeStartValue < 0)
+ {
+ db = MinValue + Math.Abs(OptimalRangeStartValue);
+ optimalStartAngle = ((double)(Math.Abs(db * realworldunit)));
+ }
+ else
+ {
+ db = Math.Abs(MinValue) + OptimalRangeStartValue;
+ optimalStartAngle = ((double)(db * realworldunit));
+ }
+
+ //Checking whether the OptimalRangeEndvalue is -ve
+ if (OptimalRangeEndValue < 0)
+ {
+ db = MinValue + Math.Abs(OptimalRangeEndValue);
+ optimalEndAngle = ((double)(Math.Abs(db * realworldunit)));
+ }
+ else
+ {
+ db = Math.Abs(MinValue) + OptimalRangeEndValue;
+ optimalEndAngle = ((double)(db * realworldunit));
+ }
+ // calculating the angle for optimal Start value
+
+ Double optimalStartAngleFromStart = (ScaleStartAngle + optimalStartAngle);
+
+ // calculating the angle for optimal Start value
+
+ Double optimalEndAngleFromStart = (ScaleStartAngle + optimalEndAngle);
+
+ //Calculating the Radius of the two arc for segment
+ arcradius1 = (RangeIndicatorRadius + RangeIndicatorThickness);
+ arcradius2 = RangeIndicatorRadius;
+
+ double endAngle = ScaleStartAngle + ScaleSweepAngle;
+
+ // Calculating the Points for the below Optimal Range segment from the center of the gauge
+
+ Point A = GetCircumferencePoint(ScaleStartAngle, arcradius1);
+ Point B = GetCircumferencePoint(ScaleStartAngle, arcradius2);
+ Point C = GetCircumferencePoint(optimalStartAngleFromStart, arcradius2);
+ Point D = GetCircumferencePoint(optimalStartAngleFromStart, arcradius1);
+
+ bool isReflexAngle = Math.Abs(optimalStartAngleFromStart - ScaleStartAngle) > 180.0;
+ DrawSegment(A, B, C, D, isReflexAngle, BelowOptimalRangeColor);
+
+ // Calculating the Points for the Optimal Range segment from the center of the gauge
+
+ Point A1 = GetCircumferencePoint(optimalStartAngleFromStart, arcradius1);
+ Point B1 = GetCircumferencePoint(optimalStartAngleFromStart, arcradius2);
+ Point C1 = GetCircumferencePoint(optimalEndAngleFromStart, arcradius2);
+ Point D1 = GetCircumferencePoint(optimalEndAngleFromStart, arcradius1);
+ bool isReflexAngle1 = Math.Abs(optimalEndAngleFromStart - optimalStartAngleFromStart) > 180.0;
+ DrawSegment(A1, B1, C1, D1, isReflexAngle1, OptimalRangeColor);
+
+ // Calculating the Points for the Above Optimal Range segment from the center of the gauge
+
+ Point A2 = GetCircumferencePoint(optimalEndAngleFromStart, arcradius1);
+ Point B2 = GetCircumferencePoint(optimalEndAngleFromStart, arcradius2);
+ Point C2 = GetCircumferencePoint(endAngle, arcradius2);
+ Point D2 = GetCircumferencePoint(endAngle, arcradius1);
+ bool isReflexAngle2 = Math.Abs(endAngle - optimalEndAngleFromStart) > 180.0;
+ DrawSegment(A2, B2, C2, D2, isReflexAngle2, AboveOptimalRangeColor);
+ }
+
+ //Drawing the segment with two arc and two line
+
+ private void DrawSegment(Point p1, Point p2, Point p3, Point p4, bool reflexangle, Color clr)
+ {
+
+ // Segment Geometry
+ PathSegmentCollection segments = new PathSegmentCollection();
+
+ // First line segment from pt p1 - pt p2
+ segments.Add(new LineSegment() { Point = p2 });
+
+ //Arc drawn from pt p2 - pt p3 with the RangeIndicatorRadius
+ segments.Add(new ArcSegment()
+ {
+ Size = new Size(arcradius2, arcradius2),
+ Point = p3,
+ SweepDirection = SweepDirection.Clockwise,
+ IsLargeArc = reflexangle
+
+ });
+
+ // Second line segment from pt p3 - pt p4
+ segments.Add(new LineSegment() { Point = p4 });
+
+ //Arc drawn from pt p4 - pt p1 with the Radius of arcradius1
+ segments.Add(new ArcSegment()
+ {
+ Size = new Size(arcradius1, arcradius1),
+ Point = p1,
+ SweepDirection = SweepDirection.Counterclockwise,
+ IsLargeArc = reflexangle
+
+ });
+
+ // Defining the segment path properties
+ Color rangestrokecolor;
+ if (clr == Colors.Transparent)
+ {
+ rangestrokecolor = clr;
+ }
+ else
+ rangestrokecolor = Colors.White;
+
+
+
+ rangeIndicator = new Path()
+ {
+ StrokeLineJoin = PenLineJoin.Round,
+ Stroke = new SolidColorBrush(rangestrokecolor),
+ //Color.FromArgb(0xFF, 0xF5, 0x9A, 0x86)
+ Fill = new SolidColorBrush(clr),
+ Opacity = 0.65,
+ StrokeThickness = 0.25,
+ Data = new PathGeometry()
+ {
+ Figures = new PathFigureCollection()
+ {
+ new PathFigure()
+ {
+ IsClosed = true,
+ StartPoint = p1,
+ Segments = segments
+ }
+ }
+ }
+ };
+
+ //Set Z index of range indicator
+ rangeIndicator.SetValue(Canvas.ZIndexProperty, 150);
+ // Adding the segment to the root grid
+ rootGrid.Children.Add(rangeIndicator);
+
+ }
+
+ #endregion
+ }
+}
diff --git a/Software/Visual_Studio/Tango.CircularGauge/Properties/AssemblyInfo.cs b/Software/Visual_Studio/Tango.CircularGauge/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..eaecfc80d
--- /dev/null
+++ b/Software/Visual_Studio/Tango.CircularGauge/Properties/AssemblyInfo.cs
@@ -0,0 +1,18 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+[assembly: AssemblyTitle("Tango - Circular Gauge Control")]
+[assembly: ComVisible(false)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
diff --git a/Software/Visual_Studio/Tango.CircularGauge/Properties/Resources.Designer.cs b/Software/Visual_Studio/Tango.CircularGauge/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..92a65f881
--- /dev/null
+++ b/Software/Visual_Studio/Tango.CircularGauge/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Tango.CircularGauge.Properties {
+ using System;
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // 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()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tango.CircularGauge.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.CircularGauge/Properties/Resources.resx b/Software/Visual_Studio/Tango.CircularGauge/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/Software/Visual_Studio/Tango.CircularGauge/Properties/Resources.resx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.CircularGauge/Properties/Settings.Designer.cs b/Software/Visual_Studio/Tango.CircularGauge/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..791f73266
--- /dev/null
+++ b/Software/Visual_Studio/Tango.CircularGauge/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Tango.CircularGauge.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.1.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.CircularGauge/Properties/Settings.settings b/Software/Visual_Studio/Tango.CircularGauge/Properties/Settings.settings
new file mode 100644
index 000000000..033d7a5e9
--- /dev/null
+++ b/Software/Visual_Studio/Tango.CircularGauge/Properties/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+ <Profiles>
+ <Profile Name="(Default)" />
+ </Profiles>
+ <Settings />
+</SettingsFile> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.CircularGauge/Tango.CircularGauge.csproj b/Software/Visual_Studio/Tango.CircularGauge/Tango.CircularGauge.csproj
new file mode 100644
index 000000000..1773852f7
--- /dev/null
+++ b/Software/Visual_Studio/Tango.CircularGauge/Tango.CircularGauge.csproj
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.30729</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}</ProjectGuid>
+ <OutputType>library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Tango.CircularGauge</RootNamespace>
+ <AssemblyName>Tango.CircularGauge</AssemblyName>
+ <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <WarningLevel>4</WarningLevel>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <UpgradeBackupLocation>
+ </UpgradeBackupLocation>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile />
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\Build\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <Prefer32Bit>false</Prefer32Bit>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\Build\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <Prefer32Bit>false</Prefer32Bit>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Xaml" />
+ <Reference Include="System.Xml.Linq">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data.DataSetExtensions">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ <Reference Include="WindowsBase" />
+ <Reference Include="PresentationCore" />
+ <Reference Include="PresentationFramework" />
+ </ItemGroup>
+ <ItemGroup>
+ <Page Include="Themes\Generic.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Compile Include="..\Versioning\GlobalVersionInfo.cs">
+ <Link>GlobalVersionInfo.cs</Link>
+ </Compile>
+ <Compile Include="CircularGaugeControl.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Properties\AssemblyInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Resources.resx</DependentUpon>
+ </Compile>
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Settings.settings</DependentUpon>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ </Compile>
+ <Compile Include="TypeConverters.cs" />
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ </EmbeddedResource>
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ <AppDesigner Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.CircularGauge/Themes/Generic.xaml b/Software/Visual_Studio/Tango.CircularGauge/Themes/Generic.xaml
new file mode 100644
index 000000000..edef67f07
--- /dev/null
+++ b/Software/Visual_Studio/Tango.CircularGauge/Themes/Generic.xaml
@@ -0,0 +1,174 @@
+<!--Copyright (c) 2009 T.Evelyn (evescode@gmail.com)
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1.Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.-->
+
+ <ResourceDictionary
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="clr-namespace:Tango.CircularGauge">
+ <!-- Type converters-->
+ <local:ImageOffsetConverter x:Key="imageOffsetConverter" />
+ <local:RadiusToDiameterConverter x:Key="radiusToDiameterConverter"/>
+ <local:PointerCenterConverter x:Key="pointerCenterConverter"/>
+ <local:RangeIndicatorLightPositionConverter x:Key="rangeIndicatorLightPositionConverter"/>
+ <local:SizeConverter x:Key="sizeConverter" />
+ <local:BackgroundColorConverter x:Key="backgroundColorConverter" />
+ <local:GlassEffectWidthConverter x:Key="glassEffectWidthConverter" />
+ <local:ColorToSolidColorBrushConverter x:Key="colorToSolidColorBrushConverter" />
+
+
+ <Style TargetType="local:CircularGaugeControl" >
+ <Setter Property="ResetPointerOnStartUp" Value="True" />
+ <Setter Property="ScaleValuePrecision" Value="5" />
+ <Setter Property="BorderBrush">
+ <Setter.Value>
+ <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+ <GradientStop Color="#FFA3AFD6" Offset="0.321"/>
+ <GradientStop Color="#FF8399A9" Offset="0.674"/>
+ <GradientStop Color="#FF718597" Offset="0.375"/>
+ <GradientStop Color="#FF617584" Offset="1"/>
+ </LinearGradientBrush>
+ </Setter.Value>
+ </Setter>
+ <Setter Property="RangeIndicatorThickness" Value="5"/>
+ <Setter Property="GaugeBackgroundColor" Value="Black" />
+ <Setter Property="BelowOptimalRangeColor" Value="Yellow" />
+ <Setter Property="OptimalRangeColor" Value="Green" />
+ <Setter Property="AboveOptimalRangeColor" Value="Red" />
+ <Setter Property="DialTextColor" Value="White" />
+ <Setter Property="DialTextFontSize" Value="8" />
+
+ <Setter Property="Template" >
+ <Setter.Value>
+ <ControlTemplate TargetType="local:CircularGaugeControl">
+ <!-- Root Grid-->
+ <Grid x:Name="LayoutRoot"
+ Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius, Converter={StaticResource radiusToDiameterConverter}}"
+ Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius, Converter={StaticResource radiusToDiameterConverter}}" >
+
+
+ <Ellipse x:Name="OuterFrame" StrokeThickness="16"
+ Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius, Converter={StaticResource radiusToDiameterConverter}}"
+ Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius, Converter={StaticResource radiusToDiameterConverter}}"
+ Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=GaugeBackgroundColor, Converter={StaticResource backgroundColorConverter}}">
+
+ <Ellipse.Stroke>
+ <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+ <GradientStop Color="#FF636060" Offset="1"/>
+ <GradientStop Color="#FF5F5C5C" Offset="0"/>
+ <GradientStop Color="#FFEEDEDE" Offset="0.35"/>
+ <GradientStop Color="#FFA09595" Offset="0.705"/>
+ </LinearGradientBrush>
+ </Ellipse.Stroke>
+ </Ellipse>
+
+
+ <!-- Gauge Image -->
+ <Image Source="{TemplateBinding ImageSource}"
+ Width="{Binding RelativeSource={RelativeSource TemplatedParent},
+ Path=ImageSize, Converter={StaticResource sizeConverter}, ConverterParameter=Width }"
+
+ Height="{Binding RelativeSource={RelativeSource TemplatedParent},
+ Path=ImageSize, Converter={StaticResource sizeConverter}, ConverterParameter=Height }"
+
+ RenderTransform="{Binding RelativeSource={RelativeSource TemplatedParent},
+ Path=ImageOffset, Converter={StaticResource imageOffsetConverter}}">
+
+ </Image>
+
+ <!-- Dial Text -->
+ <TextBlock Text="{TemplateBinding DialText}"
+ HorizontalAlignment="Center" VerticalAlignment="Center"
+ Foreground="{Binding RelativeSource={RelativeSource TemplatedParent},
+ Path=DialTextColor, Converter={StaticResource colorToSolidColorBrushConverter}}"
+ FontSize="{TemplateBinding DialTextFontSize}"
+ FontWeight="Bold"
+
+ RenderTransform="{Binding RelativeSource={RelativeSource TemplatedParent},
+ Path=DialTextOffset, Converter={StaticResource rangeIndicatorLightPositionConverter}}">
+
+ </TextBlock>
+
+ <!-- Pointer -->
+ <Path x:Name="Pointer" Stroke="#FFE91C1C" StrokeThickness="2"
+ Width="{TemplateBinding PointerLength}"
+ Height="{TemplateBinding PointerThickness}" HorizontalAlignment="Center"
+ Data="M1,1 L1,10 L156,6 z" Stretch="Fill" RenderTransformOrigin="0,0.5"
+ RenderTransform="{Binding RelativeSource={RelativeSource TemplatedParent},
+ Path=PointerLength, Converter={StaticResource pointerCenterConverter}}">
+ <Path.Fill>
+ <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+ <GradientStop Color="#FF890A0A" Offset="0.197"/>
+ <GradientStop Color="#FFC40808" Offset="1"/>
+ <GradientStop Color="#FFE32323" Offset="0.61"/>
+ </LinearGradientBrush>
+ </Path.Fill>
+
+ </Path>
+
+
+ <!--Pointer Cap-->
+ <Ellipse x:Name="PointerCap" Height="{TemplateBinding PointerCapRadius}" Width="{TemplateBinding PointerCapRadius}" StrokeThickness="4" Opacity="1" >
+ <Ellipse.Stroke>
+ <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+ <GradientStop Color="#FF000000" Offset="0.675"/>
+ <GradientStop Color="#FFC1B5B5" Offset="0.031"/>
+ </LinearGradientBrush>
+ </Ellipse.Stroke>
+ <Ellipse.Fill>
+ <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+ <GradientStop Color="#FF152029" Offset="0.846"/>
+ <GradientStop Color="#FF140204" Offset="0.342"/>
+ </LinearGradientBrush>
+ </Ellipse.Fill>
+ </Ellipse>
+
+ <!--Range indicator light-->
+ <Ellipse x:Name="RangeIndicatorLight"
+ Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=RangeIndicatorLightRadius, Converter={StaticResource radiusToDiameterConverter}}"
+ Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=RangeIndicatorLightRadius, Converter={StaticResource radiusToDiameterConverter}}"
+
+ RenderTransform="{Binding RelativeSource={RelativeSource TemplatedParent},
+ Path=RangeIndicatorLightOffset, Converter={StaticResource rangeIndicatorLightPositionConverter}}">
+ <!--Range indicator light off position effect-->
+ <Ellipse.Fill>
+ <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
+ <GradientStop Color="LightGray" Offset="0.2" />
+ <GradientStop Color="Gray" Offset="0.5" />
+ <GradientStop Color="Black" Offset="0.8" />
+ </LinearGradientBrush>
+ </Ellipse.Fill>
+ </Ellipse>
+
+ <!--Glass effect ellipse-->
+ <Path x:Name="GlassEffect" StrokeThickness="1" Stretch="Fill" VerticalAlignment="Bottom"
+ Height="{TemplateBinding Radius}"
+ Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius, Converter={StaticResource glassEffectWidthConverter}}"
+ Opacity="0.18" Data="M265.99997,151.00005 C263.99994,194.00003 209.55908,259 135.00064,259 C60.442207,259 11,200.00003 5.9999995,157.00005 C5.0181994,148.55656 73.000877,112.00006 137.00053,112.00007 C199.00887,112.00008 266.72015,135.5164 265.99997,151.00005 z">
+ <Path.Fill>
+ <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
+ <GradientStop Color="#68FCFCFC"/>
+ <GradientStop Color="#FFF8FCF8" Offset="1"/>
+ </LinearGradientBrush>
+ </Path.Fill>
+ </Path>
+
+ </Grid>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+</ResourceDictionary>
diff --git a/Software/Visual_Studio/Tango.CircularGauge/TypeConverters.cs b/Software/Visual_Studio/Tango.CircularGauge/TypeConverters.cs
new file mode 100644
index 000000000..98ef8933c
--- /dev/null
+++ b/Software/Visual_Studio/Tango.CircularGauge/TypeConverters.cs
@@ -0,0 +1,277 @@
+/*Copyright (c) 2009 T.Evelyn (evescode@gmail.com)
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1.Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.*/
+
+
+using System;
+using System.Net;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Shapes;
+using System.Windows.Data;
+using System.Globalization;
+
+namespace Tango.CircularGauge
+{
+
+ /// <summary>
+ /// Converts the given color to a SolidColorBrush
+ /// </summary>
+ public class ColorToSolidColorBrushConverter : IValueConverter
+ {
+ public object Convert(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ Color c = (Color)value;
+
+ return new SolidColorBrush(c);
+ }
+
+ public object ConvertBack(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+
+ /// <summary>
+ /// A type converter for converting image offset into render transform
+ /// </summary>
+ public class ImageOffsetConverter : IValueConverter
+ {
+ public object Convert(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ double dblVal = (double)value;
+ TranslateTransform tt = new TranslateTransform();
+ tt.Y = dblVal;
+ return tt;
+ }
+
+ public object ConvertBack(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+
+ /// <summary>
+ /// Converts radius to diameter
+ /// </summary>
+ public class RadiusToDiameterConverter : IValueConverter
+ {
+ public object Convert(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ double dblVal = (double)value;
+
+ return (dblVal *2);
+ }
+
+ public object ConvertBack(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ /// <summary>
+ /// Calculates the pointer position
+ /// </summary>
+ public class PointerCenterConverter : IValueConverter
+ {
+ public object Convert(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ double dblVal = (double)value;
+ TransformGroup tg = new TransformGroup();
+ RotateTransform rt = new RotateTransform();
+ TranslateTransform tt = new TranslateTransform();
+
+ tt.X = dblVal / 2;
+ tg.Children.Add(rt);
+ tg.Children.Add(tt);
+
+ return tg;
+ }
+
+ public object ConvertBack(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ /// <summary>
+ /// Calculates the range indicator light position
+ /// </summary>
+ public class RangeIndicatorLightPositionConverter : IValueConverter
+ {
+ public object Convert(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ double dblVal = (double)value;
+ TransformGroup tg = new TransformGroup();
+ RotateTransform rt = new RotateTransform();
+ TranslateTransform tt = new TranslateTransform();
+
+ tt.Y = dblVal ;
+ tg.Children.Add(rt);
+ tg.Children.Add(tt);
+
+ return tg;
+ }
+
+ public object ConvertBack(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ /// <summary>
+ /// Converts the given Size to height and width
+ /// </summary>
+ public class SizeConverter : IValueConverter
+ {
+ public object Convert(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ double i = 0;
+ Size s = (Size)value;
+ if (parameter.ToString() == "Height")
+ {
+ i = s.Height;
+ }
+ else if (parameter.ToString() == "Width")
+ {
+ i = s.Width;
+ }
+
+ return i;
+
+ }
+
+ public object ConvertBack(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ /// <summary>
+ /// Scaling factor for drawing the glass effect.
+ /// </summary>
+ public class GlassEffectWidthConverter : IValueConverter
+ {
+ public object Convert(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ double dbl = (double)value;
+ return (dbl*2) * 0.94;
+
+ }
+
+ public object ConvertBack(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ /// <summary>
+ /// Converts background color to Gradient effect
+ /// </summary>
+ public class BackgroundColorConverter : IValueConverter
+ {
+ public object Convert(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ Color c = (Color)value;
+ RadialGradientBrush radBrush = new RadialGradientBrush();
+ GradientStop g1 = new GradientStop();
+ g1.Offset = 0.982;
+ g1.Color = c;
+ GradientStop g2 = new GradientStop();
+ g2.Color = Color.FromArgb(0xFF, 0xAF, 0xB2, 0xB0);
+ radBrush.GradientStops.Add(g1);
+ radBrush.GradientStops.Add(g2);
+ return radBrush;
+
+ }
+
+ public object ConvertBack(
+ object value,
+ Type targetType,
+ object parameter,
+ CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.CodeGeneration/ProtoMessageFile.cs b/Software/Visual_Studio/Tango.CodeGeneration/ProtoMessageFile.cs
index 6d771099a..2bcdac8b4 100644
--- a/Software/Visual_Studio/Tango.CodeGeneration/ProtoMessageFile.cs
+++ b/Software/Visual_Studio/Tango.CodeGeneration/ProtoMessageFile.cs
@@ -6,14 +6,18 @@ using System.Threading.Tasks;
namespace Tango.CodeGeneration
{
- public class ProtoMessageFile : Class
+ public class ProtoMessageFile : CodeObject
{
+ public String Name { get; set; }
public String Package { get; set; }
public List<String> Imports { get; set; }
+ public List<ProtoProperty> Properties { get; set; }
+
public ProtoMessageFile()
{
Imports = new List<string>();
+ Properties = new List<ProtoProperty>();
}
}
}
diff --git a/Software/Visual_Studio/Tango.CodeGeneration/ProtoProperty.cs b/Software/Visual_Studio/Tango.CodeGeneration/ProtoProperty.cs
new file mode 100644
index 000000000..d63348b6b
--- /dev/null
+++ b/Software/Visual_Studio/Tango.CodeGeneration/ProtoProperty.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.CodeGeneration
+{
+ public class ProtoProperty : Property
+ {
+ public bool Repeated { get; set; }
+
+ public String Description { get; set; }
+
+ public ProtoProperty()
+ {
+
+ }
+
+ public ProtoProperty(String name, String type) : this()
+ {
+ Name = name;
+ Type = type;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.CodeGeneration/Tango.CodeGeneration.csproj b/Software/Visual_Studio/Tango.CodeGeneration/Tango.CodeGeneration.csproj
index d622bd6a0..3c6c9d085 100644
--- a/Software/Visual_Studio/Tango.CodeGeneration/Tango.CodeGeneration.csproj
+++ b/Software/Visual_Studio/Tango.CodeGeneration/Tango.CodeGeneration.csproj
@@ -28,7 +28,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -70,6 +70,7 @@
<Compile Include="ObservablesContextCodeFile.cs" />
<Compile Include="ProtoEnumFile.cs" />
<Compile Include="ProtoMessageFile.cs" />
+ <Compile Include="ProtoProperty.cs" />
<Compile Include="TangoDAOJavaFile.cs" />
<Compile Include="EnumerationFileJava.cs" />
<Compile Include="EnumerationFile.cs" />
diff --git a/Software/Visual_Studio/Tango.CodeGeneration/Templates/ProtoEnumFile.cshtml b/Software/Visual_Studio/Tango.CodeGeneration/Templates/ProtoEnumFile.cshtml
index 790e5dd93..d659a028e 100644
--- a/Software/Visual_Studio/Tango.CodeGeneration/Templates/ProtoEnumFile.cshtml
+++ b/Software/Visual_Studio/Tango.CodeGeneration/Templates/ProtoEnumFile.cshtml
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
@foreach (var import in Model.Imports)
{
@@ -17,6 +25,7 @@ enum @(Model.Name)
@foreach (var prop in Model.Fields)
{
<div>
+ @(prop.Description != null ? ("//" + prop.Description) : "")
@(prop.Name) = @(prop.Value);
</div>
}
diff --git a/Software/Visual_Studio/Tango.CodeGeneration/Templates/ProtoMessageFile.cshtml b/Software/Visual_Studio/Tango.CodeGeneration/Templates/ProtoMessageFile.cshtml
index 7452db6e6..c1aa28fb1 100644
--- a/Software/Visual_Studio/Tango.CodeGeneration/Templates/ProtoMessageFile.cshtml
+++ b/Software/Visual_Studio/Tango.CodeGeneration/Templates/ProtoMessageFile.cshtml
@@ -1,6 +1,14 @@
-syntax = "proto3";
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Tango PMR Generator
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated. Do not modify!
+// </auto-generated>
+//------------------------------------------------------------------------------
-//This file is auto-generated. Do not modify!
+syntax = "proto3";
@foreach (var import in Model.Imports)
{
@@ -18,7 +26,8 @@ message @(Model.Name)
@for (int i = 0; i < Model.Properties.Count; i++)
{
<div>
- @(Model.Properties[i].Type) @(Model.Properties[i].Name) = @(i + 1);
+ @(Model.Properties[i].Description != null ? ("//" + Model.Properties[i].Description) : "")
+ @(Model.Properties[i].Repeated ? "repeated" : "") @(Model.Properties[i].Type) @(Model.Properties[i].Name) = @(i + 1);
</div>
}
}
diff --git a/Software/Visual_Studio/Tango.ColorPicker/Tango.ColorPicker.csproj b/Software/Visual_Studio/Tango.ColorPicker/Tango.ColorPicker.csproj
index c104df2e3..adebcacf7 100644
--- a/Software/Visual_Studio/Tango.ColorPicker/Tango.ColorPicker.csproj
+++ b/Software/Visual_Studio/Tango.ColorPicker/Tango.ColorPicker.csproj
@@ -31,7 +31,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Core/ExtensionMethods/DependencyObjectExtensions.cs b/Software/Visual_Studio/Tango.Core/ExtensionMethods/DependencyObjectExtensions.cs
index 3e7da4cfb..e36fe607c 100644
--- a/Software/Visual_Studio/Tango.Core/ExtensionMethods/DependencyObjectExtensions.cs
+++ b/Software/Visual_Studio/Tango.Core/ExtensionMethods/DependencyObjectExtensions.cs
@@ -55,7 +55,7 @@ public static class DependencyObjectExtensions
/// <param name="mode">Binding mode.</param>
/// <param name="converter">Binding converter.</param>
/// <returns></returns>
- public static Binding Bind(this DependencyObject target, DependencyProperty targetDP, DependencyObject source, DependencyProperty sourceDP, BindingMode mode, IValueConverter converter = null)
+ public static Binding Bind(this DependencyObject target, DependencyProperty targetDP, DependencyObject source, DependencyProperty sourceDP, BindingMode mode, IValueConverter converter)
{
Binding binding = new Binding();
binding.Mode = mode;
diff --git a/Software/Visual_Studio/Tango.Core/ExtensionMethods/StringExtensions.cs b/Software/Visual_Studio/Tango.Core/ExtensionMethods/StringExtensions.cs
index 048e942d5..e31456871 100644
--- a/Software/Visual_Studio/Tango.Core/ExtensionMethods/StringExtensions.cs
+++ b/Software/Visual_Studio/Tango.Core/ExtensionMethods/StringExtensions.cs
@@ -1,9 +1,11 @@
using System;
using System.Collections.Generic;
using System.Data.Entity.Design.PluralizationServices;
+using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
+using System.Threading;
using System.Threading.Tasks;
/// <summary>
@@ -55,6 +57,26 @@ public static class StringExtensions
}
/// <summary>
+ /// Formats the string as title case.
+ /// </summary>
+ /// <param name="str">The string.</param>
+ /// <returns></returns>
+ public static String ToTitleCase(this String str)
+ {
+ return Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
+ }
+
+ /// <summary>
+ /// Converts the specified database conventional name to the observables conventional name.
+ /// </summary>
+ /// <param name="dalName">DAL name.</param>
+ /// <returns></returns>
+ public static String FromDalNameToTitleCase(this String dalName)
+ {
+ return String.Join("", dalName.Split('_').Select(x => ToTitleCase(x)));
+ }
+
+ /// <summary>
/// Singularizes the string.
/// </summary>
/// <param name="text">The text.</param>
diff --git a/Software/Visual_Studio/Tango.Core/Tango.Core.csproj b/Software/Visual_Studio/Tango.Core/Tango.Core.csproj
index 76ea72fbe..e80e6e29b 100644
--- a/Software/Visual_Studio/Tango.Core/Tango.Core.csproj
+++ b/Software/Visual_Studio/Tango.Core/Tango.Core.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.DAL.Local/Tango.DAL.Local.csproj b/Software/Visual_Studio/Tango.DAL.Local/Tango.DAL.Local.csproj
index 1dec945f6..59edcd567 100644
--- a/Software/Visual_Studio/Tango.DAL.Local/Tango.DAL.Local.csproj
+++ b/Software/Visual_Studio/Tango.DAL.Local/Tango.DAL.Local.csproj
@@ -26,7 +26,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/MEDIA_COLORS.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/MEDIA_COLORS.cs
index c158b1770..4e7672b2e 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/MEDIA_COLORS.cs
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/MEDIA_COLORS.cs
@@ -23,7 +23,10 @@ namespace Tango.DAL.Remote.DB
public int ID { get; set; }
public string GUID { get; set; }
public System.DateTime LAST_UPDATED { get; set; }
- public int COLOR { get; set; }
+ public string NAME { get; set; }
+ public double L { get; set; }
+ public double A { get; set; }
+ public double B { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<RML> RMLS { get; set; }
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.Context.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.Context.cs
index a7a534dea..366561053 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.Context.cs
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.Context.cs
@@ -82,8 +82,8 @@ namespace Tango.DAL.Remote.DB
public virtual DbSet<SEGMENT> SEGMENTS { get; set; }
public virtual DbSet<SPOOL_TYPES> SPOOL_TYPES { get; set; }
public virtual DbSet<SYNC_CONFIGURATIONS> SYNC_CONFIGURATIONS { get; set; }
+ public virtual DbSet<TECH_CONTROLLERS> TECH_CONTROLLERS { get; set; }
public virtual DbSet<TECH_DISPENSERS> TECH_DISPENSERS { get; set; }
- public virtual DbSet<TECH_HEATERS> TECH_HEATERS { get; set; }
public virtual DbSet<TECH_IOS> TECH_IOS { get; set; }
public virtual DbSet<TECH_MONITORS> TECH_MONITORS { get; set; }
public virtual DbSet<TECH_MOTORS> TECH_MOTORS { get; set; }
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
index 17c9fc49d..739e2f6dc 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
@@ -24,7 +24,7 @@
<Property Name="GUID" Type="varchar" MaxLength="36" Nullable="false" />
<Property Name="LAST_UPDATED" Type="datetime2" Precision="3" Nullable="false" />
<Property Name="DELETED" Type="bit" Nullable="false" />
- <Property Name="ADDRESS_STRING" Type="nvarchar" MaxLength="100" Nullable="false" />
+ <Property Name="ADDRESS_STRING" Type="nvarchar" MaxLength="100" />
<Property Name="LOCALITY" Type="nvarchar" MaxLength="56" />
<Property Name="COUNTRY" Type="nvarchar" MaxLength="50" />
<Property Name="CITY" Type="nvarchar" MaxLength="30" />
@@ -208,10 +208,10 @@
<Property Name="GUID" Type="varchar" MaxLength="36" Nullable="false" />
<Property Name="LAST_UPDATED" Type="datetime2" Precision="3" Nullable="false" />
<Property Name="DELETED" Type="bit" Nullable="false" />
- <Property Name="FIRST_NAME" Type="nvarchar" MaxLength="50" Nullable="false" />
- <Property Name="LAST_NAME" Type="nvarchar" MaxLength="50" Nullable="false" />
- <Property Name="FULL_NAME" Type="nvarchar" MaxLength="50" Nullable="false" />
- <Property Name="EMAIL" Type="nvarchar" MaxLength="50" Nullable="false" />
+ <Property Name="FIRST_NAME" Type="nvarchar" MaxLength="50" />
+ <Property Name="LAST_NAME" Type="nvarchar" MaxLength="50" />
+ <Property Name="FULL_NAME" Type="nvarchar" MaxLength="50" />
+ <Property Name="EMAIL" Type="nvarchar" MaxLength="50" />
<Property Name="PHONE_NUMBER" Type="nvarchar" MaxLength="50" />
<Property Name="FAX" Type="nvarchar" MaxLength="50" />
</EntityType>
@@ -593,7 +593,10 @@
<Property Name="ID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="GUID" Type="varchar" MaxLength="36" Nullable="false" />
<Property Name="LAST_UPDATED" Type="datetime2" Precision="3" Nullable="false" />
- <Property Name="COLOR" Type="int" Nullable="false" />
+ <Property Name="NAME" Type="varchar" MaxLength="100" Nullable="false" />
+ <Property Name="L" Type="float" Nullable="false" />
+ <Property Name="A" Type="float" Nullable="false" />
+ <Property Name="B" Type="float" Nullable="false" />
</EntityType>
<EntityType Name="MEDIA_CONDITIONS">
<Key>
@@ -781,7 +784,7 @@
<Property Name="TABLE_NAME" Type="varchar" MaxLength="100" Nullable="false" />
<Property Name="SYNC_TYPE" Type="int" Nullable="false" />
</EntityType>
- <EntityType Name="TECH_DISPENSERS">
+ <EntityType Name="TECH_CONTROLLERS">
<Key>
<PropertyRef Name="ID" />
</Key>
@@ -791,8 +794,11 @@
<Property Name="CODE" Type="int" Nullable="false" />
<Property Name="NAME" Type="varchar" MaxLength="100" Nullable="false" />
<Property Name="DESCRIPTION" Type="varchar" MaxLength="100" Nullable="false" />
+ <Property Name="MIN" Type="float" Nullable="false" />
+ <Property Name="MAX" Type="float" Nullable="false" />
+ <Property Name="UNITS" Type="nvarchar" MaxLength="50" Nullable="false" />
</EntityType>
- <EntityType Name="TECH_HEATERS">
+ <EntityType Name="TECH_DISPENSERS">
<Key>
<PropertyRef Name="ID" />
</Key>
@@ -871,6 +877,7 @@
<Property Name="ORGANIZATION_GUID" Type="varchar" MaxLength="36" Nullable="false" />
<Property Name="CONTACT_GUID" Type="varchar" MaxLength="36" Nullable="false" />
<Property Name="ADDRESS_GUID" Type="varchar" MaxLength="36" Nullable="false" />
+ <Property Name="LAST_LOGIN" Type="datetime2" Precision="3" />
</EntityType>
<EntityType Name="USERS_ROLES">
<Key>
@@ -1305,7 +1312,9 @@
</ReferentialConstraint>
</Association>
<Association Name="FK_JOBS_MACHINES">
- <End Role="MACHINES" Type="Self.MACHINES" Multiplicity="1" />
+ <End Role="MACHINES" Type="Self.MACHINES" Multiplicity="1">
+ <OnDelete Action="Cascade" />
+ </End>
<End Role="JOBS" Type="Self.JOBS" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="MACHINES">
@@ -1417,7 +1426,9 @@
</ReferentialConstraint>
</Association>
<Association Name="FK_MACHINES_CONFIGURATIONS">
- <End Role="CONFIGURATIONS" Type="Self.CONFIGURATIONS" Multiplicity="1" />
+ <End Role="CONFIGURATIONS" Type="Self.CONFIGURATIONS" Multiplicity="1">
+ <OnDelete Action="Cascade" />
+ </End>
<End Role="MACHINES" Type="Self.MACHINES" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="CONFIGURATIONS">
@@ -1697,7 +1708,9 @@
</ReferentialConstraint>
</Association>
<Association Name="FK_USERS_ADDRESSES">
- <End Role="ADDRESSES" Type="Self.ADDRESSES" Multiplicity="1" />
+ <End Role="ADDRESSES" Type="Self.ADDRESSES" Multiplicity="1">
+ <OnDelete Action="Cascade" />
+ </End>
<End Role="USERS" Type="Self.USERS" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="ADDRESSES">
@@ -1709,7 +1722,9 @@
</ReferentialConstraint>
</Association>
<Association Name="FK_USERS_CONTACTS">
- <End Role="CONTACTS" Type="Self.CONTACTS" Multiplicity="1" />
+ <End Role="CONTACTS" Type="Self.CONTACTS" Multiplicity="1">
+ <OnDelete Action="Cascade" />
+ </End>
<End Role="USERS" Type="Self.USERS" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="CONTACTS">
@@ -1721,9 +1736,7 @@
</ReferentialConstraint>
</Association>
<Association Name="FK_USERS_ORGANIZATIONS">
- <End Role="ORGANIZATIONS" Type="Self.ORGANIZATIONS" Multiplicity="1">
- <OnDelete Action="Cascade" />
- </End>
+ <End Role="ORGANIZATIONS" Type="Self.ORGANIZATIONS" Multiplicity="1" />
<End Role="USERS" Type="Self.USERS" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="ORGANIZATIONS">
@@ -1820,8 +1833,8 @@
<EntitySet Name="SEGMENTS" EntityType="Self.SEGMENTS" Schema="dbo" store:Type="Tables" />
<EntitySet Name="SPOOL_TYPES" EntityType="Self.SPOOL_TYPES" Schema="dbo" store:Type="Tables" />
<EntitySet Name="SYNC_CONFIGURATIONS" EntityType="Self.SYNC_CONFIGURATIONS" Schema="dbo" store:Type="Tables" />
+ <EntitySet Name="TECH_CONTROLLERS" EntityType="Self.TECH_CONTROLLERS" Schema="dbo" store:Type="Tables" />
<EntitySet Name="TECH_DISPENSERS" EntityType="Self.TECH_DISPENSERS" Schema="dbo" store:Type="Tables" />
- <EntitySet Name="TECH_HEATERS" EntityType="Self.TECH_HEATERS" Schema="dbo" store:Type="Tables" />
<EntitySet Name="TECH_IOS" EntityType="Self.TECH_IOS" Schema="dbo" store:Type="Tables" />
<EntitySet Name="TECH_MONITORS" EntityType="Self.TECH_MONITORS" Schema="dbo" store:Type="Tables" />
<EntitySet Name="TECH_MOTORS" EntityType="Self.TECH_MOTORS" Schema="dbo" store:Type="Tables" />
@@ -2164,8 +2177,8 @@
<EntitySet Name="SEGMENTS" EntityType="RemoteModel.SEGMENT" />
<EntitySet Name="SPOOL_TYPES" EntityType="RemoteModel.SPOOL_TYPES" />
<EntitySet Name="SYNC_CONFIGURATIONS" EntityType="RemoteModel.SYNC_CONFIGURATIONS" />
+ <EntitySet Name="TECH_CONTROLLERS" EntityType="RemoteModel.TECH_CONTROLLERS" />
<EntitySet Name="TECH_DISPENSERS" EntityType="RemoteModel.TECH_DISPENSERS" />
- <EntitySet Name="TECH_HEATERS" EntityType="RemoteModel.TECH_HEATERS" />
<EntitySet Name="TECH_IOS" EntityType="RemoteModel.TECH_IOS" />
<EntitySet Name="TECH_MONITORS" EntityType="RemoteModel.TECH_MONITORS" />
<EntitySet Name="TECH_MOTORS" EntityType="RemoteModel.TECH_MOTORS" />
@@ -2466,7 +2479,7 @@
<Property Name="GUID" Type="String" Nullable="false" MaxLength="36" FixedLength="false" Unicode="false" />
<Property Name="LAST_UPDATED" Type="DateTime" Nullable="false" Precision="3" />
<Property Name="DELETED" Type="Boolean" Nullable="false" />
- <Property Name="ADDRESS_STRING" Type="String" Nullable="false" MaxLength="100" FixedLength="false" Unicode="true" />
+ <Property Name="ADDRESS_STRING" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
<Property Name="LOCALITY" Type="String" MaxLength="56" FixedLength="false" Unicode="true" />
<Property Name="COUNTRY" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
<Property Name="CITY" Type="String" MaxLength="30" FixedLength="false" Unicode="true" />
@@ -2679,10 +2692,10 @@
<Property Name="GUID" Type="String" Nullable="false" MaxLength="36" FixedLength="false" Unicode="false" />
<Property Name="LAST_UPDATED" Type="DateTime" Nullable="false" Precision="3" />
<Property Name="DELETED" Type="Boolean" Nullable="false" />
- <Property Name="FIRST_NAME" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
- <Property Name="LAST_NAME" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
- <Property Name="FULL_NAME" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
- <Property Name="EMAIL" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
+ <Property Name="FIRST_NAME" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
+ <Property Name="LAST_NAME" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
+ <Property Name="FULL_NAME" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
+ <Property Name="EMAIL" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
<Property Name="PHONE_NUMBER" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
<Property Name="FAX" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
<NavigationProperty Name="ORGANIZATIONS" Relationship="RemoteModel.FK_ORGANIZATIONS_CONTACTS" FromRole="CONTACT" ToRole="ORGANIZATION" />
@@ -3128,7 +3141,10 @@
<Property Name="ID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="GUID" Type="String" Nullable="false" MaxLength="36" FixedLength="false" Unicode="false" />
<Property Name="LAST_UPDATED" Type="DateTime" Nullable="false" Precision="3" />
- <Property Name="COLOR" Type="Int32" Nullable="false" />
+ <Property Name="NAME" Type="String" Nullable="false" MaxLength="100" FixedLength="false" Unicode="false" />
+ <Property Name="L" Type="Double" Nullable="false" />
+ <Property Name="A" Type="Double" Nullable="false" />
+ <Property Name="B" Type="Double" Nullable="false" />
<NavigationProperty Name="RMLS" Relationship="RemoteModel.FK_RML_MEDIA_COLORS" FromRole="MEDIA_COLORS" ToRole="RML" />
</EntityType>
<EntityType Name="MEDIA_CONDITIONS">
@@ -3348,7 +3364,7 @@
<Property Name="TABLE_NAME" Type="String" Nullable="false" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="SYNC_TYPE" Type="Int32" Nullable="false" />
</EntityType>
- <EntityType Name="TECH_DISPENSERS">
+ <EntityType Name="TECH_CONTROLLERS">
<Key>
<PropertyRef Name="ID" />
</Key>
@@ -3358,8 +3374,11 @@
<Property Name="CODE" Type="Int32" Nullable="false" />
<Property Name="NAME" Type="String" Nullable="false" MaxLength="100" FixedLength="false" Unicode="false" />
<Property Name="DESCRIPTION" Type="String" Nullable="false" MaxLength="100" FixedLength="false" Unicode="false" />
+ <Property Name="MIN" Type="Double" Nullable="false" />
+ <Property Name="MAX" Type="Double" Nullable="false" />
+ <Property Name="UNITS" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
</EntityType>
- <EntityType Name="TECH_HEATERS">
+ <EntityType Name="TECH_DISPENSERS">
<Key>
<PropertyRef Name="ID" />
</Key>
@@ -3438,6 +3457,7 @@
<Property Name="ORGANIZATION_GUID" Type="String" Nullable="false" MaxLength="36" FixedLength="false" Unicode="false" />
<Property Name="CONTACT_GUID" Type="String" Nullable="false" MaxLength="36" FixedLength="false" Unicode="false" />
<Property Name="ADDRESS_GUID" Type="String" Nullable="false" MaxLength="36" FixedLength="false" Unicode="false" />
+ <Property Name="LAST_LOGIN" Type="DateTime" Precision="3" />
<NavigationProperty Name="ADDRESS" Relationship="RemoteModel.FK_USERS_ADDRESSES" FromRole="USER" ToRole="ADDRESS" />
<NavigationProperty Name="CONTACT" Relationship="RemoteModel.FK_USERS_CONTACTS" FromRole="USER" ToRole="CONTACT" />
<NavigationProperty Name="JOBS" Relationship="RemoteModel.FK_JOBS_USERS" FromRole="USER" ToRole="JOB" />
@@ -3498,7 +3518,9 @@
</ReferentialConstraint>
</Association>
<Association Name="FK_USERS_ADDRESSES">
- <End Type="RemoteModel.ADDRESS" Role="ADDRESS" Multiplicity="1" />
+ <End Type="RemoteModel.ADDRESS" Role="ADDRESS" Multiplicity="1">
+ <OnDelete Action="Cascade" />
+ </End>
<End Type="RemoteModel.USER" Role="USER" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="ADDRESS">
@@ -3738,7 +3760,9 @@
</ReferentialConstraint>
</Association>
<Association Name="FK_MACHINES_CONFIGURATIONS">
- <End Type="RemoteModel.CONFIGURATION" Role="CONFIGURATION" Multiplicity="1" />
+ <End Type="RemoteModel.CONFIGURATION" Role="CONFIGURATION" Multiplicity="1">
+ <OnDelete Action="Cascade" />
+ </End>
<End Type="RemoteModel.MACHINE" Role="MACHINE" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="CONFIGURATION">
@@ -3776,7 +3800,9 @@
</ReferentialConstraint>
</Association>
<Association Name="FK_USERS_CONTACTS">
- <End Type="RemoteModel.CONTACT" Role="CONTACT" Multiplicity="1" />
+ <End Type="RemoteModel.CONTACT" Role="CONTACT" Multiplicity="1">
+ <OnDelete Action="Cascade" />
+ </End>
<End Type="RemoteModel.USER" Role="USER" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="CONTACT">
@@ -4006,7 +4032,9 @@
</ReferentialConstraint>
</Association>
<Association Name="FK_JOBS_MACHINES">
- <End Type="RemoteModel.MACHINE" Role="MACHINE" Multiplicity="1" />
+ <End Type="RemoteModel.MACHINE" Role="MACHINE" Multiplicity="1">
+ <OnDelete Action="Cascade" />
+ </End>
<End Type="RemoteModel.JOB" Role="JOB" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="MACHINE">
@@ -4244,9 +4272,7 @@
</ReferentialConstraint>
</Association>
<Association Name="FK_USERS_ORGANIZATIONS">
- <End Type="RemoteModel.ORGANIZATION" Role="ORGANIZATION" Multiplicity="1">
- <OnDelete Action="Cascade" />
- </End>
+ <End Type="RemoteModel.ORGANIZATION" Role="ORGANIZATION" Multiplicity="1" />
<End Type="RemoteModel.USER" Role="USER" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="ORGANIZATION">
@@ -4971,7 +4997,10 @@
<EntitySetMapping Name="MEDIA_COLORS">
<EntityTypeMapping TypeName="RemoteModel.MEDIA_COLORS">
<MappingFragment StoreEntitySet="MEDIA_COLORS">
- <ScalarProperty Name="COLOR" ColumnName="COLOR" />
+ <ScalarProperty Name="B" ColumnName="B" />
+ <ScalarProperty Name="A" ColumnName="A" />
+ <ScalarProperty Name="L" ColumnName="L" />
+ <ScalarProperty Name="NAME" ColumnName="NAME" />
<ScalarProperty Name="LAST_UPDATED" ColumnName="LAST_UPDATED" />
<ScalarProperty Name="GUID" ColumnName="GUID" />
<ScalarProperty Name="ID" ColumnName="ID" />
@@ -5178,9 +5207,12 @@
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
- <EntitySetMapping Name="TECH_DISPENSERS">
- <EntityTypeMapping TypeName="RemoteModel.TECH_DISPENSERS">
- <MappingFragment StoreEntitySet="TECH_DISPENSERS">
+ <EntitySetMapping Name="TECH_CONTROLLERS">
+ <EntityTypeMapping TypeName="RemoteModel.TECH_CONTROLLERS">
+ <MappingFragment StoreEntitySet="TECH_CONTROLLERS">
+ <ScalarProperty Name="UNITS" ColumnName="UNITS" />
+ <ScalarProperty Name="MAX" ColumnName="MAX" />
+ <ScalarProperty Name="MIN" ColumnName="MIN" />
<ScalarProperty Name="DESCRIPTION" ColumnName="DESCRIPTION" />
<ScalarProperty Name="NAME" ColumnName="NAME" />
<ScalarProperty Name="CODE" ColumnName="CODE" />
@@ -5190,9 +5222,9 @@
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
- <EntitySetMapping Name="TECH_HEATERS">
- <EntityTypeMapping TypeName="RemoteModel.TECH_HEATERS">
- <MappingFragment StoreEntitySet="TECH_HEATERS">
+ <EntitySetMapping Name="TECH_DISPENSERS">
+ <EntityTypeMapping TypeName="RemoteModel.TECH_DISPENSERS">
+ <MappingFragment StoreEntitySet="TECH_DISPENSERS">
<ScalarProperty Name="DESCRIPTION" ColumnName="DESCRIPTION" />
<ScalarProperty Name="NAME" ColumnName="NAME" />
<ScalarProperty Name="CODE" ColumnName="CODE" />
@@ -5264,6 +5296,7 @@
<EntitySetMapping Name="USERS">
<EntityTypeMapping TypeName="RemoteModel.USER">
<MappingFragment StoreEntitySet="USERS">
+ <ScalarProperty Name="LAST_LOGIN" ColumnName="LAST_LOGIN" />
<ScalarProperty Name="ADDRESS_GUID" ColumnName="ADDRESS_GUID" />
<ScalarProperty Name="CONTACT_GUID" ColumnName="CONTACT_GUID" />
<ScalarProperty Name="ORGANIZATION_GUID" ColumnName="ORGANIZATION_GUID" />
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
index 5301bbb1f..0ab9b672b 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
@@ -5,72 +5,72 @@
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram DiagramId="f9ae01d708754bbd997add25a4bacc79" Name="Diagram1">
- <EntityTypeShape EntityType="RemoteModel.ACTION_TYPES" Width="1.5" PointX="8" PointY="6.25" />
- <EntityTypeShape EntityType="RemoteModel.ADDRESS" Width="1.5" PointX="3.5" PointY="43.25" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_DISPLAY_PANEL_VERSIONS" Width="1.5" PointX="3.5" PointY="65.75" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_FIRMWARE_VERSIONS" Width="1.5" PointX="3.5" PointY="47.5" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_OS_VERSIONS" Width="1.5" PointX="3.5" PointY="50.375" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_VERSIONS" Width="1.5" PointX="3.5" PointY="59.875" />
- <EntityTypeShape EntityType="RemoteModel.BRUSH_STOPS" Width="1.5" PointX="14.75" PointY="9.625" />
- <EntityTypeShape EntityType="RemoteModel.CARTRIDGE_TYPES" Width="1.5" PointX="5.75" PointY="32.625" />
- <EntityTypeShape EntityType="RemoteModel.CAT" Width="1.5" PointX="8.25" PointY="19.125" />
- <EntityTypeShape EntityType="RemoteModel.CCT" Width="1.5" PointX="5.25" PointY="26.125" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS" Width="1.5" PointX="12.5" PointY="4" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_SPACES" Width="1.5" PointX="10.25" PointY="5.75" />
- <EntityTypeShape EntityType="RemoteModel.CONFIGURATION" Width="1.5" PointX="5.75" PointY="55" />
- <EntityTypeShape EntityType="RemoteModel.CONTACT" Width="1.5" PointX="3.5" PointY="39.125" />
- <EntityTypeShape EntityType="RemoteModel.DISPENSER_TYPES" Width="1.5" PointX="5.75" PointY="6.75" />
- <EntityTypeShape EntityType="RemoteModel.EMBEDDED_FIRMWARE_VERSIONS" Width="1.5" PointX="3.5" PointY="57" />
- <EntityTypeShape EntityType="RemoteModel.EMBEDDED_SOFTWARE_VERSIONS" Width="1.5" PointX="3.5" PointY="62.875" />
- <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES" Width="1.5" PointX="8" PointY="36.125" />
- <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES_ACTIONS" Width="1.5" PointX="10.25" PointY="35.25" />
- <EntityTypeShape EntityType="RemoteModel.FIBER_SHAPES" Width="1.5" PointX="0.75" PointY="28.75" />
- <EntityTypeShape EntityType="RemoteModel.FIBER_SYNTHS" Width="1.5" PointX="0.75" PointY="25.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCER_TYPES" Width="1.5" PointX="3.5" PointY="35.625" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCERS" Width="1.5" PointX="5.75" PointY="50.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTOR_TYPES" Width="1.5" PointX="8.5" PointY="46.625" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTORS" Width="1.5" PointX="10.75" PointY="49.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROL_TYPES" Width="1.5" PointX="9.5" PointY="59.625" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROLS" Width="1.5" PointX="11.75" PointY="55.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_VERSIONS" Width="1.5" PointX="3.5" PointY="53.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDER_TYPES" Width="1.5" PointX="6.5" PointY="61.625" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDERS" Width="1.5" PointX="8.75" PointY="55.5" />
- <EntityTypeShape EntityType="RemoteModel.IDS_PACK_FORMULAS" Width="1.5" PointX="5.75" PointY="45.25" />
- <EntityTypeShape EntityType="RemoteModel.IDS_PACKS" Width="1.5" PointX="8" PointY="39.625" />
- <EntityTypeShape EntityType="RemoteModel.JOB_RUNS" Width="1.5" PointX="12.5" PointY="15.125" />
- <EntityTypeShape EntityType="RemoteModel.JOB" Width="1.5" PointX="10.25" PointY="11.5" />
- <EntityTypeShape EntityType="RemoteModel.LINEAR_MASS_DENSITY_UNITS" Width="1.5" PointX="0.75" PointY="16.625" />
- <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES" Width="1.5" PointX="3" PointY="23.125" />
- <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES_RMLS" Width="1.5" PointX="5.25" PointY="18.375" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_STUDIO_VERSIONS" Width="1.5" PointX="10.25" PointY="31" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_VERSIONS" Width="1.5" PointX="5.75" PointY="35.75" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE" Width="1.5" PointX="8" PointY="49.875" />
- <EntityTypeShape EntityType="RemoteModel.MACHINES_CONFIGURATIONS" Width="1.5" PointX="13.25" PointY="52" />
- <EntityTypeShape EntityType="RemoteModel.MACHINES_EVENTS" Width="1.5" PointX="10.25" PointY="38.875" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_COLORS" Width="1.5" PointX="0.75" PointY="23.125" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_CONDITIONS" Width="1.5" PointX="0.75" PointY="9.375" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_MATERIALS" Width="1.5" PointX="0.75" PointY="12.25" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_PURPOSES" Width="1.5" PointX="0.75" PointY="20.25" />
- <EntityTypeShape EntityType="RemoteModel.MID_TANK_TYPES" Width="1.5" PointX="5.75" PointY="65.5" />
- <EntityTypeShape EntityType="RemoteModel.ORGANIZATION" Width="1.5" PointX="5.75" PointY="41.5" />
- <EntityTypeShape EntityType="RemoteModel.PERMISSION" Width="1.5" PointX="13" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES" Width="1.5" PointX="7.5" PointY="13" />
- <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES_GROUPS" Width="1.5" PointX="5.25" PointY="14.25" />
- <EntityTypeShape EntityType="RemoteModel.RML" Width="1.5" PointX="3" PointY="13.75" />
- <EntityTypeShape EntityType="RemoteModel.ROLE" Width="1.5" PointX="8" PointY="9.625" />
- <EntityTypeShape EntityType="RemoteModel.ROLES_PERMISSIONS" Width="1.5" PointX="15.25" PointY="5.75" />
- <EntityTypeShape EntityType="RemoteModel.SEGMENT" Width="1.5" PointX="12.5" PointY="11.625" />
- <EntityTypeShape EntityType="RemoteModel.SPOOL_TYPES" Width="1.5" PointX="8" PointY="31.75" />
- <EntityTypeShape EntityType="RemoteModel.SYNC_CONFIGURATIONS" Width="1.5" PointX="0.75" PointY="2.5" />
- <EntityTypeShape EntityType="RemoteModel.TECH_DISPENSERS" Width="1.5" PointX="2.75" PointY="2.5" />
- <EntityTypeShape EntityType="RemoteModel.TECH_HEATERS" Width="1.5" PointX="0.75" PointY="5.5" />
- <EntityTypeShape EntityType="RemoteModel.TECH_IOS" Width="1.5" PointX="2.75" PointY="5.5" />
- <EntityTypeShape EntityType="RemoteModel.TECH_MONITORS" Width="1.5" PointX="4.75" PointY="2.5" />
- <EntityTypeShape EntityType="RemoteModel.TECH_MOTORS" Width="1.5" PointX="6.75" PointY="2.5" />
- <EntityTypeShape EntityType="RemoteModel.TECH_VALVES" Width="1.5" PointX="2.75" PointY="9.5" />
- <EntityTypeShape EntityType="RemoteModel.USER" Width="1.5" PointX="8" PointY="26.875" />
- <EntityTypeShape EntityType="RemoteModel.USERS_ROLES" Width="1.5" PointX="10.25" PointY="27.625" />
- <EntityTypeShape EntityType="RemoteModel.WINDING_METHODS" Width="1.5" PointX="8" PointY="23.75" />
+ <EntityTypeShape EntityType="RemoteModel.ACTION_TYPES" Width="1.5" PointX="9" PointY="74.5" />
+ <EntityTypeShape EntityType="RemoteModel.ADDRESS" Width="1.5" PointX="3.5" PointY="57.375" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_DISPLAY_PANEL_VERSIONS" Width="1.5" PointX="3.5" PointY="45.75" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_FIRMWARE_VERSIONS" Width="1.5" PointX="3.5" PointY="54.5" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_OS_VERSIONS" Width="1.5" PointX="3.5" PointY="42.75" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_VERSIONS" Width="1.5" PointX="3.5" PointY="39.875" />
+ <EntityTypeShape EntityType="RemoteModel.BRUSH_STOPS" Width="1.5" PointX="14.75" PointY="11.125" />
+ <EntityTypeShape EntityType="RemoteModel.CARTRIDGE_TYPES" Width="1.5" PointX="8.75" PointY="67.25" />
+ <EntityTypeShape EntityType="RemoteModel.CAT" Width="1.5" PointX="8.25" PointY="17.25" />
+ <EntityTypeShape EntityType="RemoteModel.CCT" Width="1.5" PointX="5.25" PointY="31.5" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS" Width="1.5" PointX="12.5" PointY="2.5" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_SPACES" Width="1.5" PointX="10.25" PointY="4.25" />
+ <EntityTypeShape EntityType="RemoteModel.CONFIGURATION" Width="1.5" PointX="5.75" PointY="43.75" />
+ <EntityTypeShape EntityType="RemoteModel.CONTACT" Width="1.5" PointX="3.5" PointY="61.625" />
+ <EntityTypeShape EntityType="RemoteModel.DISPENSER_TYPES" Width="1.5" PointX="8.75" PointY="61.625" />
+ <EntityTypeShape EntityType="RemoteModel.EMBEDDED_FIRMWARE_VERSIONS" Width="1.5" PointX="3.5" PointY="48.625" />
+ <EntityTypeShape EntityType="RemoteModel.EMBEDDED_SOFTWARE_VERSIONS" Width="1.5" PointX="3.5" PointY="51.5" />
+ <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES" Width="1.5" PointX="9" PointY="70.5" />
+ <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES_ACTIONS" Width="1.5" PointX="11.25" PointY="70.5" />
+ <EntityTypeShape EntityType="RemoteModel.FIBER_SHAPES" Width="1.5" PointX="0.75" PointY="21.5" />
+ <EntityTypeShape EntityType="RemoteModel.FIBER_SYNTHS" Width="1.5" PointX="0.75" PointY="10.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCER_TYPES" Width="1.5" PointX="6.5" PointY="69.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCERS" Width="1.5" PointX="8.75" PointY="40.125" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTOR_TYPES" Width="1.5" PointX="3.5" PointY="27.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTORS" Width="1.5" PointX="5.75" PointY="36.125" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROL_TYPES" Width="1.5" PointX="8.5" PointY="44.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROLS" Width="1.5" PointX="10.75" PointY="30.125" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_VERSIONS" Width="1.5" PointX="3.5" PointY="36.125" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDER_TYPES" Width="1.5" PointX="6.5" PointY="55.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDERS" Width="1.5" PointX="8.75" PointY="36.375" />
+ <EntityTypeShape EntityType="RemoteModel.IDS_PACK_FORMULAS" Width="1.5" PointX="8.75" PointY="58.25" />
+ <EntityTypeShape EntityType="RemoteModel.IDS_PACKS" Width="1.5" PointX="11" PointY="36.125" />
+ <EntityTypeShape EntityType="RemoteModel.JOB_RUNS" Width="1.5" PointX="12.5" PointY="9.875" />
+ <EntityTypeShape EntityType="RemoteModel.JOB" Width="1.5" PointX="10.25" PointY="9.625" />
+ <EntityTypeShape EntityType="RemoteModel.LINEAR_MASS_DENSITY_UNITS" Width="1.5" PointX="0.75" PointY="27.25" />
+ <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES" Width="1.5" PointX="3" PointY="21.375" />
+ <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES_RMLS" Width="1.5" PointX="5.25" PointY="16.625" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_STUDIO_VERSIONS" Width="1.5" PointX="10.25" PointY="26" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_VERSIONS" Width="1.5" PointX="5.75" PointY="65.75" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE" Width="1.5" PointX="8" PointY="50.25" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINES_CONFIGURATIONS" Width="1.5" PointX="10.25" PointY="47.875" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINES_EVENTS" Width="1.5" PointX="11.25" PointY="41.125" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_COLORS" Width="1.5" PointX="0.75" PointY="7.25" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_CONDITIONS" Width="1.5" PointX="0.75" PointY="24.375" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_MATERIALS" Width="1.5" PointX="0.75" PointY="14.75" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_PURPOSES" Width="1.5" PointX="0.75" PointY="18.5" />
+ <EntityTypeShape EntityType="RemoteModel.MID_TANK_TYPES" Width="1.5" PointX="8.75" PointY="55.125" />
+ <EntityTypeShape EntityType="RemoteModel.ORGANIZATION" Width="1.5" PointX="5.75" PointY="59.75" />
+ <EntityTypeShape EntityType="RemoteModel.PERMISSION" Width="1.5" PointX="11" PointY="18.125" />
+ <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES" Width="1.5" PointX="7.5" PointY="11.25" />
+ <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES_GROUPS" Width="1.5" PointX="5.25" PointY="12.5" />
+ <EntityTypeShape EntityType="RemoteModel.RML" Width="1.5" PointX="3" PointY="12" />
+ <EntityTypeShape EntityType="RemoteModel.ROLE" Width="1.5" PointX="11" PointY="22" />
+ <EntityTypeShape EntityType="RemoteModel.ROLES_PERMISSIONS" Width="1.5" PointX="13.25" PointY="22.125" />
+ <EntityTypeShape EntityType="RemoteModel.SEGMENT" Width="1.5" PointX="12.5" PointY="13.125" />
+ <EntityTypeShape EntityType="RemoteModel.SPOOL_TYPES" Width="1.5" PointX="8" PointY="22" />
+ <EntityTypeShape EntityType="RemoteModel.SYNC_CONFIGURATIONS" Width="1.5" PointX="0.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_CONTROLLERS" Width="1.5" PointX="2.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_DISPENSERS" Width="1.5" PointX="4.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_IOS" Width="1.5" PointX="2.75" PointY="4.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_MONITORS" Width="1.5" PointX="4.75" PointY="3.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_MOTORS" Width="1.5" PointX="6.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_VALVES" Width="1.5" PointX="6.75" PointY="4.75" />
+ <EntityTypeShape EntityType="RemoteModel.USER" Width="1.5" PointX="8" PointY="29.125" />
+ <EntityTypeShape EntityType="RemoteModel.USERS_ROLES" Width="1.5" PointX="13.25" PointY="30" />
+ <EntityTypeShape EntityType="RemoteModel.WINDING_METHODS" Width="1.5" PointX="8" PointY="26" />
<AssociationConnector Association="RemoteModel.FK_EVENTS_ACTIONS_ACTIONS" />
<AssociationConnector Association="RemoteModel.FK_ORGANIZATIONS_ADDRESSES" />
<AssociationConnector Association="RemoteModel.FK_USERS_ADDRESSES" />
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/TECH_HEATERS.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/TECH_CONTROLLERS.cs
index b37a0c5a1..d5e2119a4 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/TECH_HEATERS.cs
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/TECH_CONTROLLERS.cs
@@ -12,7 +12,7 @@ namespace Tango.DAL.Remote.DB
using System;
using System.Collections.Generic;
- public partial class TECH_HEATERS
+ public partial class TECH_CONTROLLERS
{
public int ID { get; set; }
public string GUID { get; set; }
@@ -20,5 +20,8 @@ namespace Tango.DAL.Remote.DB
public int CODE { get; set; }
public string NAME { get; set; }
public string DESCRIPTION { get; set; }
+ public double MIN { get; set; }
+ public double MAX { get; set; }
+ public string UNITS { get; set; }
}
}
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/USER.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/USER.cs
index 28dc2a2b8..6f4c40811 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/USER.cs
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/USER.cs
@@ -32,6 +32,7 @@ namespace Tango.DAL.Remote.DB
public string ORGANIZATION_GUID { get; set; }
public string CONTACT_GUID { get; set; }
public string ADDRESS_GUID { get; set; }
+ public Nullable<System.DateTime> LAST_LOGIN { get; set; }
public virtual ADDRESS ADDRESS { get; set; }
public virtual CONTACT CONTACT { get; set; }
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/Tango.DAL.Remote.csproj b/Software/Visual_Studio/Tango.DAL.Remote/Tango.DAL.Remote.csproj
index 57bcc0bb3..83c839310 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/Tango.DAL.Remote.csproj
+++ b/Software/Visual_Studio/Tango.DAL.Remote/Tango.DAL.Remote.csproj
@@ -26,7 +26,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -251,10 +251,10 @@
<Compile Include="DB\SYNC_CONFIGURATIONS.cs">
<DependentUpon>RemoteADO.tt</DependentUpon>
</Compile>
- <Compile Include="DB\TECH_DISPENSERS.cs">
+ <Compile Include="DB\TECH_CONTROLLERS.cs">
<DependentUpon>RemoteADO.tt</DependentUpon>
</Compile>
- <Compile Include="DB\TECH_HEATERS.cs">
+ <Compile Include="DB\TECH_DISPENSERS.cs">
<DependentUpon>RemoteADO.tt</DependentUpon>
</Compile>
<Compile Include="DB\TECH_IOS.cs">
diff --git a/Software/Visual_Studio/Tango.DragAndDrop/Tango.DragAndDrop.csproj b/Software/Visual_Studio/Tango.DragAndDrop/Tango.DragAndDrop.csproj
index 98de232af..608795117 100644
--- a/Software/Visual_Studio/Tango.DragAndDrop/Tango.DragAndDrop.csproj
+++ b/Software/Visual_Studio/Tango.DragAndDrop/Tango.DragAndDrop.csproj
@@ -33,7 +33,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>..\Build\Debug\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Editors/StringExtensions.cs b/Software/Visual_Studio/Tango.Editors/StringExtensions.cs
deleted file mode 100644
index 0f5923512..000000000
--- a/Software/Visual_Studio/Tango.Editors/StringExtensions.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-
-/// <exclude/>
-/// <summary>
-/// A collection of <see cref="String"/> extension methods.
-/// </summary>
-internal static class StringExtensions
-{
- private static Regex titleRegEx;
-
- /// <summary>
- /// Initializes the <see cref="StringExtensions"/> class.
- /// </summary>
- static StringExtensions()
- {
- titleRegEx = new Regex(@"
- (?<=[A-Z])(?=[A-Z][a-z]) |
- (?<=[^A-Z])(?=[A-Z]) |
- (?<=[A-Za-z])(?=[^A-Za-z])", RegexOptions.IgnorePatternWhitespace);
- }
-
- /// <summary>
- /// Returns true if the string is not null or contains white spaces.
- /// </summary>
- /// <param name="str">The string.</param>
- /// <returns></returns>
- internal static bool IsValid(this String str)
- {
- return !String.IsNullOrWhiteSpace(str);
- }
-
- /// <summary>
- /// Determines whether the string contains an existing file path.
- /// </summary>
- /// <param name="path">The path.</param>
- /// <returns></returns>
- internal static bool IsFileExists(this String path)
- {
- return System.IO.File.Exists(path);
- }
-
- /// <summary>
- /// Determines whether the string is valid as a file system path.
- /// </summary>
- /// <param name="path">The path.</param>
- /// <returns></returns>
- internal static bool IsPathValid(this String path)
- {
- return path.IsValid() && path.IndexOfAny(System.IO.Path.GetInvalidPathChars()) == -1;
- }
-
- /// <summary>
- /// Returns a friendly file size of the file path.
- /// </summary>
- /// <param name="filePath">The file path.</param>
- /// <returns></returns>
- internal static String GetFileSizeString(this String filePath)
- {
- FileInfo f = new FileInfo(filePath);
- double length = f.Length;
-
- string[] sizes = { "B", "KB", "MB", "GB" };
- double len = length;
- int order = 0;
- while (len >= 1024 && order + 1 < sizes.Length)
- {
- order++;
- len = len / 1024;
- }
-
- // Adjust the format string to your preferences. For example "{0:0.#}{1}" would
- // show a single decimal place, and no space.
- return String.Format("{0:0.##} {1}", len, sizes[order]);
- }
-
- /// <summary>
- /// If string is a path, returns the file name.
- /// </summary>
- /// <param name="filePath">The file path.</param>
- /// <returns></returns>
- internal static String GetFileName(this String filePath)
- {
- return Path.GetFileName(filePath);
- }
-
- /// <summary>
- /// If string is a path, returns the file extension.
- /// </summary>
- /// <param name="filePath">The file path.</param>
- /// <returns></returns>
- internal static String GetFileExtension(this String filePath)
- {
- return Path.GetExtension(filePath);
- }
-
- internal static String ToTitle(this String str)
- {
- return titleRegEx.Replace(str, " ");
- }
-}
-
diff --git a/Software/Visual_Studio/Tango.Editors/Tango.Editors.csproj b/Software/Visual_Studio/Tango.Editors/Tango.Editors.csproj
index 217048e63..02a18d94f 100644
--- a/Software/Visual_Studio/Tango.Editors/Tango.Editors.csproj
+++ b/Software/Visual_Studio/Tango.Editors/Tango.Editors.csproj
@@ -30,7 +30,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -76,7 +76,6 @@
<Compile Include="ParameterItem.cs" />
<Compile Include="ParameterItemAttribute.cs" />
<Compile Include="ParameterItemMode.cs" />
- <Compile Include="StringExtensions.cs" />
<Compile Include="UIElementExtension.cs" />
<Compile Include="UIHelper.cs" />
<Compile Include="UndoRedoStatesProviderBase.cs" />
@@ -109,7 +108,7 @@
<Compile Include="Converters\StringFormatConverter.cs" />
<Compile Include="Converters\TransformPointToPointConverter.cs" />
<Compile Include="CustomScrollViewer.cs" />
- <Compile Include="DependencyObjectExtensions.cs" />
+ <None Include="DependencyObjectExtensions.cs" />
<Compile Include="ElementCreationEventArgs.cs" />
<Compile Include="ElementEditor.cs" />
<Compile Include="ElementEditorConfiguration.cs" />
@@ -166,5 +165,11 @@
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Tango.Core\Tango.Core.csproj">
+ <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project>
+ <Name>Tango.Core</Name>
+ </ProjectReference>
+ </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs
index 98d82df00..e6ad97427 100644
--- a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs
+++ b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs
@@ -42,6 +42,7 @@ namespace Tango.Emulations.Emulators
private List<DigitalPin> _digitalOutputPinsStates;
private List<DigitalPin> _digitalInputPinsStates;
private LogManager LogManager = LogManager.Default;
+ private List<ValueComponentState> _componentsStates;
#region Constructors
@@ -74,6 +75,7 @@ namespace Tango.Emulations.Emulators
_dispenserJoggingRequestCodes = new List<int>();
_dispenserHomingRequestCodes = new List<int>();
_digitalOutputPinsStates = new List<DigitalPin>();
+ _componentsStates = new List<ValueComponentState>();
var adapter = ObservablesEntitiesAdapter.Instance;
adapter.Initialize();
@@ -88,6 +90,15 @@ namespace Tango.Emulations.Emulators
Port = x.Port,
}).ToList();
+ foreach (var item in adapter.TechControllers)
+ {
+ _componentsStates.Add(new ValueComponentState()
+ {
+ Component = (ValueComponent)item.Code,
+ Value = item.Min
+ });
+ }
+
ResetGraphFactors();
}
@@ -164,6 +175,9 @@ namespace Tango.Emulations.Emulators
case MessageType.UploadProcessParametersRequest:
HandleUploadProcessParametersRequest(MessageFactory.ParseTangoMessageFromContainer<UploadProcessParametersRequest>(container));
break;
+ case MessageType.SetComponentValueRequest:
+ HandleSetComponentValueRequest(MessageFactory.ParseTangoMessageFromContainer<SetComponentValueRequest>(container));
+ break;
}
}
@@ -173,6 +187,8 @@ namespace Tango.Emulations.Emulators
private void HandleCalculateRequest(TangoMessage<CalculateRequest> request)
{
+ LogManager.Log("Calculate request received " + Environment.NewLine + request.Message.ToJsonString());
+
Task.Factory.StartNew(() =>
{
var response = MessageFactory.CreateTangoMessage<CalculateResponse>(request.Container.Token);
@@ -212,17 +228,19 @@ namespace Tango.Emulations.Emulators
while (Transporter.State == TransportComponentState.Connected)
{
PushDiagnosticsResponse res = new PushDiagnosticsResponse();
+ DiagnosticsMonitors monitors = new DiagnosticsMonitors();
+ res.Monitors = monitors;
if (_diagnosticsRequest.PushSensors)
{
for (int i = 0; i < 10; i++)
{
value++;
- res.Dancer1Angle.Add((int)(150 + _graphAmplitude * Math.Sin(2 * 3.14 * ((int)_graphFrequency) * value)));
+ monitors.Dancer1Angle.Add((int)(150 + _graphAmplitude * Math.Sin(2 * 3.14 * ((int)_graphFrequency) * value)));
}
- res.Dancer2Angle.Add(Cursor.Position.Y);
- res.Dancer3Angle.Add(Cursor.Position.Y);
+ monitors.Dancer2Angle.Add(Cursor.Position.Y);
+ monitors.Dancer3Angle.Add(Cursor.Position.Y);
}
if (_diagnosticsRequest.PushMotors)
@@ -243,19 +261,20 @@ namespace Tango.Emulations.Emulators
dispenserFrequencies.Add(singleDispenser);
}
- res.DispensersMotorsFrequency.AddRange(dispenserFrequencies);
+ monitors.DispensersMotorsFrequency.AddRange(dispenserFrequencies);
- res.Dispenser1MotorFrequency.AddRange(dispenserFrequencies[0].Data);
- res.Dispenser2MotorFrequency.AddRange(dispenserFrequencies[1].Data);
- res.Dispenser3MotorFrequency.AddRange(dispenserFrequencies[2].Data);
- res.Dispenser4MotorFrequency.AddRange(dispenserFrequencies[3].Data);
- res.Dispenser5MotorFrequency.AddRange(dispenserFrequencies[4].Data);
- res.Dispenser6MotorFrequency.AddRange(dispenserFrequencies[5].Data);
- res.Dispenser7MotorFrequency.AddRange(dispenserFrequencies[6].Data);
- res.Dispenser8MotorFrequency.AddRange(dispenserFrequencies[7].Data);
+ monitors.Dispenser1MotorFrequency.AddRange(dispenserFrequencies[0].Data);
+ monitors.Dispenser2MotorFrequency.AddRange(dispenserFrequencies[1].Data);
+ monitors.Dispenser3MotorFrequency.AddRange(dispenserFrequencies[2].Data);
+ monitors.Dispenser4MotorFrequency.AddRange(dispenserFrequencies[3].Data);
+ monitors.Dispenser5MotorFrequency.AddRange(dispenserFrequencies[4].Data);
+ monitors.Dispenser6MotorFrequency.AddRange(dispenserFrequencies[5].Data);
+ monitors.Dispenser7MotorFrequency.AddRange(dispenserFrequencies[6].Data);
+ monitors.Dispenser8MotorFrequency.AddRange(dispenserFrequencies[7].Data);
}
res.DigitalPins.AddRange(_digitalOutputPinsStates.Concat(_digitalInputPinsStates));
+ res.ComponentsStates.AddRange(_componentsStates);
res.Version = "1.0.0.0";
res.VersionBuildDate = DateTime.Now.ToString();
@@ -529,7 +548,7 @@ namespace Tango.Emulations.Emulators
{
LogManager.Log("Upload process parameters request received: " + Environment.NewLine + request.Message.ToJsonString());
- Task.Factory.StartNew(() =>
+ Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
@@ -538,6 +557,38 @@ namespace Tango.Emulations.Emulators
});
}
+ private void HandleSetComponentValueRequest(TangoMessage<SetComponentValueRequest> request)
+ {
+ LogManager.Log("Set component value request received: " + Environment.NewLine + request.Message.ToJsonString());
+
+ var componentState = _componentsStates.SingleOrDefault(x => x.Component == request.Message.Component);
+
+ double startValue = componentState.Value;
+ double targetValue = request.Message.Value;
+
+ Transporter.SendResponse<SetComponentValueResponse>(new SetComponentValueResponse(), request.Container.Token);
+
+ Task.Factory.StartNew(() =>
+ {
+ if (targetValue > startValue)
+ {
+ while (componentState.Value < targetValue)
+ {
+ componentState.Value++;
+ Thread.Sleep(30);
+ }
+ }
+ else
+ {
+ while (componentState.Value > targetValue)
+ {
+ componentState.Value--;
+ Thread.Sleep(30);
+ }
+ }
+ });
+ }
+
#endregion
}
}
diff --git a/Software/Visual_Studio/Tango.Emulations/Tango.Emulations.csproj b/Software/Visual_Studio/Tango.Emulations/Tango.Emulations.csproj
index e2108143d..7d6de2aa0 100644
--- a/Software/Visual_Studio/Tango.Emulations/Tango.Emulations.csproj
+++ b/Software/Visual_Studio/Tango.Emulations/Tango.Emulations.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs
index e17f515cc..5dfc1a1f4 100644
--- a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs
+++ b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs
@@ -139,5 +139,12 @@ namespace Tango.Integration.Operation
/// <param name="request">The request.</param>
/// <returns></returns>
Task<ThreadAbortJoggingResponse> StopThreadJogging(ThreadAbortJoggingRequest request);
+
+ /// <summary>
+ /// Sets the specified component value.
+ /// </summary>
+ /// <param name="request">The request.</param>
+ /// <returns></returns>
+ Task<SetComponentValueResponse> SetComponentValue(SetComponentValueRequest request);
}
}
diff --git a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
index 4f7ebbbdd..e65b67e26 100644
--- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
+++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
@@ -473,6 +473,16 @@ namespace Tango.Integration.Operation
return await SendRequest<ThreadAbortJoggingRequest, ThreadAbortJoggingResponse>(request);
}
+ /// <summary>
+ /// Sets the specified component value.
+ /// </summary>
+ /// <param name="request">The request.</param>
+ /// <returns></returns>
+ public async Task<SetComponentValueResponse> SetComponentValue(SetComponentValueRequest request)
+ {
+ return await SendRequest<SetComponentValueRequest, SetComponentValueResponse>(request);
+ }
+
#endregion
}
}
diff --git a/Software/Visual_Studio/Tango.Integration/Services/ExternalBridgeScanner.cs b/Software/Visual_Studio/Tango.Integration/Services/ExternalBridgeScanner.cs
index c0d14d102..b8e9b2c6d 100644
--- a/Software/Visual_Studio/Tango.Integration/Services/ExternalBridgeScanner.cs
+++ b/Software/Visual_Studio/Tango.Integration/Services/ExternalBridgeScanner.cs
@@ -29,6 +29,7 @@ namespace Tango.Integration.Services
{
private Thread _tcpDiscoveryThread;
private Thread _usbDiscoveryThread;
+ private UdpClient _server;
private LogManager LogManager = LogManager.Default;
private ObservableCollection<IExternalBridgeClient> _availableMachines;
@@ -56,6 +57,7 @@ namespace Tango.Integration.Services
/// </summary>
public ExternalBridgeScanner()
{
+ _server = new UdpClient(SettingsManager.Default.Integration.ExternalBridgeServiceDiscoveryPort);
AvailableMachines = new ObservableCollection<IExternalBridgeClient>();
}
@@ -121,12 +123,10 @@ namespace Tango.Integration.Services
/// </summary>
private void TcpDiscoveryThreadMethod()
{
- var Server = new UdpClient(SettingsManager.Default.Integration.ExternalBridgeServiceDiscoveryPort);
-
while (!IsStarted)
{
var ClientEp = new IPEndPoint(IPAddress.Any, 0);
- var ClientRequestData = Server.Receive(ref ClientEp);
+ var ClientRequestData = _server.Receive(ref ClientEp);
ExternalBridgeUdpDiscoveryPacket packet = ExternalBridgeUdpDiscoveryPacket.Parser.ParseFrom(ClientRequestData);
@@ -144,8 +144,6 @@ namespace Tango.Integration.Services
Thread.Sleep(1000);
}
-
- Server.Close();
}
/// <summary>
diff --git a/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj b/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj
index a3eb43874..c5e27e7ef 100644
--- a/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj
+++ b/Software/Visual_Studio/Tango.Integration/Tango.Integration.csproj
@@ -24,7 +24,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Logging/Tango.Logging.csproj b/Software/Visual_Studio/Tango.Logging/Tango.Logging.csproj
index 53dede744..f1dd3307c 100644
--- a/Software/Visual_Studio/Tango.Logging/Tango.Logging.csproj
+++ b/Software/Visual_Studio/Tango.Logging/Tango.Logging.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.PMR/ColorLab/ColorSpace.cs b/Software/Visual_Studio/Tango.PMR/ColorLab/ColorSpace.cs
index 55a558e5a..24fe92f37 100644
--- a/Software/Visual_Studio/Tango.PMR/ColorLab/ColorSpace.cs
+++ b/Software/Visual_Studio/Tango.PMR/ColorLab/ColorSpace.cs
@@ -24,7 +24,7 @@ namespace Tango.PMR.ColorLab {
string.Concat(
"ChBDb2xvclNwYWNlLnByb3RvEhJUYW5nby5QTVIuQ29sb3JMYWIqQAoKQ29s",
"b3JTcGFjZRIKCgZWb2x1bWUQABIHCgNSR0IQARIICgRDTVlLEAISBwoDTEFC",
- "EAMSCgoGUGFudG9uEARCHgocY29tLnR3aW5lLnRhbmdvLnBtci5jb2xvcmxh",
+ "EAMSCgoGUEFOVE9OEARCHgocY29tLnR3aW5lLnRhbmdvLnBtci5jb2xvcmxh",
"YmIGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
@@ -39,7 +39,7 @@ namespace Tango.PMR.ColorLab {
[pbr::OriginalName("RGB")] Rgb = 1,
[pbr::OriginalName("CMYK")] Cmyk = 2,
[pbr::OriginalName("LAB")] Lab = 3,
- [pbr::OriginalName("Panton")] Panton = 4,
+ [pbr::OriginalName("PANTON")] Panton = 4,
}
#endregion
diff --git a/Software/Visual_Studio/Tango.PMR/ColorLab/ConversionInput.cs b/Software/Visual_Studio/Tango.PMR/ColorLab/ConversionInput.cs
index 20f133b7c..9678ca13e 100644
--- a/Software/Visual_Studio/Tango.PMR/ColorLab/ConversionInput.cs
+++ b/Software/Visual_Studio/Tango.PMR/ColorLab/ConversionInput.cs
@@ -23,18 +23,19 @@ namespace Tango.PMR.ColorLab {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
"ChVDb252ZXJzaW9uSW5wdXQucHJvdG8SElRhbmdvLlBNUi5Db2xvckxhYhoW",
- "SW5wdXRDb29yZGluYXRlcy5wcm90bxoQQ29sb3JTcGFjZS5wcm90byL5AQoP",
+ "SW5wdXRDb29yZGluYXRlcy5wcm90bxoQQ29sb3JTcGFjZS5wcm90byKeAgoP",
"Q29udmVyc2lvbklucHV0Eg8KB1RocmVhZEwYASABKAESDwoHVGhyZWFkQRgC",
"IAEoARIPCgdUaHJlYWRCGAMgASgBEjIKCkNvbG9yU3BhY2UYBCABKA4yHi5U",
"YW5nby5QTVIuQ29sb3JMYWIuQ29sb3JTcGFjZRI+ChBJbnB1dENvb3JkaW5h",
"dGVzGAUgASgLMiQuVGFuZ28uUE1SLkNvbG9yTGFiLklucHV0Q29vcmRpbmF0",
"ZXMSEwoLRm9yd2FyZERhdGEYBiABKAwSEwoLSW52ZXJzZURhdGEYByABKAwS",
- "FQoNU2VnbWVudExlbmd0aBgIIAEoAUIeChxjb20udHdpbmUudGFuZ28ucG1y",
- "LmNvbG9ybGFiYgZwcm90bzM="));
+ "FQoNU2VnbWVudExlbmd0aBgIIAEoARITCgtEZWx0YUNocm9tYRgJIAEoARIO",
+ "CgZEZWx0YUwYCiABKAFCHgocY29tLnR3aW5lLnRhbmdvLnBtci5jb2xvcmxh",
+ "YmIGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Tango.PMR.ColorLab.InputCoordinatesReflection.Descriptor, global::Tango.PMR.ColorLab.ColorSpaceReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
- new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.ColorLab.ConversionInput), global::Tango.PMR.ColorLab.ConversionInput.Parser, new[]{ "ThreadL", "ThreadA", "ThreadB", "ColorSpace", "InputCoordinates", "ForwardData", "InverseData", "SegmentLength" }, null, null, null)
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.ColorLab.ConversionInput), global::Tango.PMR.ColorLab.ConversionInput.Parser, new[]{ "ThreadL", "ThreadA", "ThreadB", "ColorSpace", "InputCoordinates", "ForwardData", "InverseData", "SegmentLength", "DeltaChroma", "DeltaL" }, null, null, null)
}));
}
#endregion
@@ -73,6 +74,8 @@ namespace Tango.PMR.ColorLab {
forwardData_ = other.forwardData_;
inverseData_ = other.inverseData_;
segmentLength_ = other.segmentLength_;
+ deltaChroma_ = other.deltaChroma_;
+ deltaL_ = other.deltaL_;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -168,6 +171,28 @@ namespace Tango.PMR.ColorLab {
}
}
+ /// <summary>Field number for the "DeltaChroma" field.</summary>
+ public const int DeltaChromaFieldNumber = 9;
+ private double deltaChroma_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double DeltaChroma {
+ get { return deltaChroma_; }
+ set {
+ deltaChroma_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "DeltaL" field.</summary>
+ public const int DeltaLFieldNumber = 10;
+ private double deltaL_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double DeltaL {
+ get { return deltaL_; }
+ set {
+ deltaL_ = value;
+ }
+ }
+
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as ConversionInput);
@@ -189,6 +214,8 @@ namespace Tango.PMR.ColorLab {
if (ForwardData != other.ForwardData) return false;
if (InverseData != other.InverseData) return false;
if (SegmentLength != other.SegmentLength) return false;
+ if (DeltaChroma != other.DeltaChroma) return false;
+ if (DeltaL != other.DeltaL) return false;
return true;
}
@@ -203,6 +230,8 @@ namespace Tango.PMR.ColorLab {
if (ForwardData.Length != 0) hash ^= ForwardData.GetHashCode();
if (InverseData.Length != 0) hash ^= InverseData.GetHashCode();
if (SegmentLength != 0D) hash ^= SegmentLength.GetHashCode();
+ if (DeltaChroma != 0D) hash ^= DeltaChroma.GetHashCode();
+ if (DeltaL != 0D) hash ^= DeltaL.GetHashCode();
return hash;
}
@@ -245,6 +274,14 @@ namespace Tango.PMR.ColorLab {
output.WriteRawTag(65);
output.WriteDouble(SegmentLength);
}
+ if (DeltaChroma != 0D) {
+ output.WriteRawTag(73);
+ output.WriteDouble(DeltaChroma);
+ }
+ if (DeltaL != 0D) {
+ output.WriteRawTag(81);
+ output.WriteDouble(DeltaL);
+ }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -274,6 +311,12 @@ namespace Tango.PMR.ColorLab {
if (SegmentLength != 0D) {
size += 1 + 8;
}
+ if (DeltaChroma != 0D) {
+ size += 1 + 8;
+ }
+ if (DeltaL != 0D) {
+ size += 1 + 8;
+ }
return size;
}
@@ -309,6 +352,12 @@ namespace Tango.PMR.ColorLab {
if (other.SegmentLength != 0D) {
SegmentLength = other.SegmentLength;
}
+ if (other.DeltaChroma != 0D) {
+ DeltaChroma = other.DeltaChroma;
+ }
+ if (other.DeltaL != 0D) {
+ DeltaL = other.DeltaL;
+ }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -354,6 +403,14 @@ namespace Tango.PMR.ColorLab {
SegmentLength = input.ReadDouble();
break;
}
+ case 73: {
+ DeltaChroma = input.ReadDouble();
+ break;
+ }
+ case 81: {
+ DeltaL = input.ReadDouble();
+ break;
+ }
}
}
}
diff --git a/Software/Visual_Studio/Tango.PMR/ColorLab/LiquidType.cs b/Software/Visual_Studio/Tango.PMR/ColorLab/LiquidType.cs
index e0465307b..736873fc8 100644
--- a/Software/Visual_Studio/Tango.PMR/ColorLab/LiquidType.cs
+++ b/Software/Visual_Studio/Tango.PMR/ColorLab/LiquidType.cs
@@ -22,10 +22,11 @@ namespace Tango.PMR.ColorLab {
static LiquidTypeReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "ChBMaXF1aWRUeXBlLnByb3RvEhJUYW5nby5QTVIuQ29sb3JMYWIqTgoKTGlx",
+ "ChBMaXF1aWRUeXBlLnByb3RvEhJUYW5nby5QTVIuQ29sb3JMYWIqZgoKTGlx",
"dWlkVHlwZRIICgRDeWFuEAASCwoHTWFnZW50YRABEgoKBlllbGxvdxACEgkK",
- "BUJsYWNrEAMSEgoOVHJhbnNwYXJlbnRJbmsQBEIeChxjb20udHdpbmUudGFu",
- "Z28ucG1yLmNvbG9ybGFiYgZwcm90bzM="));
+ "BUJsYWNrEAMSEgoOVHJhbnNwYXJlbnRJbmsQBBINCglMdWJyaWNhbnQQBRIH",
+ "CgNSZWQQB0IeChxjb20udHdpbmUudGFuZ28ucG1yLmNvbG9ybGFiYgZwcm90",
+ "bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.ColorLab.LiquidType), }, null));
@@ -40,6 +41,8 @@ namespace Tango.PMR.ColorLab {
[pbr::OriginalName("Yellow")] Yellow = 2,
[pbr::OriginalName("Black")] Black = 3,
[pbr::OriginalName("TransparentInk")] TransparentInk = 4,
+ [pbr::OriginalName("Lubricant")] Lubricant = 5,
+ [pbr::OriginalName("Red")] Red = 7,
}
#endregion
diff --git a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs
index 04fb2c1c6..6301c2d03 100644
--- a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs
+++ b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs
@@ -22,7 +22,7 @@ namespace Tango.PMR.Common {
static MessageTypeReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "ChFNZXNzYWdlVHlwZS5wcm90bxIQVGFuZ28uUE1SLkNvbW1vbiqEFwoLTWVz",
+ "ChFNZXNzYWdlVHlwZS5wcm90bxIQVGFuZ28uUE1SLkNvbW1vbirDFwoLTWVz",
"c2FnZVR5cGUSCAoETm9uZRAAEhQKEENhbGN1bGF0ZVJlcXVlc3QQAxIVChFD",
"YWxjdWxhdGVSZXNwb25zZRAEEhMKD1Byb2dyZXNzUmVxdWVzdBAFEhQKEFBy",
"b2dyZXNzUmVzcG9uc2UQBhIcChhTdHViQ2FydHJpZGdlUmVhZFJlcXVlc3QQ",
@@ -82,14 +82,15 @@ namespace Tango.PMR.Common {
"aWdpdGFsT3V0UmVzcG9uc2UQ4w8SGQoUVGhyZWFkSm9nZ2luZ1JlcXVlc3QQ",
"5A8SGgoVVGhyZWFkSm9nZ2luZ1Jlc3BvbnNlEOUPEh4KGVRocmVhZEFib3J0",
"Sm9nZ2luZ1JlcXVlc3QQ5g8SHwoaVGhyZWFkQWJvcnRKb2dnaW5nUmVzcG9u",
- "c2UQ5w8SDwoKSm9iUmVxdWVzdBC4FxIQCgtKb2JSZXNwb25zZRC5FxIUCg9B",
- "Ym9ydEpvYlJlcXVlc3QQuhcSFQoQQWJvcnRKb2JSZXNwb25zZRC7FxIjCh5V",
- "cGxvYWRQcm9jZXNzUGFyYW1ldGVyc1JlcXVlc3QQvBcSJAofVXBsb2FkUHJv",
- "Y2Vzc1BhcmFtZXRlcnNSZXNwb25zZRC9FxIUCg9EZWJ1Z0xvZ1JlcXVlc3QQ",
- "oB8SFQoQRGVidWdMb2dSZXNwb25zZRChHxInCiJVcGxvYWRIYXJkd2FyZUNv",
- "bmZpZ3VyYXRpb25SZXF1ZXN0EIgnEigKI1VwbG9hZEhhcmR3YXJlQ29uZmln",
- "dXJhdGlvblJlc3BvbnNlEIknQhwKGmNvbS50d2luZS50YW5nby5wbXIuY29t",
- "bW9uYgZwcm90bzM="));
+ "c2UQ5w8SHQoYU2V0Q29tcG9uZW50VmFsdWVSZXF1ZXN0EOgPEh4KGVNldENv",
+ "bXBvbmVudFZhbHVlUmVzcG9uc2UQ6Q8SDwoKSm9iUmVxdWVzdBC4FxIQCgtK",
+ "b2JSZXNwb25zZRC5FxIUCg9BYm9ydEpvYlJlcXVlc3QQuhcSFQoQQWJvcnRK",
+ "b2JSZXNwb25zZRC7FxIjCh5VcGxvYWRQcm9jZXNzUGFyYW1ldGVyc1JlcXVl",
+ "c3QQvBcSJAofVXBsb2FkUHJvY2Vzc1BhcmFtZXRlcnNSZXNwb25zZRC9FxIU",
+ "Cg9EZWJ1Z0xvZ1JlcXVlc3QQoB8SFQoQRGVidWdMb2dSZXNwb25zZRChHxIn",
+ "CiJVcGxvYWRIYXJkd2FyZUNvbmZpZ3VyYXRpb25SZXF1ZXN0EIgnEigKI1Vw",
+ "bG9hZEhhcmR3YXJlQ29uZmlndXJhdGlvblJlc3BvbnNlEIknQhwKGmNvbS50",
+ "d2luZS50YW5nby5wbXIuY29tbW9uYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.Common.MessageType), }, null));
@@ -203,6 +204,8 @@ namespace Tango.PMR.Common {
[pbr::OriginalName("ThreadJoggingResponse")] ThreadJoggingResponse = 2021,
[pbr::OriginalName("ThreadAbortJoggingRequest")] ThreadAbortJoggingRequest = 2022,
[pbr::OriginalName("ThreadAbortJoggingResponse")] ThreadAbortJoggingResponse = 2023,
+ [pbr::OriginalName("SetComponentValueRequest")] SetComponentValueRequest = 2024,
+ [pbr::OriginalName("SetComponentValueResponse")] SetComponentValueResponse = 2025,
/// <summary>
///Printing
/// </summary>
diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/DiagnosticsMonitors.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/DiagnosticsMonitors.cs
new file mode 100644
index 000000000..3f558f414
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/DiagnosticsMonitors.cs
@@ -0,0 +1,1017 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: DiagnosticsMonitors.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.Diagnostics {
+
+ /// <summary>Holder for reflection information generated from DiagnosticsMonitors.proto</summary>
+ public static partial class DiagnosticsMonitorsReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for DiagnosticsMonitors.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static DiagnosticsMonitorsReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "ChlEaWFnbm9zdGljc01vbml0b3JzLnByb3RvEhVUYW5nby5QTVIuRGlhZ25v",
+ "c3RpY3MaEURvdWJsZUFycmF5LnByb3RvIpQJChNEaWFnbm9zdGljc01vbml0",
+ "b3JzEhQKDERhbmNlcjFBbmdsZRgBIAMoARIUCgxEYW5jZXIyQW5nbGUYAiAD",
+ "KAESFAoMRGFuY2VyM0FuZ2xlGAMgAygBEhwKFEZlZWRlck1vdG9yRnJlcXVl",
+ "bmN5GAQgAygBEhIKCkRyeWVyTW90b3IYBSADKAESEwoLUG9sbGVyTW90b3IY",
+ "BiADKAESEwoLV2luZGVyTW90b3IYByADKAESEgoKU2NyZXdNb3RvchgIIAMo",
+ "ARITCgtUaHJlYWRTcGVlZBgJIAMoARIYChBNaXhlclRlbXBlcmF0dXJlGAog",
+ "AygBEhwKFEhlYWRab25lMVRlbXBlcmF0dXJlGAsgAygBEhwKFEhlYWRab25l",
+ "MlRlbXBlcmF0dXJlGAwgAygBEhwKFEhlYWRab25lM1RlbXBlcmF0dXJlGA0g",
+ "AygBEhMKC0hlYWRBaXJGbG93GA4gAygBEhUKDUZlZWRlclRlbnNpb24YDyAD",
+ "KAESFQoNUHVsbGVyVGVuc2lvbhgQIAMoARIdChVEcnllclpvbmUxVGVtcGVy",
+ "YXR1cmUYESADKAESHQoVRHJ5ZXJab25lMlRlbXBlcmF0dXJlGBIgAygBEh0K",
+ "FURyeWVyWm9uZTNUZW1wZXJhdHVyZRgTIAMoARIUCgxEcnllckFpckZsb3cY",
+ "FCADKAESFQoNV2luZGVyVGVuc2lvbhgVIAMoARJFChlEaXNwZW5zZXJzTW90",
+ "b3JzRnJlcXVlbmN5GBYgAygLMiIuVGFuZ28uUE1SLkRpYWdub3N0aWNzLkRv",
+ "dWJsZUFycmF5EkUKGURpc3BlbnNlcnNBbmd1bGFyRW5jb2RlcnMYFyADKAsy",
+ "Ii5UYW5nby5QTVIuRGlhZ25vc3RpY3MuRG91YmxlQXJyYXkSRQoZRGlzcGVu",
+ "c2Vyc0xpbmVhclBvc2l0aW9ucxgYIAMoCzIiLlRhbmdvLlBNUi5EaWFnbm9z",
+ "dGljcy5Eb3VibGVBcnJheRI+ChJEaXNwZW5zZXJzUHJlc3N1cmUYGSADKAsy",
+ "Ii5UYW5nby5QTVIuRGlhZ25vc3RpY3MuRG91YmxlQXJyYXkSFwoPTWlkVGFu",
+ "a1ByZXNzdXJlGBogAygBEhsKE0ZpbHRlckRlbHRhUHJlc3N1cmUYGyADKAES",
+ "GgoSQ2hpbGxlclRlbXBlcmF0dXJlGBwgAygBEiAKGERpc3BlbnNlcjFNb3Rv",
+ "ckZyZXF1ZW5jeRgdIAMoARIgChhEaXNwZW5zZXIyTW90b3JGcmVxdWVuY3kY",
+ "HiADKAESIAoYRGlzcGVuc2VyM01vdG9yRnJlcXVlbmN5GB8gAygBEiAKGERp",
+ "c3BlbnNlcjRNb3RvckZyZXF1ZW5jeRggIAMoARIgChhEaXNwZW5zZXI1TW90",
+ "b3JGcmVxdWVuY3kYISADKAESIAoYRGlzcGVuc2VyNk1vdG9yRnJlcXVlbmN5",
+ "GCIgAygBEiAKGERpc3BlbnNlcjdNb3RvckZyZXF1ZW5jeRgjIAMoARIgChhE",
+ "aXNwZW5zZXI4TW90b3JGcmVxdWVuY3kYJCADKAFCIQofY29tLnR3aW5lLnRh",
+ "bmdvLnBtci5kaWFnbm9zdGljc2IGcHJvdG8z"));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { global::Tango.PMR.Diagnostics.DoubleArrayReflection.Descriptor, },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.DiagnosticsMonitors), global::Tango.PMR.Diagnostics.DiagnosticsMonitors.Parser, new[]{ "Dancer1Angle", "Dancer2Angle", "Dancer3Angle", "FeederMotorFrequency", "DryerMotor", "PollerMotor", "WinderMotor", "ScrewMotor", "ThreadSpeed", "MixerTemperature", "HeadZone1Temperature", "HeadZone2Temperature", "HeadZone3Temperature", "HeadAirFlow", "FeederTension", "PullerTension", "DryerZone1Temperature", "DryerZone2Temperature", "DryerZone3Temperature", "DryerAirFlow", "WinderTension", "DispensersMotorsFrequency", "DispensersAngularEncoders", "DispensersLinearPositions", "DispensersPressure", "MidTankPressure", "FilterDeltaPressure", "ChillerTemperature", "Dispenser1MotorFrequency", "Dispenser2MotorFrequency", "Dispenser3MotorFrequency", "Dispenser4MotorFrequency", "Dispenser5MotorFrequency", "Dispenser6MotorFrequency", "Dispenser7MotorFrequency", "Dispenser8MotorFrequency" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class DiagnosticsMonitors : pb::IMessage<DiagnosticsMonitors> {
+ private static readonly pb::MessageParser<DiagnosticsMonitors> _parser = new pb::MessageParser<DiagnosticsMonitors>(() => new DiagnosticsMonitors());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<DiagnosticsMonitors> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Diagnostics.DiagnosticsMonitorsReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DiagnosticsMonitors() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DiagnosticsMonitors(DiagnosticsMonitors other) : this() {
+ dancer1Angle_ = other.dancer1Angle_.Clone();
+ dancer2Angle_ = other.dancer2Angle_.Clone();
+ dancer3Angle_ = other.dancer3Angle_.Clone();
+ feederMotorFrequency_ = other.feederMotorFrequency_.Clone();
+ dryerMotor_ = other.dryerMotor_.Clone();
+ pollerMotor_ = other.pollerMotor_.Clone();
+ winderMotor_ = other.winderMotor_.Clone();
+ screwMotor_ = other.screwMotor_.Clone();
+ threadSpeed_ = other.threadSpeed_.Clone();
+ mixerTemperature_ = other.mixerTemperature_.Clone();
+ headZone1Temperature_ = other.headZone1Temperature_.Clone();
+ headZone2Temperature_ = other.headZone2Temperature_.Clone();
+ headZone3Temperature_ = other.headZone3Temperature_.Clone();
+ headAirFlow_ = other.headAirFlow_.Clone();
+ feederTension_ = other.feederTension_.Clone();
+ pullerTension_ = other.pullerTension_.Clone();
+ dryerZone1Temperature_ = other.dryerZone1Temperature_.Clone();
+ dryerZone2Temperature_ = other.dryerZone2Temperature_.Clone();
+ dryerZone3Temperature_ = other.dryerZone3Temperature_.Clone();
+ dryerAirFlow_ = other.dryerAirFlow_.Clone();
+ winderTension_ = other.winderTension_.Clone();
+ dispensersMotorsFrequency_ = other.dispensersMotorsFrequency_.Clone();
+ dispensersAngularEncoders_ = other.dispensersAngularEncoders_.Clone();
+ dispensersLinearPositions_ = other.dispensersLinearPositions_.Clone();
+ dispensersPressure_ = other.dispensersPressure_.Clone();
+ midTankPressure_ = other.midTankPressure_.Clone();
+ filterDeltaPressure_ = other.filterDeltaPressure_.Clone();
+ chillerTemperature_ = other.chillerTemperature_.Clone();
+ dispenser1MotorFrequency_ = other.dispenser1MotorFrequency_.Clone();
+ dispenser2MotorFrequency_ = other.dispenser2MotorFrequency_.Clone();
+ dispenser3MotorFrequency_ = other.dispenser3MotorFrequency_.Clone();
+ dispenser4MotorFrequency_ = other.dispenser4MotorFrequency_.Clone();
+ dispenser5MotorFrequency_ = other.dispenser5MotorFrequency_.Clone();
+ dispenser6MotorFrequency_ = other.dispenser6MotorFrequency_.Clone();
+ dispenser7MotorFrequency_ = other.dispenser7MotorFrequency_.Clone();
+ dispenser8MotorFrequency_ = other.dispenser8MotorFrequency_.Clone();
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public DiagnosticsMonitors Clone() {
+ return new DiagnosticsMonitors(this);
+ }
+
+ /// <summary>Field number for the "Dancer1Angle" field.</summary>
+ public const int Dancer1AngleFieldNumber = 1;
+ private static readonly pb::FieldCodec<double> _repeated_dancer1Angle_codec
+ = pb::FieldCodec.ForDouble(10);
+ private readonly pbc::RepeatedField<double> dancer1Angle_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dancer 1 (Min = 0, Max = 255, PPF = 10)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dancer1Angle {
+ get { return dancer1Angle_; }
+ }
+
+ /// <summary>Field number for the "Dancer2Angle" field.</summary>
+ public const int Dancer2AngleFieldNumber = 2;
+ private static readonly pb::FieldCodec<double> _repeated_dancer2Angle_codec
+ = pb::FieldCodec.ForDouble(18);
+ private readonly pbc::RepeatedField<double> dancer2Angle_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dancer 2 (Min = 0, Max = 1200, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dancer2Angle {
+ get { return dancer2Angle_; }
+ }
+
+ /// <summary>Field number for the "Dancer3Angle" field.</summary>
+ public const int Dancer3AngleFieldNumber = 3;
+ private static readonly pb::FieldCodec<double> _repeated_dancer3Angle_codec
+ = pb::FieldCodec.ForDouble(26);
+ private readonly pbc::RepeatedField<double> dancer3Angle_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dancer 3 (Min = 0, Max = 1200, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dancer3Angle {
+ get { return dancer3Angle_; }
+ }
+
+ /// <summary>Field number for the "FeederMotorFrequency" field.</summary>
+ public const int FeederMotorFrequencyFieldNumber = 4;
+ private static readonly pb::FieldCodec<double> _repeated_feederMotorFrequency_codec
+ = pb::FieldCodec.ForDouble(34);
+ private readonly pbc::RepeatedField<double> feederMotorFrequency_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Feeder Motor (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> FeederMotorFrequency {
+ get { return feederMotorFrequency_; }
+ }
+
+ /// <summary>Field number for the "DryerMotor" field.</summary>
+ public const int DryerMotorFieldNumber = 5;
+ private static readonly pb::FieldCodec<double> _repeated_dryerMotor_codec
+ = pb::FieldCodec.ForDouble(42);
+ private readonly pbc::RepeatedField<double> dryerMotor_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dryer Motor (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> DryerMotor {
+ get { return dryerMotor_; }
+ }
+
+ /// <summary>Field number for the "PollerMotor" field.</summary>
+ public const int PollerMotorFieldNumber = 6;
+ private static readonly pb::FieldCodec<double> _repeated_pollerMotor_codec
+ = pb::FieldCodec.ForDouble(50);
+ private readonly pbc::RepeatedField<double> pollerMotor_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Poller Motor (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> PollerMotor {
+ get { return pollerMotor_; }
+ }
+
+ /// <summary>Field number for the "WinderMotor" field.</summary>
+ public const int WinderMotorFieldNumber = 7;
+ private static readonly pb::FieldCodec<double> _repeated_winderMotor_codec
+ = pb::FieldCodec.ForDouble(58);
+ private readonly pbc::RepeatedField<double> winderMotor_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Winder Motor (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> WinderMotor {
+ get { return winderMotor_; }
+ }
+
+ /// <summary>Field number for the "ScrewMotor" field.</summary>
+ public const int ScrewMotorFieldNumber = 8;
+ private static readonly pb::FieldCodec<double> _repeated_screwMotor_codec
+ = pb::FieldCodec.ForDouble(66);
+ private readonly pbc::RepeatedField<double> screwMotor_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Screw Motor (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> ScrewMotor {
+ get { return screwMotor_; }
+ }
+
+ /// <summary>Field number for the "ThreadSpeed" field.</summary>
+ public const int ThreadSpeedFieldNumber = 9;
+ private static readonly pb::FieldCodec<double> _repeated_threadSpeed_codec
+ = pb::FieldCodec.ForDouble(74);
+ private readonly pbc::RepeatedField<double> threadSpeed_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Thread Speed (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> ThreadSpeed {
+ get { return threadSpeed_; }
+ }
+
+ /// <summary>Field number for the "MixerTemperature" field.</summary>
+ public const int MixerTemperatureFieldNumber = 10;
+ private static readonly pb::FieldCodec<double> _repeated_mixerTemperature_codec
+ = pb::FieldCodec.ForDouble(82);
+ private readonly pbc::RepeatedField<double> mixerTemperature_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Mixer (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> MixerTemperature {
+ get { return mixerTemperature_; }
+ }
+
+ /// <summary>Field number for the "HeadZone1Temperature" field.</summary>
+ public const int HeadZone1TemperatureFieldNumber = 11;
+ private static readonly pb::FieldCodec<double> _repeated_headZone1Temperature_codec
+ = pb::FieldCodec.ForDouble(90);
+ private readonly pbc::RepeatedField<double> headZone1Temperature_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Head Zone 1 (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> HeadZone1Temperature {
+ get { return headZone1Temperature_; }
+ }
+
+ /// <summary>Field number for the "HeadZone2Temperature" field.</summary>
+ public const int HeadZone2TemperatureFieldNumber = 12;
+ private static readonly pb::FieldCodec<double> _repeated_headZone2Temperature_codec
+ = pb::FieldCodec.ForDouble(98);
+ private readonly pbc::RepeatedField<double> headZone2Temperature_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Head Zone 2 (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> HeadZone2Temperature {
+ get { return headZone2Temperature_; }
+ }
+
+ /// <summary>Field number for the "HeadZone3Temperature" field.</summary>
+ public const int HeadZone3TemperatureFieldNumber = 13;
+ private static readonly pb::FieldCodec<double> _repeated_headZone3Temperature_codec
+ = pb::FieldCodec.ForDouble(106);
+ private readonly pbc::RepeatedField<double> headZone3Temperature_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Head Zone 3 (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> HeadZone3Temperature {
+ get { return headZone3Temperature_; }
+ }
+
+ /// <summary>Field number for the "HeadAirFlow" field.</summary>
+ public const int HeadAirFlowFieldNumber = 14;
+ private static readonly pb::FieldCodec<double> _repeated_headAirFlow_codec
+ = pb::FieldCodec.ForDouble(114);
+ private readonly pbc::RepeatedField<double> headAirFlow_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Head Air Flow (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> HeadAirFlow {
+ get { return headAirFlow_; }
+ }
+
+ /// <summary>Field number for the "FeederTension" field.</summary>
+ public const int FeederTensionFieldNumber = 15;
+ private static readonly pb::FieldCodec<double> _repeated_feederTension_codec
+ = pb::FieldCodec.ForDouble(122);
+ private readonly pbc::RepeatedField<double> feederTension_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Feeder Tension (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> FeederTension {
+ get { return feederTension_; }
+ }
+
+ /// <summary>Field number for the "PullerTension" field.</summary>
+ public const int PullerTensionFieldNumber = 16;
+ private static readonly pb::FieldCodec<double> _repeated_pullerTension_codec
+ = pb::FieldCodec.ForDouble(130);
+ private readonly pbc::RepeatedField<double> pullerTension_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Puller Tension (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> PullerTension {
+ get { return pullerTension_; }
+ }
+
+ /// <summary>Field number for the "DryerZone1Temperature" field.</summary>
+ public const int DryerZone1TemperatureFieldNumber = 17;
+ private static readonly pb::FieldCodec<double> _repeated_dryerZone1Temperature_codec
+ = pb::FieldCodec.ForDouble(138);
+ private readonly pbc::RepeatedField<double> dryerZone1Temperature_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dryer Zone 1 (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> DryerZone1Temperature {
+ get { return dryerZone1Temperature_; }
+ }
+
+ /// <summary>Field number for the "DryerZone2Temperature" field.</summary>
+ public const int DryerZone2TemperatureFieldNumber = 18;
+ private static readonly pb::FieldCodec<double> _repeated_dryerZone2Temperature_codec
+ = pb::FieldCodec.ForDouble(146);
+ private readonly pbc::RepeatedField<double> dryerZone2Temperature_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dryer Zone 2 (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> DryerZone2Temperature {
+ get { return dryerZone2Temperature_; }
+ }
+
+ /// <summary>Field number for the "DryerZone3Temperature" field.</summary>
+ public const int DryerZone3TemperatureFieldNumber = 19;
+ private static readonly pb::FieldCodec<double> _repeated_dryerZone3Temperature_codec
+ = pb::FieldCodec.ForDouble(154);
+ private readonly pbc::RepeatedField<double> dryerZone3Temperature_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dryer Zone 3 (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> DryerZone3Temperature {
+ get { return dryerZone3Temperature_; }
+ }
+
+ /// <summary>Field number for the "DryerAirFlow" field.</summary>
+ public const int DryerAirFlowFieldNumber = 20;
+ private static readonly pb::FieldCodec<double> _repeated_dryerAirFlow_codec
+ = pb::FieldCodec.ForDouble(162);
+ private readonly pbc::RepeatedField<double> dryerAirFlow_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dryer Air Flow (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> DryerAirFlow {
+ get { return dryerAirFlow_; }
+ }
+
+ /// <summary>Field number for the "WinderTension" field.</summary>
+ public const int WinderTensionFieldNumber = 21;
+ private static readonly pb::FieldCodec<double> _repeated_winderTension_codec
+ = pb::FieldCodec.ForDouble(170);
+ private readonly pbc::RepeatedField<double> winderTension_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Winder Tension (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> WinderTension {
+ get { return winderTension_; }
+ }
+
+ /// <summary>Field number for the "DispensersMotorsFrequency" field.</summary>
+ public const int DispensersMotorsFrequencyFieldNumber = 22;
+ private static readonly pb::FieldCodec<global::Tango.PMR.Diagnostics.DoubleArray> _repeated_dispensersMotorsFrequency_codec
+ = pb::FieldCodec.ForMessage(178, global::Tango.PMR.Diagnostics.DoubleArray.Parser);
+ private readonly pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray> dispensersMotorsFrequency_ = new pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray>();
+ /// <summary>
+ ///Dispensers Motors (Min = 0, Max = 1080, PPF = 10) Channel Count = 8
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray> DispensersMotorsFrequency {
+ get { return dispensersMotorsFrequency_; }
+ }
+
+ /// <summary>Field number for the "DispensersAngularEncoders" field.</summary>
+ public const int DispensersAngularEncodersFieldNumber = 23;
+ private static readonly pb::FieldCodec<global::Tango.PMR.Diagnostics.DoubleArray> _repeated_dispensersAngularEncoders_codec
+ = pb::FieldCodec.ForMessage(186, global::Tango.PMR.Diagnostics.DoubleArray.Parser);
+ private readonly pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray> dispensersAngularEncoders_ = new pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray>();
+ /// <summary>
+ ///Dispensers Angular Encoders (Min = 0, Max = 100, PPF = 1) Channel Count = 8
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray> DispensersAngularEncoders {
+ get { return dispensersAngularEncoders_; }
+ }
+
+ /// <summary>Field number for the "DispensersLinearPositions" field.</summary>
+ public const int DispensersLinearPositionsFieldNumber = 24;
+ private static readonly pb::FieldCodec<global::Tango.PMR.Diagnostics.DoubleArray> _repeated_dispensersLinearPositions_codec
+ = pb::FieldCodec.ForMessage(194, global::Tango.PMR.Diagnostics.DoubleArray.Parser);
+ private readonly pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray> dispensersLinearPositions_ = new pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray>();
+ /// <summary>
+ ///Dispensers Linear Positions (Min = 0, Max = 100, PPF = 1) Channel Count = 8
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray> DispensersLinearPositions {
+ get { return dispensersLinearPositions_; }
+ }
+
+ /// <summary>Field number for the "DispensersPressure" field.</summary>
+ public const int DispensersPressureFieldNumber = 25;
+ private static readonly pb::FieldCodec<global::Tango.PMR.Diagnostics.DoubleArray> _repeated_dispensersPressure_codec
+ = pb::FieldCodec.ForMessage(202, global::Tango.PMR.Diagnostics.DoubleArray.Parser);
+ private readonly pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray> dispensersPressure_ = new pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray>();
+ /// <summary>
+ ///Dispensers Pressure (Min = 0, Max = 100, PPF = 1) Channel Count = 8
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray> DispensersPressure {
+ get { return dispensersPressure_; }
+ }
+
+ /// <summary>Field number for the "MidTankPressure" field.</summary>
+ public const int MidTankPressureFieldNumber = 26;
+ private static readonly pb::FieldCodec<double> _repeated_midTankPressure_codec
+ = pb::FieldCodec.ForDouble(210);
+ private readonly pbc::RepeatedField<double> midTankPressure_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Mid Tank Pressure (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> MidTankPressure {
+ get { return midTankPressure_; }
+ }
+
+ /// <summary>Field number for the "FilterDeltaPressure" field.</summary>
+ public const int FilterDeltaPressureFieldNumber = 27;
+ private static readonly pb::FieldCodec<double> _repeated_filterDeltaPressure_codec
+ = pb::FieldCodec.ForDouble(218);
+ private readonly pbc::RepeatedField<double> filterDeltaPressure_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Filter Delta Pressure (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> FilterDeltaPressure {
+ get { return filterDeltaPressure_; }
+ }
+
+ /// <summary>Field number for the "ChillerTemperature" field.</summary>
+ public const int ChillerTemperatureFieldNumber = 28;
+ private static readonly pb::FieldCodec<double> _repeated_chillerTemperature_codec
+ = pb::FieldCodec.ForDouble(226);
+ private readonly pbc::RepeatedField<double> chillerTemperature_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Chiller Temperature (Min = 0, Max = 100, PPF = 1)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> ChillerTemperature {
+ get { return chillerTemperature_; }
+ }
+
+ /// <summary>Field number for the "Dispenser1MotorFrequency" field.</summary>
+ public const int Dispenser1MotorFrequencyFieldNumber = 29;
+ private static readonly pb::FieldCodec<double> _repeated_dispenser1MotorFrequency_codec
+ = pb::FieldCodec.ForDouble(234);
+ private readonly pbc::RepeatedField<double> dispenser1MotorFrequency_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dispenser 1 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dispenser1MotorFrequency {
+ get { return dispenser1MotorFrequency_; }
+ }
+
+ /// <summary>Field number for the "Dispenser2MotorFrequency" field.</summary>
+ public const int Dispenser2MotorFrequencyFieldNumber = 30;
+ private static readonly pb::FieldCodec<double> _repeated_dispenser2MotorFrequency_codec
+ = pb::FieldCodec.ForDouble(242);
+ private readonly pbc::RepeatedField<double> dispenser2MotorFrequency_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dispenser 2 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dispenser2MotorFrequency {
+ get { return dispenser2MotorFrequency_; }
+ }
+
+ /// <summary>Field number for the "Dispenser3MotorFrequency" field.</summary>
+ public const int Dispenser3MotorFrequencyFieldNumber = 31;
+ private static readonly pb::FieldCodec<double> _repeated_dispenser3MotorFrequency_codec
+ = pb::FieldCodec.ForDouble(250);
+ private readonly pbc::RepeatedField<double> dispenser3MotorFrequency_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dispenser 3 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dispenser3MotorFrequency {
+ get { return dispenser3MotorFrequency_; }
+ }
+
+ /// <summary>Field number for the "Dispenser4MotorFrequency" field.</summary>
+ public const int Dispenser4MotorFrequencyFieldNumber = 32;
+ private static readonly pb::FieldCodec<double> _repeated_dispenser4MotorFrequency_codec
+ = pb::FieldCodec.ForDouble(258);
+ private readonly pbc::RepeatedField<double> dispenser4MotorFrequency_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dispenser 4 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dispenser4MotorFrequency {
+ get { return dispenser4MotorFrequency_; }
+ }
+
+ /// <summary>Field number for the "Dispenser5MotorFrequency" field.</summary>
+ public const int Dispenser5MotorFrequencyFieldNumber = 33;
+ private static readonly pb::FieldCodec<double> _repeated_dispenser5MotorFrequency_codec
+ = pb::FieldCodec.ForDouble(266);
+ private readonly pbc::RepeatedField<double> dispenser5MotorFrequency_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dispenser 5 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dispenser5MotorFrequency {
+ get { return dispenser5MotorFrequency_; }
+ }
+
+ /// <summary>Field number for the "Dispenser6MotorFrequency" field.</summary>
+ public const int Dispenser6MotorFrequencyFieldNumber = 34;
+ private static readonly pb::FieldCodec<double> _repeated_dispenser6MotorFrequency_codec
+ = pb::FieldCodec.ForDouble(274);
+ private readonly pbc::RepeatedField<double> dispenser6MotorFrequency_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dispenser 6 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dispenser6MotorFrequency {
+ get { return dispenser6MotorFrequency_; }
+ }
+
+ /// <summary>Field number for the "Dispenser7MotorFrequency" field.</summary>
+ public const int Dispenser7MotorFrequencyFieldNumber = 35;
+ private static readonly pb::FieldCodec<double> _repeated_dispenser7MotorFrequency_codec
+ = pb::FieldCodec.ForDouble(282);
+ private readonly pbc::RepeatedField<double> dispenser7MotorFrequency_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dispenser 7 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dispenser7MotorFrequency {
+ get { return dispenser7MotorFrequency_; }
+ }
+
+ /// <summary>Field number for the "Dispenser8MotorFrequency" field.</summary>
+ public const int Dispenser8MotorFrequencyFieldNumber = 36;
+ private static readonly pb::FieldCodec<double> _repeated_dispenser8MotorFrequency_codec
+ = pb::FieldCodec.ForDouble(290);
+ private readonly pbc::RepeatedField<double> dispenser8MotorFrequency_ = new pbc::RepeatedField<double>();
+ /// <summary>
+ ///Dispenser 8 Motor Frequency (Min = 0, Max = 1080, PPF = 10)
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> Dispenser8MotorFrequency {
+ get { return dispenser8MotorFrequency_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as DiagnosticsMonitors);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(DiagnosticsMonitors other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!dancer1Angle_.Equals(other.dancer1Angle_)) return false;
+ if(!dancer2Angle_.Equals(other.dancer2Angle_)) return false;
+ if(!dancer3Angle_.Equals(other.dancer3Angle_)) return false;
+ if(!feederMotorFrequency_.Equals(other.feederMotorFrequency_)) return false;
+ if(!dryerMotor_.Equals(other.dryerMotor_)) return false;
+ if(!pollerMotor_.Equals(other.pollerMotor_)) return false;
+ if(!winderMotor_.Equals(other.winderMotor_)) return false;
+ if(!screwMotor_.Equals(other.screwMotor_)) return false;
+ if(!threadSpeed_.Equals(other.threadSpeed_)) return false;
+ if(!mixerTemperature_.Equals(other.mixerTemperature_)) return false;
+ if(!headZone1Temperature_.Equals(other.headZone1Temperature_)) return false;
+ if(!headZone2Temperature_.Equals(other.headZone2Temperature_)) return false;
+ if(!headZone3Temperature_.Equals(other.headZone3Temperature_)) return false;
+ if(!headAirFlow_.Equals(other.headAirFlow_)) return false;
+ if(!feederTension_.Equals(other.feederTension_)) return false;
+ if(!pullerTension_.Equals(other.pullerTension_)) return false;
+ if(!dryerZone1Temperature_.Equals(other.dryerZone1Temperature_)) return false;
+ if(!dryerZone2Temperature_.Equals(other.dryerZone2Temperature_)) return false;
+ if(!dryerZone3Temperature_.Equals(other.dryerZone3Temperature_)) return false;
+ if(!dryerAirFlow_.Equals(other.dryerAirFlow_)) return false;
+ if(!winderTension_.Equals(other.winderTension_)) return false;
+ if(!dispensersMotorsFrequency_.Equals(other.dispensersMotorsFrequency_)) return false;
+ if(!dispensersAngularEncoders_.Equals(other.dispensersAngularEncoders_)) return false;
+ if(!dispensersLinearPositions_.Equals(other.dispensersLinearPositions_)) return false;
+ if(!dispensersPressure_.Equals(other.dispensersPressure_)) return false;
+ if(!midTankPressure_.Equals(other.midTankPressure_)) return false;
+ if(!filterDeltaPressure_.Equals(other.filterDeltaPressure_)) return false;
+ if(!chillerTemperature_.Equals(other.chillerTemperature_)) return false;
+ if(!dispenser1MotorFrequency_.Equals(other.dispenser1MotorFrequency_)) return false;
+ if(!dispenser2MotorFrequency_.Equals(other.dispenser2MotorFrequency_)) return false;
+ if(!dispenser3MotorFrequency_.Equals(other.dispenser3MotorFrequency_)) return false;
+ if(!dispenser4MotorFrequency_.Equals(other.dispenser4MotorFrequency_)) return false;
+ if(!dispenser5MotorFrequency_.Equals(other.dispenser5MotorFrequency_)) return false;
+ if(!dispenser6MotorFrequency_.Equals(other.dispenser6MotorFrequency_)) return false;
+ if(!dispenser7MotorFrequency_.Equals(other.dispenser7MotorFrequency_)) return false;
+ if(!dispenser8MotorFrequency_.Equals(other.dispenser8MotorFrequency_)) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= dancer1Angle_.GetHashCode();
+ hash ^= dancer2Angle_.GetHashCode();
+ hash ^= dancer3Angle_.GetHashCode();
+ hash ^= feederMotorFrequency_.GetHashCode();
+ hash ^= dryerMotor_.GetHashCode();
+ hash ^= pollerMotor_.GetHashCode();
+ hash ^= winderMotor_.GetHashCode();
+ hash ^= screwMotor_.GetHashCode();
+ hash ^= threadSpeed_.GetHashCode();
+ hash ^= mixerTemperature_.GetHashCode();
+ hash ^= headZone1Temperature_.GetHashCode();
+ hash ^= headZone2Temperature_.GetHashCode();
+ hash ^= headZone3Temperature_.GetHashCode();
+ hash ^= headAirFlow_.GetHashCode();
+ hash ^= feederTension_.GetHashCode();
+ hash ^= pullerTension_.GetHashCode();
+ hash ^= dryerZone1Temperature_.GetHashCode();
+ hash ^= dryerZone2Temperature_.GetHashCode();
+ hash ^= dryerZone3Temperature_.GetHashCode();
+ hash ^= dryerAirFlow_.GetHashCode();
+ hash ^= winderTension_.GetHashCode();
+ hash ^= dispensersMotorsFrequency_.GetHashCode();
+ hash ^= dispensersAngularEncoders_.GetHashCode();
+ hash ^= dispensersLinearPositions_.GetHashCode();
+ hash ^= dispensersPressure_.GetHashCode();
+ hash ^= midTankPressure_.GetHashCode();
+ hash ^= filterDeltaPressure_.GetHashCode();
+ hash ^= chillerTemperature_.GetHashCode();
+ hash ^= dispenser1MotorFrequency_.GetHashCode();
+ hash ^= dispenser2MotorFrequency_.GetHashCode();
+ hash ^= dispenser3MotorFrequency_.GetHashCode();
+ hash ^= dispenser4MotorFrequency_.GetHashCode();
+ hash ^= dispenser5MotorFrequency_.GetHashCode();
+ hash ^= dispenser6MotorFrequency_.GetHashCode();
+ hash ^= dispenser7MotorFrequency_.GetHashCode();
+ hash ^= dispenser8MotorFrequency_.GetHashCode();
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ dancer1Angle_.WriteTo(output, _repeated_dancer1Angle_codec);
+ dancer2Angle_.WriteTo(output, _repeated_dancer2Angle_codec);
+ dancer3Angle_.WriteTo(output, _repeated_dancer3Angle_codec);
+ feederMotorFrequency_.WriteTo(output, _repeated_feederMotorFrequency_codec);
+ dryerMotor_.WriteTo(output, _repeated_dryerMotor_codec);
+ pollerMotor_.WriteTo(output, _repeated_pollerMotor_codec);
+ winderMotor_.WriteTo(output, _repeated_winderMotor_codec);
+ screwMotor_.WriteTo(output, _repeated_screwMotor_codec);
+ threadSpeed_.WriteTo(output, _repeated_threadSpeed_codec);
+ mixerTemperature_.WriteTo(output, _repeated_mixerTemperature_codec);
+ headZone1Temperature_.WriteTo(output, _repeated_headZone1Temperature_codec);
+ headZone2Temperature_.WriteTo(output, _repeated_headZone2Temperature_codec);
+ headZone3Temperature_.WriteTo(output, _repeated_headZone3Temperature_codec);
+ headAirFlow_.WriteTo(output, _repeated_headAirFlow_codec);
+ feederTension_.WriteTo(output, _repeated_feederTension_codec);
+ pullerTension_.WriteTo(output, _repeated_pullerTension_codec);
+ dryerZone1Temperature_.WriteTo(output, _repeated_dryerZone1Temperature_codec);
+ dryerZone2Temperature_.WriteTo(output, _repeated_dryerZone2Temperature_codec);
+ dryerZone3Temperature_.WriteTo(output, _repeated_dryerZone3Temperature_codec);
+ dryerAirFlow_.WriteTo(output, _repeated_dryerAirFlow_codec);
+ winderTension_.WriteTo(output, _repeated_winderTension_codec);
+ dispensersMotorsFrequency_.WriteTo(output, _repeated_dispensersMotorsFrequency_codec);
+ dispensersAngularEncoders_.WriteTo(output, _repeated_dispensersAngularEncoders_codec);
+ dispensersLinearPositions_.WriteTo(output, _repeated_dispensersLinearPositions_codec);
+ dispensersPressure_.WriteTo(output, _repeated_dispensersPressure_codec);
+ midTankPressure_.WriteTo(output, _repeated_midTankPressure_codec);
+ filterDeltaPressure_.WriteTo(output, _repeated_filterDeltaPressure_codec);
+ chillerTemperature_.WriteTo(output, _repeated_chillerTemperature_codec);
+ dispenser1MotorFrequency_.WriteTo(output, _repeated_dispenser1MotorFrequency_codec);
+ dispenser2MotorFrequency_.WriteTo(output, _repeated_dispenser2MotorFrequency_codec);
+ dispenser3MotorFrequency_.WriteTo(output, _repeated_dispenser3MotorFrequency_codec);
+ dispenser4MotorFrequency_.WriteTo(output, _repeated_dispenser4MotorFrequency_codec);
+ dispenser5MotorFrequency_.WriteTo(output, _repeated_dispenser5MotorFrequency_codec);
+ dispenser6MotorFrequency_.WriteTo(output, _repeated_dispenser6MotorFrequency_codec);
+ dispenser7MotorFrequency_.WriteTo(output, _repeated_dispenser7MotorFrequency_codec);
+ dispenser8MotorFrequency_.WriteTo(output, _repeated_dispenser8MotorFrequency_codec);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += dancer1Angle_.CalculateSize(_repeated_dancer1Angle_codec);
+ size += dancer2Angle_.CalculateSize(_repeated_dancer2Angle_codec);
+ size += dancer3Angle_.CalculateSize(_repeated_dancer3Angle_codec);
+ size += feederMotorFrequency_.CalculateSize(_repeated_feederMotorFrequency_codec);
+ size += dryerMotor_.CalculateSize(_repeated_dryerMotor_codec);
+ size += pollerMotor_.CalculateSize(_repeated_pollerMotor_codec);
+ size += winderMotor_.CalculateSize(_repeated_winderMotor_codec);
+ size += screwMotor_.CalculateSize(_repeated_screwMotor_codec);
+ size += threadSpeed_.CalculateSize(_repeated_threadSpeed_codec);
+ size += mixerTemperature_.CalculateSize(_repeated_mixerTemperature_codec);
+ size += headZone1Temperature_.CalculateSize(_repeated_headZone1Temperature_codec);
+ size += headZone2Temperature_.CalculateSize(_repeated_headZone2Temperature_codec);
+ size += headZone3Temperature_.CalculateSize(_repeated_headZone3Temperature_codec);
+ size += headAirFlow_.CalculateSize(_repeated_headAirFlow_codec);
+ size += feederTension_.CalculateSize(_repeated_feederTension_codec);
+ size += pullerTension_.CalculateSize(_repeated_pullerTension_codec);
+ size += dryerZone1Temperature_.CalculateSize(_repeated_dryerZone1Temperature_codec);
+ size += dryerZone2Temperature_.CalculateSize(_repeated_dryerZone2Temperature_codec);
+ size += dryerZone3Temperature_.CalculateSize(_repeated_dryerZone3Temperature_codec);
+ size += dryerAirFlow_.CalculateSize(_repeated_dryerAirFlow_codec);
+ size += winderTension_.CalculateSize(_repeated_winderTension_codec);
+ size += dispensersMotorsFrequency_.CalculateSize(_repeated_dispensersMotorsFrequency_codec);
+ size += dispensersAngularEncoders_.CalculateSize(_repeated_dispensersAngularEncoders_codec);
+ size += dispensersLinearPositions_.CalculateSize(_repeated_dispensersLinearPositions_codec);
+ size += dispensersPressure_.CalculateSize(_repeated_dispensersPressure_codec);
+ size += midTankPressure_.CalculateSize(_repeated_midTankPressure_codec);
+ size += filterDeltaPressure_.CalculateSize(_repeated_filterDeltaPressure_codec);
+ size += chillerTemperature_.CalculateSize(_repeated_chillerTemperature_codec);
+ size += dispenser1MotorFrequency_.CalculateSize(_repeated_dispenser1MotorFrequency_codec);
+ size += dispenser2MotorFrequency_.CalculateSize(_repeated_dispenser2MotorFrequency_codec);
+ size += dispenser3MotorFrequency_.CalculateSize(_repeated_dispenser3MotorFrequency_codec);
+ size += dispenser4MotorFrequency_.CalculateSize(_repeated_dispenser4MotorFrequency_codec);
+ size += dispenser5MotorFrequency_.CalculateSize(_repeated_dispenser5MotorFrequency_codec);
+ size += dispenser6MotorFrequency_.CalculateSize(_repeated_dispenser6MotorFrequency_codec);
+ size += dispenser7MotorFrequency_.CalculateSize(_repeated_dispenser7MotorFrequency_codec);
+ size += dispenser8MotorFrequency_.CalculateSize(_repeated_dispenser8MotorFrequency_codec);
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(DiagnosticsMonitors other) {
+ if (other == null) {
+ return;
+ }
+ dancer1Angle_.Add(other.dancer1Angle_);
+ dancer2Angle_.Add(other.dancer2Angle_);
+ dancer3Angle_.Add(other.dancer3Angle_);
+ feederMotorFrequency_.Add(other.feederMotorFrequency_);
+ dryerMotor_.Add(other.dryerMotor_);
+ pollerMotor_.Add(other.pollerMotor_);
+ winderMotor_.Add(other.winderMotor_);
+ screwMotor_.Add(other.screwMotor_);
+ threadSpeed_.Add(other.threadSpeed_);
+ mixerTemperature_.Add(other.mixerTemperature_);
+ headZone1Temperature_.Add(other.headZone1Temperature_);
+ headZone2Temperature_.Add(other.headZone2Temperature_);
+ headZone3Temperature_.Add(other.headZone3Temperature_);
+ headAirFlow_.Add(other.headAirFlow_);
+ feederTension_.Add(other.feederTension_);
+ pullerTension_.Add(other.pullerTension_);
+ dryerZone1Temperature_.Add(other.dryerZone1Temperature_);
+ dryerZone2Temperature_.Add(other.dryerZone2Temperature_);
+ dryerZone3Temperature_.Add(other.dryerZone3Temperature_);
+ dryerAirFlow_.Add(other.dryerAirFlow_);
+ winderTension_.Add(other.winderTension_);
+ dispensersMotorsFrequency_.Add(other.dispensersMotorsFrequency_);
+ dispensersAngularEncoders_.Add(other.dispensersAngularEncoders_);
+ dispensersLinearPositions_.Add(other.dispensersLinearPositions_);
+ dispensersPressure_.Add(other.dispensersPressure_);
+ midTankPressure_.Add(other.midTankPressure_);
+ filterDeltaPressure_.Add(other.filterDeltaPressure_);
+ chillerTemperature_.Add(other.chillerTemperature_);
+ dispenser1MotorFrequency_.Add(other.dispenser1MotorFrequency_);
+ dispenser2MotorFrequency_.Add(other.dispenser2MotorFrequency_);
+ dispenser3MotorFrequency_.Add(other.dispenser3MotorFrequency_);
+ dispenser4MotorFrequency_.Add(other.dispenser4MotorFrequency_);
+ dispenser5MotorFrequency_.Add(other.dispenser5MotorFrequency_);
+ dispenser6MotorFrequency_.Add(other.dispenser6MotorFrequency_);
+ dispenser7MotorFrequency_.Add(other.dispenser7MotorFrequency_);
+ dispenser8MotorFrequency_.Add(other.dispenser8MotorFrequency_);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 10:
+ case 9: {
+ dancer1Angle_.AddEntriesFrom(input, _repeated_dancer1Angle_codec);
+ break;
+ }
+ case 18:
+ case 17: {
+ dancer2Angle_.AddEntriesFrom(input, _repeated_dancer2Angle_codec);
+ break;
+ }
+ case 26:
+ case 25: {
+ dancer3Angle_.AddEntriesFrom(input, _repeated_dancer3Angle_codec);
+ break;
+ }
+ case 34:
+ case 33: {
+ feederMotorFrequency_.AddEntriesFrom(input, _repeated_feederMotorFrequency_codec);
+ break;
+ }
+ case 42:
+ case 41: {
+ dryerMotor_.AddEntriesFrom(input, _repeated_dryerMotor_codec);
+ break;
+ }
+ case 50:
+ case 49: {
+ pollerMotor_.AddEntriesFrom(input, _repeated_pollerMotor_codec);
+ break;
+ }
+ case 58:
+ case 57: {
+ winderMotor_.AddEntriesFrom(input, _repeated_winderMotor_codec);
+ break;
+ }
+ case 66:
+ case 65: {
+ screwMotor_.AddEntriesFrom(input, _repeated_screwMotor_codec);
+ break;
+ }
+ case 74:
+ case 73: {
+ threadSpeed_.AddEntriesFrom(input, _repeated_threadSpeed_codec);
+ break;
+ }
+ case 82:
+ case 81: {
+ mixerTemperature_.AddEntriesFrom(input, _repeated_mixerTemperature_codec);
+ break;
+ }
+ case 90:
+ case 89: {
+ headZone1Temperature_.AddEntriesFrom(input, _repeated_headZone1Temperature_codec);
+ break;
+ }
+ case 98:
+ case 97: {
+ headZone2Temperature_.AddEntriesFrom(input, _repeated_headZone2Temperature_codec);
+ break;
+ }
+ case 106:
+ case 105: {
+ headZone3Temperature_.AddEntriesFrom(input, _repeated_headZone3Temperature_codec);
+ break;
+ }
+ case 114:
+ case 113: {
+ headAirFlow_.AddEntriesFrom(input, _repeated_headAirFlow_codec);
+ break;
+ }
+ case 122:
+ case 121: {
+ feederTension_.AddEntriesFrom(input, _repeated_feederTension_codec);
+ break;
+ }
+ case 130:
+ case 129: {
+ pullerTension_.AddEntriesFrom(input, _repeated_pullerTension_codec);
+ break;
+ }
+ case 138:
+ case 137: {
+ dryerZone1Temperature_.AddEntriesFrom(input, _repeated_dryerZone1Temperature_codec);
+ break;
+ }
+ case 146:
+ case 145: {
+ dryerZone2Temperature_.AddEntriesFrom(input, _repeated_dryerZone2Temperature_codec);
+ break;
+ }
+ case 154:
+ case 153: {
+ dryerZone3Temperature_.AddEntriesFrom(input, _repeated_dryerZone3Temperature_codec);
+ break;
+ }
+ case 162:
+ case 161: {
+ dryerAirFlow_.AddEntriesFrom(input, _repeated_dryerAirFlow_codec);
+ break;
+ }
+ case 170:
+ case 169: {
+ winderTension_.AddEntriesFrom(input, _repeated_winderTension_codec);
+ break;
+ }
+ case 178: {
+ dispensersMotorsFrequency_.AddEntriesFrom(input, _repeated_dispensersMotorsFrequency_codec);
+ break;
+ }
+ case 186: {
+ dispensersAngularEncoders_.AddEntriesFrom(input, _repeated_dispensersAngularEncoders_codec);
+ break;
+ }
+ case 194: {
+ dispensersLinearPositions_.AddEntriesFrom(input, _repeated_dispensersLinearPositions_codec);
+ break;
+ }
+ case 202: {
+ dispensersPressure_.AddEntriesFrom(input, _repeated_dispensersPressure_codec);
+ break;
+ }
+ case 210:
+ case 209: {
+ midTankPressure_.AddEntriesFrom(input, _repeated_midTankPressure_codec);
+ break;
+ }
+ case 218:
+ case 217: {
+ filterDeltaPressure_.AddEntriesFrom(input, _repeated_filterDeltaPressure_codec);
+ break;
+ }
+ case 226:
+ case 225: {
+ chillerTemperature_.AddEntriesFrom(input, _repeated_chillerTemperature_codec);
+ break;
+ }
+ case 234:
+ case 233: {
+ dispenser1MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser1MotorFrequency_codec);
+ break;
+ }
+ case 242:
+ case 241: {
+ dispenser2MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser2MotorFrequency_codec);
+ break;
+ }
+ case 250:
+ case 249: {
+ dispenser3MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser3MotorFrequency_codec);
+ break;
+ }
+ case 258:
+ case 257: {
+ dispenser4MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser4MotorFrequency_codec);
+ break;
+ }
+ case 266:
+ case 265: {
+ dispenser5MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser5MotorFrequency_codec);
+ break;
+ }
+ case 274:
+ case 273: {
+ dispenser6MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser6MotorFrequency_codec);
+ break;
+ }
+ case 282:
+ case 281: {
+ dispenser7MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser7MotorFrequency_codec);
+ break;
+ }
+ case 290:
+ case 289: {
+ dispenser8MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser8MotorFrequency_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/PushDiagnosticsResponse.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/PushDiagnosticsResponse.cs
index d08eb25dc..ed66a97c4 100644
--- a/Software/Visual_Studio/Tango.PMR/Diagnostics/PushDiagnosticsResponse.cs
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/PushDiagnosticsResponse.cs
@@ -23,25 +23,19 @@ namespace Tango.PMR.Diagnostics {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
"Ch1QdXNoRGlhZ25vc3RpY3NSZXNwb25zZS5wcm90bxIVVGFuZ28uUE1SLkRp",
- "YWdub3N0aWNzGhFEb3VibGVBcnJheS5wcm90bxoQRGlnaXRhbFBpbi5wcm90",
- "byKqBAoXUHVzaERpYWdub3N0aWNzUmVzcG9uc2USFAoMRGFuY2VyMUFuZ2xl",
- "GAEgAygBEhQKDERhbmNlcjJBbmdsZRgCIAMoARIUCgxEYW5jZXIzQW5nbGUY",
- "AyADKAESRQoZRGlzcGVuc2Vyc01vdG9yc0ZyZXF1ZW5jeRgEIAMoCzIiLlRh",
- "bmdvLlBNUi5EaWFnbm9zdGljcy5Eb3VibGVBcnJheRIgChhEaXNwZW5zZXIx",
- "TW90b3JGcmVxdWVuY3kYBSADKAESIAoYRGlzcGVuc2VyMk1vdG9yRnJlcXVl",
- "bmN5GAYgAygBEiAKGERpc3BlbnNlcjNNb3RvckZyZXF1ZW5jeRgHIAMoARIg",
- "ChhEaXNwZW5zZXI0TW90b3JGcmVxdWVuY3kYCCADKAESIAoYRGlzcGVuc2Vy",
- "NU1vdG9yRnJlcXVlbmN5GAkgAygBEiAKGERpc3BlbnNlcjZNb3RvckZyZXF1",
- "ZW5jeRgKIAMoARIgChhEaXNwZW5zZXI3TW90b3JGcmVxdWVuY3kYCyADKAES",
- "IAoYRGlzcGVuc2VyOE1vdG9yRnJlcXVlbmN5GAwgAygBEjYKC0RpZ2l0YWxQ",
- "aW5zGA0gAygLMiEuVGFuZ28uUE1SLkRpYWdub3N0aWNzLkRpZ2l0YWxQaW4S",
- "DwoHVmVyc2lvbhgOIAEoCRITCgtWZXJzaW9uTmFtZRgPIAEoCRIYChBWZXJz",
- "aW9uQnVpbGREYXRlGBAgASgJQiEKH2NvbS50d2luZS50YW5nby5wbXIuZGlh",
- "Z25vc3RpY3NiBnByb3RvMw=="));
+ "YWdub3N0aWNzGhBEaWdpdGFsUGluLnByb3RvGhlWYWx1ZUNvbXBvbmVudFN0",
+ "YXRlLnByb3RvGhlEaWFnbm9zdGljc01vbml0b3JzLnByb3RvIpUCChdQdXNo",
+ "RGlhZ25vc3RpY3NSZXNwb25zZRI8CghNb25pdG9ycxgBIAEoCzIqLlRhbmdv",
+ "LlBNUi5EaWFnbm9zdGljcy5EaWFnbm9zdGljc01vbml0b3JzEjYKC0RpZ2l0",
+ "YWxQaW5zGAIgAygLMiEuVGFuZ28uUE1SLkRpYWdub3N0aWNzLkRpZ2l0YWxQ",
+ "aW4SRAoQQ29tcG9uZW50c1N0YXRlcxgDIAMoCzIqLlRhbmdvLlBNUi5EaWFn",
+ "bm9zdGljcy5WYWx1ZUNvbXBvbmVudFN0YXRlEg8KB1ZlcnNpb24YBCABKAkS",
+ "EwoLVmVyc2lvbk5hbWUYBSABKAkSGAoQVmVyc2lvbkJ1aWxkRGF0ZRgGIAEo",
+ "CUIhCh9jb20udHdpbmUudGFuZ28ucG1yLmRpYWdub3N0aWNzYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
- new pbr::FileDescriptor[] { global::Tango.PMR.Diagnostics.DoubleArrayReflection.Descriptor, global::Tango.PMR.Diagnostics.DigitalPinReflection.Descriptor, },
+ new pbr::FileDescriptor[] { global::Tango.PMR.Diagnostics.DigitalPinReflection.Descriptor, global::Tango.PMR.Diagnostics.ValueComponentStateReflection.Descriptor, global::Tango.PMR.Diagnostics.DiagnosticsMonitorsReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
- new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.PushDiagnosticsResponse), global::Tango.PMR.Diagnostics.PushDiagnosticsResponse.Parser, new[]{ "Dancer1Angle", "Dancer2Angle", "Dancer3Angle", "DispensersMotorsFrequency", "Dispenser1MotorFrequency", "Dispenser2MotorFrequency", "Dispenser3MotorFrequency", "Dispenser4MotorFrequency", "Dispenser5MotorFrequency", "Dispenser6MotorFrequency", "Dispenser7MotorFrequency", "Dispenser8MotorFrequency", "DigitalPins", "Version", "VersionName", "VersionBuildDate" }, null, null, null)
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.PushDiagnosticsResponse), global::Tango.PMR.Diagnostics.PushDiagnosticsResponse.Parser, new[]{ "Monitors", "DigitalPins", "ComponentsStates", "Version", "VersionName", "VersionBuildDate" }, null, null, null)
}));
}
#endregion
@@ -72,19 +66,9 @@ namespace Tango.PMR.Diagnostics {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public PushDiagnosticsResponse(PushDiagnosticsResponse other) : this() {
- dancer1Angle_ = other.dancer1Angle_.Clone();
- dancer2Angle_ = other.dancer2Angle_.Clone();
- dancer3Angle_ = other.dancer3Angle_.Clone();
- dispensersMotorsFrequency_ = other.dispensersMotorsFrequency_.Clone();
- dispenser1MotorFrequency_ = other.dispenser1MotorFrequency_.Clone();
- dispenser2MotorFrequency_ = other.dispenser2MotorFrequency_.Clone();
- dispenser3MotorFrequency_ = other.dispenser3MotorFrequency_.Clone();
- dispenser4MotorFrequency_ = other.dispenser4MotorFrequency_.Clone();
- dispenser5MotorFrequency_ = other.dispenser5MotorFrequency_.Clone();
- dispenser6MotorFrequency_ = other.dispenser6MotorFrequency_.Clone();
- dispenser7MotorFrequency_ = other.dispenser7MotorFrequency_.Clone();
- dispenser8MotorFrequency_ = other.dispenser8MotorFrequency_.Clone();
+ Monitors = other.monitors_ != null ? other.Monitors.Clone() : null;
digitalPins_ = other.digitalPins_.Clone();
+ componentsStates_ = other.componentsStates_.Clone();
version_ = other.version_;
versionName_ = other.versionName_;
versionBuildDate_ = other.versionBuildDate_;
@@ -95,136 +79,24 @@ namespace Tango.PMR.Diagnostics {
return new PushDiagnosticsResponse(this);
}
- /// <summary>Field number for the "Dancer1Angle" field.</summary>
- public const int Dancer1AngleFieldNumber = 1;
- private static readonly pb::FieldCodec<double> _repeated_dancer1Angle_codec
- = pb::FieldCodec.ForDouble(10);
- private readonly pbc::RepeatedField<double> dancer1Angle_ = new pbc::RepeatedField<double>();
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dancer1Angle {
- get { return dancer1Angle_; }
- }
-
- /// <summary>Field number for the "Dancer2Angle" field.</summary>
- public const int Dancer2AngleFieldNumber = 2;
- private static readonly pb::FieldCodec<double> _repeated_dancer2Angle_codec
- = pb::FieldCodec.ForDouble(18);
- private readonly pbc::RepeatedField<double> dancer2Angle_ = new pbc::RepeatedField<double>();
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dancer2Angle {
- get { return dancer2Angle_; }
- }
-
- /// <summary>Field number for the "Dancer3Angle" field.</summary>
- public const int Dancer3AngleFieldNumber = 3;
- private static readonly pb::FieldCodec<double> _repeated_dancer3Angle_codec
- = pb::FieldCodec.ForDouble(26);
- private readonly pbc::RepeatedField<double> dancer3Angle_ = new pbc::RepeatedField<double>();
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dancer3Angle {
- get { return dancer3Angle_; }
- }
-
- /// <summary>Field number for the "DispensersMotorsFrequency" field.</summary>
- public const int DispensersMotorsFrequencyFieldNumber = 4;
- private static readonly pb::FieldCodec<global::Tango.PMR.Diagnostics.DoubleArray> _repeated_dispensersMotorsFrequency_codec
- = pb::FieldCodec.ForMessage(34, global::Tango.PMR.Diagnostics.DoubleArray.Parser);
- private readonly pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray> dispensersMotorsFrequency_ = new pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray>();
+ /// <summary>Field number for the "Monitors" field.</summary>
+ public const int MonitorsFieldNumber = 1;
+ private global::Tango.PMR.Diagnostics.DiagnosticsMonitors monitors_;
/// <summary>
- ///Dispensers Motors Frequency Multi
+ ///Monitors
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<global::Tango.PMR.Diagnostics.DoubleArray> DispensersMotorsFrequency {
- get { return dispensersMotorsFrequency_; }
- }
-
- /// <summary>Field number for the "Dispenser1MotorFrequency" field.</summary>
- public const int Dispenser1MotorFrequencyFieldNumber = 5;
- private static readonly pb::FieldCodec<double> _repeated_dispenser1MotorFrequency_codec
- = pb::FieldCodec.ForDouble(42);
- private readonly pbc::RepeatedField<double> dispenser1MotorFrequency_ = new pbc::RepeatedField<double>();
- /// <summary>
- ///Dispensers Motors Frequency Singles
- /// </summary>
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dispenser1MotorFrequency {
- get { return dispenser1MotorFrequency_; }
- }
-
- /// <summary>Field number for the "Dispenser2MotorFrequency" field.</summary>
- public const int Dispenser2MotorFrequencyFieldNumber = 6;
- private static readonly pb::FieldCodec<double> _repeated_dispenser2MotorFrequency_codec
- = pb::FieldCodec.ForDouble(50);
- private readonly pbc::RepeatedField<double> dispenser2MotorFrequency_ = new pbc::RepeatedField<double>();
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dispenser2MotorFrequency {
- get { return dispenser2MotorFrequency_; }
- }
-
- /// <summary>Field number for the "Dispenser3MotorFrequency" field.</summary>
- public const int Dispenser3MotorFrequencyFieldNumber = 7;
- private static readonly pb::FieldCodec<double> _repeated_dispenser3MotorFrequency_codec
- = pb::FieldCodec.ForDouble(58);
- private readonly pbc::RepeatedField<double> dispenser3MotorFrequency_ = new pbc::RepeatedField<double>();
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dispenser3MotorFrequency {
- get { return dispenser3MotorFrequency_; }
- }
-
- /// <summary>Field number for the "Dispenser4MotorFrequency" field.</summary>
- public const int Dispenser4MotorFrequencyFieldNumber = 8;
- private static readonly pb::FieldCodec<double> _repeated_dispenser4MotorFrequency_codec
- = pb::FieldCodec.ForDouble(66);
- private readonly pbc::RepeatedField<double> dispenser4MotorFrequency_ = new pbc::RepeatedField<double>();
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dispenser4MotorFrequency {
- get { return dispenser4MotorFrequency_; }
- }
-
- /// <summary>Field number for the "Dispenser5MotorFrequency" field.</summary>
- public const int Dispenser5MotorFrequencyFieldNumber = 9;
- private static readonly pb::FieldCodec<double> _repeated_dispenser5MotorFrequency_codec
- = pb::FieldCodec.ForDouble(74);
- private readonly pbc::RepeatedField<double> dispenser5MotorFrequency_ = new pbc::RepeatedField<double>();
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dispenser5MotorFrequency {
- get { return dispenser5MotorFrequency_; }
- }
-
- /// <summary>Field number for the "Dispenser6MotorFrequency" field.</summary>
- public const int Dispenser6MotorFrequencyFieldNumber = 10;
- private static readonly pb::FieldCodec<double> _repeated_dispenser6MotorFrequency_codec
- = pb::FieldCodec.ForDouble(82);
- private readonly pbc::RepeatedField<double> dispenser6MotorFrequency_ = new pbc::RepeatedField<double>();
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dispenser6MotorFrequency {
- get { return dispenser6MotorFrequency_; }
- }
-
- /// <summary>Field number for the "Dispenser7MotorFrequency" field.</summary>
- public const int Dispenser7MotorFrequencyFieldNumber = 11;
- private static readonly pb::FieldCodec<double> _repeated_dispenser7MotorFrequency_codec
- = pb::FieldCodec.ForDouble(90);
- private readonly pbc::RepeatedField<double> dispenser7MotorFrequency_ = new pbc::RepeatedField<double>();
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dispenser7MotorFrequency {
- get { return dispenser7MotorFrequency_; }
- }
-
- /// <summary>Field number for the "Dispenser8MotorFrequency" field.</summary>
- public const int Dispenser8MotorFrequencyFieldNumber = 12;
- private static readonly pb::FieldCodec<double> _repeated_dispenser8MotorFrequency_codec
- = pb::FieldCodec.ForDouble(98);
- private readonly pbc::RepeatedField<double> dispenser8MotorFrequency_ = new pbc::RepeatedField<double>();
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public pbc::RepeatedField<double> Dispenser8MotorFrequency {
- get { return dispenser8MotorFrequency_; }
+ public global::Tango.PMR.Diagnostics.DiagnosticsMonitors Monitors {
+ get { return monitors_; }
+ set {
+ monitors_ = value;
+ }
}
/// <summary>Field number for the "DigitalPins" field.</summary>
- public const int DigitalPinsFieldNumber = 13;
+ public const int DigitalPinsFieldNumber = 2;
private static readonly pb::FieldCodec<global::Tango.PMR.Diagnostics.DigitalPin> _repeated_digitalPins_codec
- = pb::FieldCodec.ForMessage(106, global::Tango.PMR.Diagnostics.DigitalPin.Parser);
+ = pb::FieldCodec.ForMessage(18, global::Tango.PMR.Diagnostics.DigitalPin.Parser);
private readonly pbc::RepeatedField<global::Tango.PMR.Diagnostics.DigitalPin> digitalPins_ = new pbc::RepeatedField<global::Tango.PMR.Diagnostics.DigitalPin>();
/// <summary>
///Digital Pins States
@@ -234,8 +106,21 @@ namespace Tango.PMR.Diagnostics {
get { return digitalPins_; }
}
+ /// <summary>Field number for the "ComponentsStates" field.</summary>
+ public const int ComponentsStatesFieldNumber = 3;
+ private static readonly pb::FieldCodec<global::Tango.PMR.Diagnostics.ValueComponentState> _repeated_componentsStates_codec
+ = pb::FieldCodec.ForMessage(26, global::Tango.PMR.Diagnostics.ValueComponentState.Parser);
+ private readonly pbc::RepeatedField<global::Tango.PMR.Diagnostics.ValueComponentState> componentsStates_ = new pbc::RepeatedField<global::Tango.PMR.Diagnostics.ValueComponentState>();
+ /// <summary>
+ ///Value Components Effective Values
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<global::Tango.PMR.Diagnostics.ValueComponentState> ComponentsStates {
+ get { return componentsStates_; }
+ }
+
/// <summary>Field number for the "Version" field.</summary>
- public const int VersionFieldNumber = 14;
+ public const int VersionFieldNumber = 4;
private string version_ = "";
/// <summary>
///Software Information
@@ -249,7 +134,7 @@ namespace Tango.PMR.Diagnostics {
}
/// <summary>Field number for the "VersionName" field.</summary>
- public const int VersionNameFieldNumber = 15;
+ public const int VersionNameFieldNumber = 5;
private string versionName_ = "";
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string VersionName {
@@ -260,7 +145,7 @@ namespace Tango.PMR.Diagnostics {
}
/// <summary>Field number for the "VersionBuildDate" field.</summary>
- public const int VersionBuildDateFieldNumber = 16;
+ public const int VersionBuildDateFieldNumber = 6;
private string versionBuildDate_ = "";
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string VersionBuildDate {
@@ -283,19 +168,9 @@ namespace Tango.PMR.Diagnostics {
if (ReferenceEquals(other, this)) {
return true;
}
- if(!dancer1Angle_.Equals(other.dancer1Angle_)) return false;
- if(!dancer2Angle_.Equals(other.dancer2Angle_)) return false;
- if(!dancer3Angle_.Equals(other.dancer3Angle_)) return false;
- if(!dispensersMotorsFrequency_.Equals(other.dispensersMotorsFrequency_)) return false;
- if(!dispenser1MotorFrequency_.Equals(other.dispenser1MotorFrequency_)) return false;
- if(!dispenser2MotorFrequency_.Equals(other.dispenser2MotorFrequency_)) return false;
- if(!dispenser3MotorFrequency_.Equals(other.dispenser3MotorFrequency_)) return false;
- if(!dispenser4MotorFrequency_.Equals(other.dispenser4MotorFrequency_)) return false;
- if(!dispenser5MotorFrequency_.Equals(other.dispenser5MotorFrequency_)) return false;
- if(!dispenser6MotorFrequency_.Equals(other.dispenser6MotorFrequency_)) return false;
- if(!dispenser7MotorFrequency_.Equals(other.dispenser7MotorFrequency_)) return false;
- if(!dispenser8MotorFrequency_.Equals(other.dispenser8MotorFrequency_)) return false;
+ if (!object.Equals(Monitors, other.Monitors)) return false;
if(!digitalPins_.Equals(other.digitalPins_)) return false;
+ if(!componentsStates_.Equals(other.componentsStates_)) return false;
if (Version != other.Version) return false;
if (VersionName != other.VersionName) return false;
if (VersionBuildDate != other.VersionBuildDate) return false;
@@ -305,19 +180,9 @@ namespace Tango.PMR.Diagnostics {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override int GetHashCode() {
int hash = 1;
- hash ^= dancer1Angle_.GetHashCode();
- hash ^= dancer2Angle_.GetHashCode();
- hash ^= dancer3Angle_.GetHashCode();
- hash ^= dispensersMotorsFrequency_.GetHashCode();
- hash ^= dispenser1MotorFrequency_.GetHashCode();
- hash ^= dispenser2MotorFrequency_.GetHashCode();
- hash ^= dispenser3MotorFrequency_.GetHashCode();
- hash ^= dispenser4MotorFrequency_.GetHashCode();
- hash ^= dispenser5MotorFrequency_.GetHashCode();
- hash ^= dispenser6MotorFrequency_.GetHashCode();
- hash ^= dispenser7MotorFrequency_.GetHashCode();
- hash ^= dispenser8MotorFrequency_.GetHashCode();
+ if (monitors_ != null) hash ^= Monitors.GetHashCode();
hash ^= digitalPins_.GetHashCode();
+ hash ^= componentsStates_.GetHashCode();
if (Version.Length != 0) hash ^= Version.GetHashCode();
if (VersionName.Length != 0) hash ^= VersionName.GetHashCode();
if (VersionBuildDate.Length != 0) hash ^= VersionBuildDate.GetHashCode();
@@ -331,29 +196,22 @@ namespace Tango.PMR.Diagnostics {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void WriteTo(pb::CodedOutputStream output) {
- dancer1Angle_.WriteTo(output, _repeated_dancer1Angle_codec);
- dancer2Angle_.WriteTo(output, _repeated_dancer2Angle_codec);
- dancer3Angle_.WriteTo(output, _repeated_dancer3Angle_codec);
- dispensersMotorsFrequency_.WriteTo(output, _repeated_dispensersMotorsFrequency_codec);
- dispenser1MotorFrequency_.WriteTo(output, _repeated_dispenser1MotorFrequency_codec);
- dispenser2MotorFrequency_.WriteTo(output, _repeated_dispenser2MotorFrequency_codec);
- dispenser3MotorFrequency_.WriteTo(output, _repeated_dispenser3MotorFrequency_codec);
- dispenser4MotorFrequency_.WriteTo(output, _repeated_dispenser4MotorFrequency_codec);
- dispenser5MotorFrequency_.WriteTo(output, _repeated_dispenser5MotorFrequency_codec);
- dispenser6MotorFrequency_.WriteTo(output, _repeated_dispenser6MotorFrequency_codec);
- dispenser7MotorFrequency_.WriteTo(output, _repeated_dispenser7MotorFrequency_codec);
- dispenser8MotorFrequency_.WriteTo(output, _repeated_dispenser8MotorFrequency_codec);
+ if (monitors_ != null) {
+ output.WriteRawTag(10);
+ output.WriteMessage(Monitors);
+ }
digitalPins_.WriteTo(output, _repeated_digitalPins_codec);
+ componentsStates_.WriteTo(output, _repeated_componentsStates_codec);
if (Version.Length != 0) {
- output.WriteRawTag(114);
+ output.WriteRawTag(34);
output.WriteString(Version);
}
if (VersionName.Length != 0) {
- output.WriteRawTag(122);
+ output.WriteRawTag(42);
output.WriteString(VersionName);
}
if (VersionBuildDate.Length != 0) {
- output.WriteRawTag(130, 1);
+ output.WriteRawTag(50);
output.WriteString(VersionBuildDate);
}
}
@@ -361,19 +219,11 @@ namespace Tango.PMR.Diagnostics {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int CalculateSize() {
int size = 0;
- size += dancer1Angle_.CalculateSize(_repeated_dancer1Angle_codec);
- size += dancer2Angle_.CalculateSize(_repeated_dancer2Angle_codec);
- size += dancer3Angle_.CalculateSize(_repeated_dancer3Angle_codec);
- size += dispensersMotorsFrequency_.CalculateSize(_repeated_dispensersMotorsFrequency_codec);
- size += dispenser1MotorFrequency_.CalculateSize(_repeated_dispenser1MotorFrequency_codec);
- size += dispenser2MotorFrequency_.CalculateSize(_repeated_dispenser2MotorFrequency_codec);
- size += dispenser3MotorFrequency_.CalculateSize(_repeated_dispenser3MotorFrequency_codec);
- size += dispenser4MotorFrequency_.CalculateSize(_repeated_dispenser4MotorFrequency_codec);
- size += dispenser5MotorFrequency_.CalculateSize(_repeated_dispenser5MotorFrequency_codec);
- size += dispenser6MotorFrequency_.CalculateSize(_repeated_dispenser6MotorFrequency_codec);
- size += dispenser7MotorFrequency_.CalculateSize(_repeated_dispenser7MotorFrequency_codec);
- size += dispenser8MotorFrequency_.CalculateSize(_repeated_dispenser8MotorFrequency_codec);
+ if (monitors_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Monitors);
+ }
size += digitalPins_.CalculateSize(_repeated_digitalPins_codec);
+ size += componentsStates_.CalculateSize(_repeated_componentsStates_codec);
if (Version.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(Version);
}
@@ -381,7 +231,7 @@ namespace Tango.PMR.Diagnostics {
size += 1 + pb::CodedOutputStream.ComputeStringSize(VersionName);
}
if (VersionBuildDate.Length != 0) {
- size += 2 + pb::CodedOutputStream.ComputeStringSize(VersionBuildDate);
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(VersionBuildDate);
}
return size;
}
@@ -391,19 +241,14 @@ namespace Tango.PMR.Diagnostics {
if (other == null) {
return;
}
- dancer1Angle_.Add(other.dancer1Angle_);
- dancer2Angle_.Add(other.dancer2Angle_);
- dancer3Angle_.Add(other.dancer3Angle_);
- dispensersMotorsFrequency_.Add(other.dispensersMotorsFrequency_);
- dispenser1MotorFrequency_.Add(other.dispenser1MotorFrequency_);
- dispenser2MotorFrequency_.Add(other.dispenser2MotorFrequency_);
- dispenser3MotorFrequency_.Add(other.dispenser3MotorFrequency_);
- dispenser4MotorFrequency_.Add(other.dispenser4MotorFrequency_);
- dispenser5MotorFrequency_.Add(other.dispenser5MotorFrequency_);
- dispenser6MotorFrequency_.Add(other.dispenser6MotorFrequency_);
- dispenser7MotorFrequency_.Add(other.dispenser7MotorFrequency_);
- dispenser8MotorFrequency_.Add(other.dispenser8MotorFrequency_);
+ if (other.monitors_ != null) {
+ if (monitors_ == null) {
+ monitors_ = new global::Tango.PMR.Diagnostics.DiagnosticsMonitors();
+ }
+ Monitors.MergeFrom(other.Monitors);
+ }
digitalPins_.Add(other.digitalPins_);
+ componentsStates_.Add(other.componentsStates_);
if (other.Version.Length != 0) {
Version = other.Version;
}
@@ -423,78 +268,30 @@ namespace Tango.PMR.Diagnostics {
default:
input.SkipLastField();
break;
- case 10:
- case 9: {
- dancer1Angle_.AddEntriesFrom(input, _repeated_dancer1Angle_codec);
+ case 10: {
+ if (monitors_ == null) {
+ monitors_ = new global::Tango.PMR.Diagnostics.DiagnosticsMonitors();
+ }
+ input.ReadMessage(monitors_);
break;
}
- case 18:
- case 17: {
- dancer2Angle_.AddEntriesFrom(input, _repeated_dancer2Angle_codec);
+ case 18: {
+ digitalPins_.AddEntriesFrom(input, _repeated_digitalPins_codec);
break;
}
- case 26:
- case 25: {
- dancer3Angle_.AddEntriesFrom(input, _repeated_dancer3Angle_codec);
+ case 26: {
+ componentsStates_.AddEntriesFrom(input, _repeated_componentsStates_codec);
break;
}
case 34: {
- dispensersMotorsFrequency_.AddEntriesFrom(input, _repeated_dispensersMotorsFrequency_codec);
- break;
- }
- case 42:
- case 41: {
- dispenser1MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser1MotorFrequency_codec);
- break;
- }
- case 50:
- case 49: {
- dispenser2MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser2MotorFrequency_codec);
- break;
- }
- case 58:
- case 57: {
- dispenser3MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser3MotorFrequency_codec);
- break;
- }
- case 66:
- case 65: {
- dispenser4MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser4MotorFrequency_codec);
- break;
- }
- case 74:
- case 73: {
- dispenser5MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser5MotorFrequency_codec);
- break;
- }
- case 82:
- case 81: {
- dispenser6MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser6MotorFrequency_codec);
- break;
- }
- case 90:
- case 89: {
- dispenser7MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser7MotorFrequency_codec);
- break;
- }
- case 98:
- case 97: {
- dispenser8MotorFrequency_.AddEntriesFrom(input, _repeated_dispenser8MotorFrequency_codec);
- break;
- }
- case 106: {
- digitalPins_.AddEntriesFrom(input, _repeated_digitalPins_codec);
- break;
- }
- case 114: {
Version = input.ReadString();
break;
}
- case 122: {
+ case 42: {
VersionName = input.ReadString();
break;
}
- case 130: {
+ case 50: {
VersionBuildDate = input.ReadString();
break;
}
diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/SetComponentValueRequest.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/SetComponentValueRequest.cs
new file mode 100644
index 000000000..a7149ed48
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/SetComponentValueRequest.cs
@@ -0,0 +1,189 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: SetComponentValueRequest.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.Diagnostics {
+
+ /// <summary>Holder for reflection information generated from SetComponentValueRequest.proto</summary>
+ public static partial class SetComponentValueRequestReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for SetComponentValueRequest.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static SetComponentValueRequestReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Ch5TZXRDb21wb25lbnRWYWx1ZVJlcXVlc3QucHJvdG8SFVRhbmdvLlBNUi5E",
+ "aWFnbm9zdGljcxoUVmFsdWVDb21wb25lbnQucHJvdG8iYwoYU2V0Q29tcG9u",
+ "ZW50VmFsdWVSZXF1ZXN0EjgKCUNvbXBvbmVudBgBIAEoDjIlLlRhbmdvLlBN",
+ "Ui5EaWFnbm9zdGljcy5WYWx1ZUNvbXBvbmVudBINCgVWYWx1ZRgCIAEoAUIh",
+ "Ch9jb20udHdpbmUudGFuZ28ucG1yLmRpYWdub3N0aWNzYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { global::Tango.PMR.Diagnostics.ValueComponentReflection.Descriptor, },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.SetComponentValueRequest), global::Tango.PMR.Diagnostics.SetComponentValueRequest.Parser, new[]{ "Component", "Value" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class SetComponentValueRequest : pb::IMessage<SetComponentValueRequest> {
+ private static readonly pb::MessageParser<SetComponentValueRequest> _parser = new pb::MessageParser<SetComponentValueRequest>(() => new SetComponentValueRequest());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<SetComponentValueRequest> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Diagnostics.SetComponentValueRequestReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public SetComponentValueRequest() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public SetComponentValueRequest(SetComponentValueRequest other) : this() {
+ component_ = other.component_;
+ value_ = other.value_;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public SetComponentValueRequest Clone() {
+ return new SetComponentValueRequest(this);
+ }
+
+ /// <summary>Field number for the "Component" field.</summary>
+ public const int ComponentFieldNumber = 1;
+ private global::Tango.PMR.Diagnostics.ValueComponent component_ = 0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tango.PMR.Diagnostics.ValueComponent Component {
+ get { return component_; }
+ set {
+ component_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "Value" field.</summary>
+ public const int ValueFieldNumber = 2;
+ private double value_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double Value {
+ get { return value_; }
+ set {
+ value_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as SetComponentValueRequest);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(SetComponentValueRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Component != other.Component) return false;
+ if (Value != other.Value) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Component != 0) hash ^= Component.GetHashCode();
+ if (Value != 0D) hash ^= Value.GetHashCode();
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Component != 0) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) Component);
+ }
+ if (Value != 0D) {
+ output.WriteRawTag(17);
+ output.WriteDouble(Value);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Component != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Component);
+ }
+ if (Value != 0D) {
+ size += 1 + 8;
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(SetComponentValueRequest other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Component != 0) {
+ Component = other.Component;
+ }
+ if (other.Value != 0D) {
+ Value = other.Value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ component_ = (global::Tango.PMR.Diagnostics.ValueComponent) input.ReadEnum();
+ break;
+ }
+ case 17: {
+ Value = input.ReadDouble();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/SetComponentValueResponse.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/SetComponentValueResponse.cs
new file mode 100644
index 000000000..0c498dccf
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/SetComponentValueResponse.cs
@@ -0,0 +1,131 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: SetComponentValueResponse.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.Diagnostics {
+
+ /// <summary>Holder for reflection information generated from SetComponentValueResponse.proto</summary>
+ public static partial class SetComponentValueResponseReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for SetComponentValueResponse.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static SetComponentValueResponseReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Ch9TZXRDb21wb25lbnRWYWx1ZVJlc3BvbnNlLnByb3RvEhVUYW5nby5QTVIu",
+ "RGlhZ25vc3RpY3MiGwoZU2V0Q29tcG9uZW50VmFsdWVSZXNwb25zZUIhCh9j",
+ "b20udHdpbmUudGFuZ28ucG1yLmRpYWdub3N0aWNzYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.SetComponentValueResponse), global::Tango.PMR.Diagnostics.SetComponentValueResponse.Parser, null, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class SetComponentValueResponse : pb::IMessage<SetComponentValueResponse> {
+ private static readonly pb::MessageParser<SetComponentValueResponse> _parser = new pb::MessageParser<SetComponentValueResponse>(() => new SetComponentValueResponse());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<SetComponentValueResponse> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Diagnostics.SetComponentValueResponseReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public SetComponentValueResponse() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public SetComponentValueResponse(SetComponentValueResponse other) : this() {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public SetComponentValueResponse Clone() {
+ return new SetComponentValueResponse(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as SetComponentValueResponse);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(SetComponentValueResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(SetComponentValueResponse other) {
+ if (other == null) {
+ return;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/ValueComponent.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/ValueComponent.cs
new file mode 100644
index 000000000..88ba622ee
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/ValueComponent.cs
@@ -0,0 +1,52 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: ValueComponent.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.Diagnostics {
+
+ /// <summary>Holder for reflection information generated from ValueComponent.proto</summary>
+ public static partial class ValueComponentReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for ValueComponent.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static ValueComponentReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "ChRWYWx1ZUNvbXBvbmVudC5wcm90bxIVVGFuZ28uUE1SLkRpYWdub3N0aWNz",
+ "KjIKDlZhbHVlQ29tcG9uZW50Eg8KC0hlYXRlcjFUZW1wEAASDwoLSGVhdGVy",
+ "MlRlbXAQAUIhCh9jb20udHdpbmUudGFuZ28ucG1yLmRpYWdub3N0aWNzYgZw",
+ "cm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.Diagnostics.ValueComponent), }, null));
+ }
+ #endregion
+
+ }
+ #region Enums
+ public enum ValueComponent {
+ /// <summary>
+ ///Heater 1 Temperature (Min = 0, Max = 100)
+ /// </summary>
+ [pbr::OriginalName("Heater1Temp")] Heater1Temp = 0,
+ /// <summary>
+ ///Heater 2 Temperature (Min = 0, Max = 100)
+ /// </summary>
+ [pbr::OriginalName("Heater2Temp")] Heater2Temp = 1,
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/ValueComponentState.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/ValueComponentState.cs
new file mode 100644
index 000000000..a48590aec
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/ValueComponentState.cs
@@ -0,0 +1,189 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: ValueComponentState.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.Diagnostics {
+
+ /// <summary>Holder for reflection information generated from ValueComponentState.proto</summary>
+ public static partial class ValueComponentStateReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for ValueComponentState.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static ValueComponentStateReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "ChlWYWx1ZUNvbXBvbmVudFN0YXRlLnByb3RvEhVUYW5nby5QTVIuRGlhZ25v",
+ "c3RpY3MaFFZhbHVlQ29tcG9uZW50LnByb3RvIl4KE1ZhbHVlQ29tcG9uZW50",
+ "U3RhdGUSOAoJQ29tcG9uZW50GAEgASgOMiUuVGFuZ28uUE1SLkRpYWdub3N0",
+ "aWNzLlZhbHVlQ29tcG9uZW50Eg0KBVZhbHVlGAIgASgBQiEKH2NvbS50d2lu",
+ "ZS50YW5nby5wbXIuZGlhZ25vc3RpY3NiBnByb3RvMw=="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { global::Tango.PMR.Diagnostics.ValueComponentReflection.Descriptor, },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.ValueComponentState), global::Tango.PMR.Diagnostics.ValueComponentState.Parser, new[]{ "Component", "Value" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class ValueComponentState : pb::IMessage<ValueComponentState> {
+ private static readonly pb::MessageParser<ValueComponentState> _parser = new pb::MessageParser<ValueComponentState>(() => new ValueComponentState());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<ValueComponentState> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Diagnostics.ValueComponentStateReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ValueComponentState() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ValueComponentState(ValueComponentState other) : this() {
+ component_ = other.component_;
+ value_ = other.value_;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ValueComponentState Clone() {
+ return new ValueComponentState(this);
+ }
+
+ /// <summary>Field number for the "Component" field.</summary>
+ public const int ComponentFieldNumber = 1;
+ private global::Tango.PMR.Diagnostics.ValueComponent component_ = 0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tango.PMR.Diagnostics.ValueComponent Component {
+ get { return component_; }
+ set {
+ component_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "Value" field.</summary>
+ public const int ValueFieldNumber = 2;
+ private double value_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double Value {
+ get { return value_; }
+ set {
+ value_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as ValueComponentState);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(ValueComponentState other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Component != other.Component) return false;
+ if (Value != other.Value) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Component != 0) hash ^= Component.GetHashCode();
+ if (Value != 0D) hash ^= Value.GetHashCode();
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Component != 0) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) Component);
+ }
+ if (Value != 0D) {
+ output.WriteRawTag(17);
+ output.WriteDouble(Value);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Component != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Component);
+ }
+ if (Value != 0D) {
+ size += 1 + 8;
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(ValueComponentState other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Component != 0) {
+ Component = other.Component;
+ }
+ if (other.Value != 0D) {
+ Value = other.Value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ component_ = (global::Tango.PMR.Diagnostics.ValueComponent) input.ReadEnum();
+ break;
+ }
+ case 17: {
+ Value = input.ReadDouble();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/ExtensionMethods.cs b/Software/Visual_Studio/Tango.PMR/ExtensionMethods.cs
index 158e00b5e..6f9e53bf5 100644
--- a/Software/Visual_Studio/Tango.PMR/ExtensionMethods.cs
+++ b/Software/Visual_Studio/Tango.PMR/ExtensionMethods.cs
@@ -13,14 +13,14 @@ namespace Tango.PMR
/// <summary>
/// Contains PMR extension methods.
/// </summary>
- public static class ExtensionMethods
+ public static class ExtensionMethods
{
/// <summary>
/// Gets the protobuf <see cref="OriginalNameAttribute"/> attribute value from the message type.
/// </summary>
/// <param name="value">The value.</param>
/// <returns></returns>
- public static String ToOriginalName(this MessageType value)
+ public static String ToOriginalName(this MessageType value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
diff --git a/Software/Visual_Studio/Tango.PMR/Hardware/HardwareDancerType.cs b/Software/Visual_Studio/Tango.PMR/Hardware/HardwareDancerType.cs
index a314c8996..f9273789e 100644
--- a/Software/Visual_Studio/Tango.PMR/Hardware/HardwareDancerType.cs
+++ b/Software/Visual_Studio/Tango.PMR/Hardware/HardwareDancerType.cs
@@ -35,8 +35,17 @@ namespace Tango.PMR.Hardware {
}
#region Enums
public enum HardwareDancerType {
+ /// <summary>
+ ///Left Dancer
+ /// </summary>
[pbr::OriginalName("LeftDancer")] LeftDancer = 0,
+ /// <summary>
+ ///Middle Dancer
+ /// </summary>
[pbr::OriginalName("MiddleDancer")] MiddleDancer = 1,
+ /// <summary>
+ ///Right Dancer
+ /// </summary>
[pbr::OriginalName("RightDancer")] RightDancer = 2,
}
diff --git a/Software/Visual_Studio/Tango.PMR/Hardware/HardwareMotorType.cs b/Software/Visual_Studio/Tango.PMR/Hardware/HardwareMotorType.cs
index 49aa1d688..c19e8b58c 100644
--- a/Software/Visual_Studio/Tango.PMR/Hardware/HardwareMotorType.cs
+++ b/Software/Visual_Studio/Tango.PMR/Hardware/HardwareMotorType.cs
@@ -35,9 +35,21 @@ namespace Tango.PMR.Hardware {
}
#region Enums
public enum HardwareMotorType {
+ /// <summary>
+ ///Winder Motor
+ /// </summary>
[pbr::OriginalName("WinderMotor")] WinderMotor = 0,
+ /// <summary>
+ ///Feeder Motor
+ /// </summary>
[pbr::OriginalName("FeederMotor")] FeederMotor = 1,
+ /// <summary>
+ ///Dryer Motor
+ /// </summary>
[pbr::OriginalName("DryerMotor")] DryerMotor = 2,
+ /// <summary>
+ ///Pooler Motor
+ /// </summary>
[pbr::OriginalName("PoolerMotor")] PoolerMotor = 3,
}
diff --git a/Software/Visual_Studio/Tango.PMR/Hardware/HardwarePidControlType.cs b/Software/Visual_Studio/Tango.PMR/Hardware/HardwarePidControlType.cs
index 1ef856a75..fe6f6ab97 100644
--- a/Software/Visual_Studio/Tango.PMR/Hardware/HardwarePidControlType.cs
+++ b/Software/Visual_Studio/Tango.PMR/Hardware/HardwarePidControlType.cs
@@ -40,19 +40,61 @@ namespace Tango.PMR.Hardware {
}
#region Enums
public enum HardwarePidControlType {
+ /// <summary>
+ ///Dryer Heater 1000w
+ /// </summary>
[pbr::OriginalName("DryerHeater1000w")] DryerHeater1000W = 0,
+ /// <summary>
+ ///Dryer Heater 200w 1
+ /// </summary>
[pbr::OriginalName("DryerHeater200w1")] DryerHeater200W1 = 1,
+ /// <summary>
+ ///Dryer Heater 200w 2
+ /// </summary>
[pbr::OriginalName("DryerHeater200w2")] DryerHeater200W2 = 2,
+ /// <summary>
+ ///Head Heater Zone 1
+ /// </summary>
[pbr::OriginalName("HeadHeaterZ1")] HeadHeaterZ1 = 3,
+ /// <summary>
+ ///Head Heater Zone 2
+ /// </summary>
[pbr::OriginalName("HeadHeaterZ2")] HeadHeaterZ2 = 4,
+ /// <summary>
+ ///Head Heater Zone 3
+ /// </summary>
[pbr::OriginalName("HeadHeaterZ3")] HeadHeaterZ3 = 5,
+ /// <summary>
+ ///Head Heater Zone 4
+ /// </summary>
[pbr::OriginalName("HeadHeaterZ4")] HeadHeaterZ4 = 6,
+ /// <summary>
+ ///Mixer Heater
+ /// </summary>
[pbr::OriginalName("MixerHeater")] MixerHeater = 7,
+ /// <summary>
+ ///Waste Control
+ /// </summary>
[pbr::OriginalName("WasteControl")] WasteControl = 8,
+ /// <summary>
+ ///Dryer Motor
+ /// </summary>
[pbr::OriginalName("MotorDryer")] MotorDryer = 9,
+ /// <summary>
+ ///Feeder Motor
+ /// </summary>
[pbr::OriginalName("MotorFeeder")] MotorFeeder = 10,
+ /// <summary>
+ ///Pooler Motor
+ /// </summary>
[pbr::OriginalName("MotorPooler")] MotorPooler = 11,
+ /// <summary>
+ ///Winder Motor
+ /// </summary>
[pbr::OriginalName("MotorWinder")] MotorWinder = 12,
+ /// <summary>
+ ///Dryer Heater 400
+ /// </summary>
[pbr::OriginalName("DryerHeater400")] DryerHeater400 = 13,
}
diff --git a/Software/Visual_Studio/Tango.PMR/Hardware/HardwareWinderType.cs b/Software/Visual_Studio/Tango.PMR/Hardware/HardwareWinderType.cs
index af7e964bd..28aa18876 100644
--- a/Software/Visual_Studio/Tango.PMR/Hardware/HardwareWinderType.cs
+++ b/Software/Visual_Studio/Tango.PMR/Hardware/HardwareWinderType.cs
@@ -34,6 +34,9 @@ namespace Tango.PMR.Hardware {
}
#region Enums
public enum HardwareWinderType {
+ /// <summary>
+ ///Internal Winder
+ /// </summary>
[pbr::OriginalName("InternalWinder")] InternalWinder = 0,
}
diff --git a/Software/Visual_Studio/Tango.PMR/MessageFactory.cs b/Software/Visual_Studio/Tango.PMR/MessageFactory.cs
index 2c4eb3d13..b1d2a7c55 100644
--- a/Software/Visual_Studio/Tango.PMR/MessageFactory.cs
+++ b/Software/Visual_Studio/Tango.PMR/MessageFactory.cs
@@ -14,6 +14,27 @@ namespace Tango.PMR
/// </summary>
public static class MessageFactory
{
+ private static Dictionary<MessageType, Type> _pmrTypes;
+ private static MethodInfo _parseTangoMessageMethod;
+
+ static MessageFactory()
+ {
+ _parseTangoMessageMethod = typeof(MessageFactory).GetMethod("ParseTangoMessage", BindingFlags.Public | BindingFlags.Static);
+
+ _pmrTypes = new Dictionary<MessageType, Type>();
+ var types = typeof(MessageFactory).Assembly.GetTypes().ToList();
+
+ foreach (var value in Enum.GetValues(typeof(MessageType)).OfType<MessageType>())
+ {
+ var type = types.SingleOrDefault(x => x.Name == value.ToOriginalName());
+
+ if (type != null)
+ {
+ _pmrTypes.Add(value, type);
+ }
+ }
+ }
+
/// <summary>
/// Creates a new <see cref="TangoMessage{T}"/>.
/// </summary>
@@ -98,7 +119,7 @@ namespace Tango.PMR
{
MessageContainer container = MessageContainer.Parser.ParseFrom(data);
IMessage message = ExtractMessageFromContainer(container);
- return (ITangoMessage)typeof(MessageFactory).GetMethod("ParseTangoMessage",BindingFlags.Public | BindingFlags.Static).MakeGenericMethod(message.GetType()).Invoke(null, new[] { data });
+ return (ITangoMessage)_parseTangoMessageMethod.MakeGenericMethod(message.GetType()).Invoke(null, new[] { data });
}
/// <summary>
@@ -121,7 +142,7 @@ namespace Tango.PMR
/// <returns></returns>
public static IMessage ExtractMessageFromContainer(MessageContainer container)
{
- var type = typeof(MessageFactory).Assembly.GetTypes().ToList().SingleOrDefault(x => x.Name == container.Type.ToOriginalName());
+ var type = _pmrTypes[container.Type];
MessageParser parser = type.GetProperty("Parser").GetValue(container) as MessageParser;
return parser.ParseFrom(container.Data);
}
diff --git a/Software/Visual_Studio/Tango.PMR/Printing/JobWindingMethod.cs b/Software/Visual_Studio/Tango.PMR/Printing/JobWindingMethod.cs
index af7a23b95..5172571c1 100644
--- a/Software/Visual_Studio/Tango.PMR/Printing/JobWindingMethod.cs
+++ b/Software/Visual_Studio/Tango.PMR/Printing/JobWindingMethod.cs
@@ -35,7 +35,13 @@ namespace Tango.PMR.Printing {
}
#region Enums
public enum JobWindingMethod {
+ /// <summary>
+ ///Embroidery Winding
+ /// </summary>
[pbr::OriginalName("Embroidery")] Embroidery = 0,
+ /// <summary>
+ ///Calibration Winding
+ /// </summary>
[pbr::OriginalName("Calibration")] Calibration = 1,
}
diff --git a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
index b36887b0b..4bb843619 100644
--- a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
+++ b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
@@ -61,6 +61,7 @@
<Compile Include="Debugging\DebugLogRequest.cs" />
<Compile Include="Debugging\DebugLogResponse.cs" />
<Compile Include="Diagnostics\DataFileFrame.cs" />
+ <Compile Include="Diagnostics\DiagnosticsMonitors.cs" />
<Compile Include="Diagnostics\DigitalPin.cs" />
<Compile Include="Diagnostics\DispenserAbortHomingRequest.cs" />
<Compile Include="Diagnostics\DispenserAbortHomingResponse.cs" />
@@ -82,12 +83,16 @@
<Compile Include="Diagnostics\MotorJoggingResponse.cs" />
<Compile Include="Diagnostics\PushDiagnosticsRequest.cs" />
<Compile Include="Diagnostics\PushDiagnosticsResponse.cs" />
+ <Compile Include="Diagnostics\SetComponentValueRequest.cs" />
+ <Compile Include="Diagnostics\SetComponentValueResponse.cs" />
<Compile Include="Diagnostics\SetDigitalOutRequest.cs" />
<Compile Include="Diagnostics\SetDigitalOutResponse.cs" />
<Compile Include="Diagnostics\ThreadAbortJoggingRequest.cs" />
<Compile Include="Diagnostics\ThreadAbortJoggingResponse.cs" />
<Compile Include="Diagnostics\ThreadJoggingRequest.cs" />
<Compile Include="Diagnostics\ThreadJoggingResponse.cs" />
+ <Compile Include="Diagnostics\ValueComponent.cs" />
+ <Compile Include="Diagnostics\ValueComponentState.cs" />
<Compile Include="Embroidery\AnalyzeInput.cs" />
<Compile Include="Embroidery\AnalyzeOutput.cs" />
<Compile Include="Embroidery\ConvertFileInput.cs" />
@@ -160,6 +165,6 @@
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
- <PreBuildEvent>"$(TargetDir)proto-tc.exe" -i "$(SolutionDir)..\PMR\Messages" -o "$(SolutionDir)Tango.PMR" -l CSharp</PreBuildEvent>
+ <PreBuildEvent>"$(TargetDir)..\Debug\proto-tc.exe" -i "$(SolutionDir)..\PMR\Messages" -o "$(SolutionDir)Tango.PMR" -l CSharp</PreBuildEvent>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Protobuf/Tango.Protobuf.csproj b/Software/Visual_Studio/Tango.Protobuf/Tango.Protobuf.csproj
index 0b50c1494..efade39c9 100644
--- a/Software/Visual_Studio/Tango.Protobuf/Tango.Protobuf.csproj
+++ b/Software/Visual_Studio/Tango.Protobuf/Tango.Protobuf.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Scripting/Tango.Scripting.csproj b/Software/Visual_Studio/Tango.Scripting/Tango.Scripting.csproj
index 871da6e91..d5b21a113 100644
--- a/Software/Visual_Studio/Tango.Scripting/Tango.Scripting.csproj
+++ b/Software/Visual_Studio/Tango.Scripting/Tango.Scripting.csproj
@@ -27,7 +27,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Serialization/Tango.Serialization.csproj b/Software/Visual_Studio/Tango.Serialization/Tango.Serialization.csproj
index 3aafcadc7..d81543f87 100644
--- a/Software/Visual_Studio/Tango.Serialization/Tango.Serialization.csproj
+++ b/Software/Visual_Studio/Tango.Serialization/Tango.Serialization.csproj
@@ -24,7 +24,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Settings/Tango.Settings.csproj b/Software/Visual_Studio/Tango.Settings/Tango.Settings.csproj
index b2b751bf7..fa9eb1f61 100644
--- a/Software/Visual_Studio/Tango.Settings/Tango.Settings.csproj
+++ b/Software/Visual_Studio/Tango.Settings/Tango.Settings.csproj
@@ -24,7 +24,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.SharedUI/Controls/HiveControl.xaml.cs b/Software/Visual_Studio/Tango.SharedUI/Controls/HiveControl.xaml.cs
index 81fc1250d..5fba6eaa0 100644
--- a/Software/Visual_Studio/Tango.SharedUI/Controls/HiveControl.xaml.cs
+++ b/Software/Visual_Studio/Tango.SharedUI/Controls/HiveControl.xaml.cs
@@ -25,6 +25,8 @@ namespace Tango.SharedUI.Controls
{
public event EventHandler<HexagonControl> HexagonSelected;
+ public event EventHandler HiveGenerated;
+
public ObservableCollection<HexagonControl> Hexagons
{
get { return (ObservableCollection<HexagonControl>)GetValue(HexagonsProperty); }
@@ -65,6 +67,21 @@ namespace Tango.SharedUI.Controls
public static readonly DependencyProperty CenterHexagonProperty =
DependencyProperty.Register("CenterHexagon", typeof(HexagonControl), typeof(HiveControl), new PropertyMetadata(null));
+ public int HiveWidth
+ {
+ get { return (int)GetValue(HiveWidthProperty); }
+ set { SetValue(HiveWidthProperty, value); }
+ }
+ public static readonly DependencyProperty HiveWidthProperty =
+ DependencyProperty.Register("HiveWidth", typeof(int), typeof(HiveControl), new PropertyMetadata(5));
+
+ public int HiveHeight
+ {
+ get { return (int)GetValue(HiveHeightProperty); }
+ set { SetValue(HiveHeightProperty, value); }
+ }
+ public static readonly DependencyProperty HiveHeightProperty =
+ DependencyProperty.Register("HiveHeight", typeof(int), typeof(HiveControl), new PropertyMetadata(5));
public HiveControl()
{
@@ -78,13 +95,10 @@ namespace Tango.SharedUI.Controls
this.Loaded += HiveControl_Loaded;
}
- public int HiveHeight { get; set; }
-
- public int HiveWidth { get; set; }
-
private void HiveControl_Loaded(object sender, RoutedEventArgs e)
{
GenerateHive();
+ HiveGenerated?.Invoke(this,new EventArgs());
}
private void GenerateHive()
@@ -155,7 +169,20 @@ namespace Tango.SharedUI.Controls
private void Hexagon_MouseUp(object sender, MouseButtonEventArgs e)
{
HexagonControl hexagon = sender as HexagonControl;
+ ToggleHexagonSelection(hexagon);
+ }
+ public void SelectHexagon(HexagonControl hexagon)
+ {
+ SelectedHexagons.Clear();
+ SelectedHexagons.Add(hexagon);
+ Hexagons.ToList().ForEach(x => x.IsSelected = false);
+ hexagon.IsSelected = true;
+ HexagonSelected?.Invoke(this, hexagon);
+ }
+
+ private void ToggleHexagonSelection(HexagonControl hexagon)
+ {
bool selected = !hexagon.IsSelected;
if (MaxSelections > Hexagons.Where(x => x.IsSelected).Count())
diff --git a/Software/Visual_Studio/Tango.SharedUI/Controls/TableGrid.cs b/Software/Visual_Studio/Tango.SharedUI/Controls/TableGrid.cs
new file mode 100644
index 000000000..454d8dfac
--- /dev/null
+++ b/Software/Visual_Studio/Tango.SharedUI/Controls/TableGrid.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace Tango.SharedUI.Controls
+{
+ public class TableGrid : Grid
+ {
+ public GridLength RowHeight
+ {
+ get { return (GridLength)GetValue(RowHeightProperty); }
+ set { SetValue(RowHeightProperty, value); }
+ }
+ public static readonly DependencyProperty RowHeightProperty =
+ DependencyProperty.Register("RowHeight", typeof(GridLength), typeof(TableGrid), new PropertyMetadata(new GridLength(1, GridUnitType.Star)));
+
+
+
+
+ public TableGrid()
+ {
+ ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Auto) });
+ ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
+ this.Loaded += TableGrid_Loaded;
+ }
+
+ private void TableGrid_Loaded(object sender, RoutedEventArgs e)
+ {
+ InvalidateGrid();
+ }
+
+ protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
+ {
+ base.OnVisualChildrenChanged(visualAdded, visualRemoved);
+ InvalidateGrid();
+ }
+
+ protected override Size ArrangeOverride(Size arrangeSize)
+ {
+ return base.ArrangeOverride(arrangeSize);
+ }
+
+ private void InvalidateGrid()
+ {
+ RowDefinitions.Clear();
+ RowDefinitions.Add(new RowDefinition() { Height = RowHeight });
+
+ int currentRow = 0;
+
+ for (int i = 0; i < Children.Count; i++)
+ {
+ SetRow(Children[i], currentRow);
+
+ if (i % 2 != 0)
+ {
+ SetColumn(Children[i], 1);
+ (Children[i] as FrameworkElement).Margin = new Thickness(20, 0, 0, 0);
+ currentRow++;
+ RowDefinitions.Add(new RowDefinition() { Height = RowHeight });
+ }
+
+ (Children[i] as FrameworkElement).VerticalAlignment = VerticalAlignment.Bottom;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.SharedUI/Helpers/PasswordHelper.cs b/Software/Visual_Studio/Tango.SharedUI/Helpers/PasswordHelper.cs
new file mode 100644
index 000000000..b87faf08f
--- /dev/null
+++ b/Software/Visual_Studio/Tango.SharedUI/Helpers/PasswordHelper.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace Tango.SharedUI.Helpers
+{
+ public class PasswordHelper
+ {
+ public static readonly DependencyProperty PasswordProperty =
+ DependencyProperty.RegisterAttached("Password",
+ typeof(string), typeof(PasswordHelper),
+ new FrameworkPropertyMetadata(string.Empty, OnPasswordPropertyChanged));
+
+ public static readonly DependencyProperty AttachProperty =
+ DependencyProperty.RegisterAttached("Attach",
+ typeof(bool), typeof(PasswordHelper), new PropertyMetadata(false, Attach));
+
+ private static readonly DependencyProperty IsUpdatingProperty =
+ DependencyProperty.RegisterAttached("IsUpdating", typeof(bool),
+ typeof(PasswordHelper));
+
+
+ public static void SetAttach(DependencyObject dp, bool value)
+ {
+ dp.SetValue(AttachProperty, value);
+ }
+
+ public static bool GetAttach(DependencyObject dp)
+ {
+ return (bool)dp.GetValue(AttachProperty);
+ }
+
+ public static string GetPassword(DependencyObject dp)
+ {
+ return (string)dp.GetValue(PasswordProperty);
+ }
+
+ public static void SetPassword(DependencyObject dp, string value)
+ {
+ dp.SetValue(PasswordProperty, value);
+ }
+
+ private static bool GetIsUpdating(DependencyObject dp)
+ {
+ return (bool)dp.GetValue(IsUpdatingProperty);
+ }
+
+ private static void SetIsUpdating(DependencyObject dp, bool value)
+ {
+ dp.SetValue(IsUpdatingProperty, value);
+ }
+
+ private static void OnPasswordPropertyChanged(DependencyObject sender,
+ DependencyPropertyChangedEventArgs e)
+ {
+ PasswordBox passwordBox = sender as PasswordBox;
+ passwordBox.PasswordChanged -= PasswordChanged;
+
+ if (!(bool)GetIsUpdating(passwordBox))
+ {
+ passwordBox.Password = (string)e.NewValue;
+ }
+ passwordBox.PasswordChanged += PasswordChanged;
+ }
+
+ private static void Attach(DependencyObject sender,
+ DependencyPropertyChangedEventArgs e)
+ {
+ PasswordBox passwordBox = sender as PasswordBox;
+
+ if (passwordBox == null)
+ return;
+
+ if ((bool)e.OldValue)
+ {
+ passwordBox.PasswordChanged -= PasswordChanged;
+ }
+
+ if ((bool)e.NewValue)
+ {
+ passwordBox.PasswordChanged += PasswordChanged;
+ }
+ }
+
+ private static void PasswordChanged(object sender, RoutedEventArgs e)
+ {
+ PasswordBox passwordBox = sender as PasswordBox;
+ SetIsUpdating(passwordBox, true);
+ SetPassword(passwordBox, passwordBox.Password);
+ SetIsUpdating(passwordBox, false);
+ }
+ }
+
+}
diff --git a/Software/Visual_Studio/Tango.SharedUI/Tango.SharedUI.csproj b/Software/Visual_Studio/Tango.SharedUI/Tango.SharedUI.csproj
index 856056cdc..49590dcf5 100644
--- a/Software/Visual_Studio/Tango.SharedUI/Tango.SharedUI.csproj
+++ b/Software/Visual_Studio/Tango.SharedUI/Tango.SharedUI.csproj
@@ -26,7 +26,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -86,6 +86,7 @@
<Compile Include="Controls\ScriptEditorControl.xaml.cs">
<DependentUpon>ScriptEditorControl.xaml</DependentUpon>
</Compile>
+ <Compile Include="Controls\TableGrid.cs" />
<Compile Include="Controls\TransitionTypeEnum.cs" />
<Compile Include="Controls\View.cs" />
<Compile Include="Converters\BooleanInverseConverter.cs" />
@@ -119,6 +120,7 @@
<Compile Include="Editors\ParameterizedEditor.xaml.cs">
<DependentUpon>ParameterizedEditor.xaml</DependentUpon>
</Compile>
+ <Compile Include="Helpers\PasswordHelper.cs" />
<Compile Include="Helpers\ResourceHelper.cs" />
<Compile Include="Helpers\UIHelper.cs" />
<Compile Include="IView.cs" />
diff --git a/Software/Visual_Studio/Tango.Stubs/StubBase.cs b/Software/Visual_Studio/Tango.Stubs/StubBase.cs
index ccc1a5496..ffebcb628 100644
--- a/Software/Visual_Studio/Tango.Stubs/StubBase.cs
+++ b/Software/Visual_Studio/Tango.Stubs/StubBase.cs
@@ -89,5 +89,10 @@ namespace Tango.Stubs
{
return typeof(MessageFactory).Assembly.GetTypes().Where(x => x.Namespace.Contains("Stubs") && x.Name.Contains("Request") && !x.Name.Contains("Reflection")).ToList();
}
+
+ public static List<Type> GetAvailableRequestResponseStubs()
+ {
+ return typeof(MessageFactory).Assembly.GetTypes().Where(x => x.Namespace.Contains("Stubs") && !x.Name.Contains("Reflection")).ToList();
+ }
}
}
diff --git a/Software/Visual_Studio/Tango.Stubs/Tango.Stubs.csproj b/Software/Visual_Studio/Tango.Stubs/Tango.Stubs.csproj
index 67713ba2b..015affaf3 100644
--- a/Software/Visual_Studio/Tango.Stubs/Tango.Stubs.csproj
+++ b/Software/Visual_Studio/Tango.Stubs/Tango.Stubs.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Synchronization/Tango.Synchronization.csproj b/Software/Visual_Studio/Tango.Synchronization/Tango.Synchronization.csproj
index 9ab584ad0..f8504f906 100644
--- a/Software/Visual_Studio/Tango.Synchronization/Tango.Synchronization.csproj
+++ b/Software/Visual_Studio/Tango.Synchronization/Tango.Synchronization.csproj
@@ -27,7 +27,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs
index 768f0914f..4a0b47fe4 100644
--- a/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs
+++ b/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs
@@ -186,7 +186,7 @@ namespace Tango.Transport.Adapters
{
read += _socket.GetStream().Read(data, read, Math.Min(_socket.Available, expectedSize - read));
- Thread.Sleep(2);
+ //Thread.Sleep(2);
if (State != TransportComponentState.Connected)
{
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs
index 019c7099d..99c6a7a49 100644
--- a/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs
+++ b/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs
@@ -163,7 +163,7 @@ namespace Tango.Transport.Adapters
{
read += _serialPort.Read(data, read, Math.Min(_serialPort.BytesToRead, expectedSize - read));
- Thread.Sleep(2);
+ //Thread.Sleep(2);
if (State != TransportComponentState.Connected)
{
diff --git a/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj b/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj
index 88e2a3b75..6db8faf4e 100644
--- a/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj
+++ b/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
index e9e3afc52..2ca9c51ba 100644
--- a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
+++ b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
@@ -414,7 +414,7 @@ namespace Tango.Transport
{
while (State == TransportComponentState.Connected)
{
- if (Adapter != null && _sendingQueue.Count > 0)
+ while (Adapter != null && _sendingQueue.Count > 0)
{
TransportMessageBase message;
if (_sendingQueue.TryDequeue(out message))
@@ -447,7 +447,8 @@ namespace Tango.Transport
}
}
- Thread.Sleep(1);
+ Thread.Sleep(10);
+
}
}
catch (Exception ex)
@@ -471,7 +472,7 @@ namespace Tango.Transport
{
byte[] data;
- if (Adapter != null && _arrivedResponses.Count > 0)
+ while (Adapter != null && _arrivedResponses.Count > 0)
{
if (_arrivedResponses.TryDequeue(out data))
{
@@ -566,7 +567,7 @@ namespace Tango.Transport
}
}
- Thread.Sleep(1);
+ Thread.Sleep(10);
}
}
catch (Exception ex)
diff --git a/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj b/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj
index d882f9f76..3845f1ecd 100644
--- a/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj
+++ b/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj
@@ -35,7 +35,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.Visuals/Tango.Visuals.csproj b/Software/Visual_Studio/Tango.Visuals/Tango.Visuals.csproj
index 53c87d0f5..fb377bbcd 100644
--- a/Software/Visual_Studio/Tango.Visuals/Tango.Visuals.csproj
+++ b/Software/Visual_Studio/Tango.Visuals/Tango.Visuals.csproj
@@ -27,7 +27,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Tango.sln b/Software/Visual_Studio/Tango.sln
index 8973f3988..bb416646e 100644
--- a/Software/Visual_Studio/Tango.sln
+++ b/Software/Visual_Studio/Tango.sln
@@ -155,6 +155,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.BrushPicker", "Tango.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.MachineStudio.ColorLab", "MachineStudio\Modules\Tango.MachineStudio.ColorLab\Tango.MachineStudio.ColorLab.csproj", "{4D183ACA-552B-4135-AE81-7C5A8E5FC3B1}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.MachineStudio.UsersAndRoles", "MachineStudio\Modules\Tango.MachineStudio.UsersAndRoles\Tango.MachineStudio.UsersAndRoles.csproj", "{88028F14-0028-4DED-B119-19B8EE23CF32}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.CircularGauge", "Tango.CircularGauge\Tango.CircularGauge.csproj", "{6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -345,7 +349,6 @@ Global
{FB82AA6B-1652-452C-8235-4FB2E524FBC0}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
{FB82AA6B-1652-452C-8235-4FB2E524FBC0}.DefaultBuild|x86.Build.0 = Debug|Any CPU
{FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release|Any CPU.Build.0 = Release|Any CPU
{FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release|ARM.ActiveCfg = Release|Any CPU
{FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release|ARM.Build.0 = Release|Any CPU
{FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release|ARM64.ActiveCfg = Release|Any CPU
@@ -643,7 +646,6 @@ Global
{ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
{ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.DefaultBuild|x86.Build.0 = Debug|Any CPU
{ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release|Any CPU.Build.0 = Release|Any CPU
{ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release|ARM.ActiveCfg = Release|Any CPU
{ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release|ARM.Build.0 = Release|Any CPU
{ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release|ARM64.ActiveCfg = Release|Any CPU
@@ -973,7 +975,6 @@ Global
{EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
{EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.DefaultBuild|x86.Build.0 = Debug|Any CPU
{EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release|Any CPU.Build.0 = Release|Any CPU
{EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release|ARM.ActiveCfg = Release|Any CPU
{EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release|ARM.Build.0 = Release|Any CPU
{EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release|ARM64.ActiveCfg = Release|Any CPU
@@ -1184,6 +1185,7 @@ Global
{625B2A26-97A9-45C9-8BCF-6BD30F593E17}.DefaultBuild|x86.Build.0 = Debug|Win32
{625B2A26-97A9-45C9-8BCF-6BD30F593E17}.DefaultBuild|x86.Deploy.0 = Debug|Win32
{625B2A26-97A9-45C9-8BCF-6BD30F593E17}.Release|Any CPU.ActiveCfg = Release|Win32
+ {625B2A26-97A9-45C9-8BCF-6BD30F593E17}.Release|Any CPU.Build.0 = Release|Win32
{625B2A26-97A9-45C9-8BCF-6BD30F593E17}.Release|ARM.ActiveCfg = Release|Win32
{625B2A26-97A9-45C9-8BCF-6BD30F593E17}.Release|ARM64.ActiveCfg = Release|Win32
{625B2A26-97A9-45C9-8BCF-6BD30F593E17}.Release|x64.ActiveCfg = Release|x64
@@ -1436,7 +1438,6 @@ Global
{8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
{8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.DefaultBuild|x86.Build.0 = Debug|Any CPU
{8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release|Any CPU.Build.0 = Release|Any CPU
{8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release|ARM.ActiveCfg = Release|Any CPU
{8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release|ARM.Build.0 = Release|Any CPU
{8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release|ARM64.ActiveCfg = Release|Any CPU
@@ -1526,7 +1527,6 @@ Global
{5B954D98-4020-4AC6-939F-C52B5646E8E6}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
{5B954D98-4020-4AC6-939F-C52B5646E8E6}.DefaultBuild|x86.Build.0 = Debug|Any CPU
{5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release|Any CPU.Build.0 = Release|Any CPU
{5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release|ARM.ActiveCfg = Release|Any CPU
{5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release|ARM.Build.0 = Release|Any CPU
{5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release|ARM64.ActiveCfg = Release|Any CPU
@@ -1705,8 +1705,7 @@ Global
{E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.DefaultBuild|x64.Build.0 = Debug|Any CPU
{E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
{E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.DefaultBuild|x86.Build.0 = Debug|Any CPU
- {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release|ARM.ActiveCfg = Release|Any CPU
{E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release|ARM.Build.0 = Release|Any CPU
{E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release|ARM64.ActiveCfg = Release|Any CPU
@@ -1736,7 +1735,6 @@ Global
{9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
{9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.DefaultBuild|x86.Build.0 = Debug|Any CPU
{9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release|Any CPU.Build.0 = Release|Any CPU
{9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release|ARM.ActiveCfg = Release|Any CPU
{9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release|ARM.Build.0 = Release|Any CPU
{9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release|ARM64.ActiveCfg = Release|Any CPU
@@ -1777,6 +1775,7 @@ Global
{BD30C7BD-9230-4ED7-B581-11F14041909D}.DefaultBuild|x86.ActiveCfg = Debug|Win32
{BD30C7BD-9230-4ED7-B581-11F14041909D}.DefaultBuild|x86.Build.0 = Debug|Win32
{BD30C7BD-9230-4ED7-B581-11F14041909D}.Release|Any CPU.ActiveCfg = Release|Win32
+ {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release|Any CPU.Build.0 = Release|Win32
{BD30C7BD-9230-4ED7-B581-11F14041909D}.Release|ARM.ActiveCfg = Release|Win32
{BD30C7BD-9230-4ED7-B581-11F14041909D}.Release|ARM64.ActiveCfg = Release|Win32
{BD30C7BD-9230-4ED7-B581-11F14041909D}.Release|x64.ActiveCfg = Release|Win32
@@ -1857,7 +1856,6 @@ Global
{5AFD5B7D-757A-400C-B0C9-118834F5D67E}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
{5AFD5B7D-757A-400C-B0C9-118834F5D67E}.DefaultBuild|x86.Build.0 = Debug|Any CPU
{5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release|Any CPU.Build.0 = Release|Any CPU
{5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release|ARM.ActiveCfg = Release|Any CPU
{5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release|ARM.Build.0 = Release|Any CPU
{5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release|ARM64.ActiveCfg = Release|Any CPU
@@ -1914,6 +1912,7 @@ Global
{A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.DefaultBuild|x86.ActiveCfg = Debug|Win32
{A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.DefaultBuild|x86.Build.0 = Debug|Win32
{A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release|Any CPU.ActiveCfg = Release|Win32
+ {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release|Any CPU.Build.0 = Release|Win32
{A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release|ARM.ActiveCfg = Release|Win32
{A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release|ARM64.ActiveCfg = Release|Win32
{A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release|x64.ActiveCfg = Release|x64
@@ -1941,7 +1940,6 @@ Global
{793FBFC1-549E-458B-A52F-784BD4F28586}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
{793FBFC1-549E-458B-A52F-784BD4F28586}.DefaultBuild|x86.Build.0 = Debug|Any CPU
{793FBFC1-549E-458B-A52F-784BD4F28586}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {793FBFC1-549E-458B-A52F-784BD4F28586}.Release|Any CPU.Build.0 = Release|Any CPU
{793FBFC1-549E-458B-A52F-784BD4F28586}.Release|ARM.ActiveCfg = Release|Any CPU
{793FBFC1-549E-458B-A52F-784BD4F28586}.Release|ARM.Build.0 = Release|Any CPU
{793FBFC1-549E-458B-A52F-784BD4F28586}.Release|ARM64.ActiveCfg = Release|Any CPU
@@ -2040,6 +2038,66 @@ Global
{4D183ACA-552B-4135-AE81-7C5A8E5FC3B1}.Release|x64.Build.0 = Release|Any CPU
{4D183ACA-552B-4135-AE81-7C5A8E5FC3B1}.Release|x86.ActiveCfg = Release|Any CPU
{4D183ACA-552B-4135-AE81-7C5A8E5FC3B1}.Release|x86.Build.0 = Release|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Debug|ARM.Build.0 = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Debug|x64.Build.0 = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Debug|x86.Build.0 = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|ARM.ActiveCfg = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|ARM.Build.0 = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|ARM64.ActiveCfg = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|ARM64.Build.0 = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|x64.Build.0 = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|x86.Build.0 = Debug|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|Any CPU.Build.0 = Release|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|ARM.ActiveCfg = Release|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|ARM.Build.0 = Release|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|ARM64.Build.0 = Release|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|x64.ActiveCfg = Release|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|x64.Build.0 = Release|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|x86.ActiveCfg = Release|Any CPU
+ {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|x86.Build.0 = Release|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Debug|ARM.Build.0 = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Debug|x64.Build.0 = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Debug|x86.Build.0 = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|ARM.ActiveCfg = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|ARM.Build.0 = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|ARM64.ActiveCfg = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|ARM64.Build.0 = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|x64.Build.0 = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|x86.Build.0 = Debug|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|ARM.ActiveCfg = Release|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|ARM.Build.0 = Release|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|ARM64.Build.0 = Release|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|x64.ActiveCfg = Release|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|x64.Build.0 = Release|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|x86.ActiveCfg = Release|Any CPU
+ {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -2086,6 +2144,7 @@ Global
{793FBFC1-549E-458B-A52F-784BD4F28586} = {5F6BBAA8-EAD0-4B18-97E5-55B4F56DD760}
{BDBBE284-F564-4F51-AF41-3DF0434CEC62} = {34839F9A-61D3-4ED3-B3F7-7DA3424CB0B6}
{4D183ACA-552B-4135-AE81-7C5A8E5FC3B1} = {B2AF4F3F-2828-47C3-8F3E-A0EA0BD66FF8}
+ {88028F14-0028-4DED-B119-19B8EE23CF32} = {B2AF4F3F-2828-47C3-8F3E-A0EA0BD66FF8}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6}
diff --git a/Software/Visual_Studio/Utilities/Tango.DBObservablesGenerator.CLI/Tango.DBObservablesGenerator.CLI.csproj b/Software/Visual_Studio/Utilities/Tango.DBObservablesGenerator.CLI/Tango.DBObservablesGenerator.CLI.csproj
index 87baf3a3f..73b66321b 100644
--- a/Software/Visual_Studio/Utilities/Tango.DBObservablesGenerator.CLI/Tango.DBObservablesGenerator.CLI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.DBObservablesGenerator.CLI/Tango.DBObservablesGenerator.CLI.csproj
@@ -26,7 +26,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Utilities/Tango.EmbroideryViewer/Tango.EmbroideryViewer.csproj b/Software/Visual_Studio/Utilities/Tango.EmbroideryViewer/Tango.EmbroideryViewer.csproj
index 869a4c02b..061bed515 100644
--- a/Software/Visual_Studio/Utilities/Tango.EmbroideryViewer/Tango.EmbroideryViewer.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.EmbroideryViewer/Tango.EmbroideryViewer.csproj
@@ -28,7 +28,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Utilities/Tango.MachineEM.UI/Tango.MachineEM.UI.csproj b/Software/Visual_Studio/Utilities/Tango.MachineEM.UI/Tango.MachineEM.UI.csproj
index ff4ab4a62..fe2f7934f 100644
--- a/Software/Visual_Studio/Utilities/Tango.MachineEM.UI/Tango.MachineEM.UI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.MachineEM.UI/Tango.MachineEM.UI.csproj
@@ -28,7 +28,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Utilities/Tango.PMRGenerator.CLI/Program.cs b/Software/Visual_Studio/Utilities/Tango.PMRGenerator.CLI/Program.cs
index afbdde61b..b782952a9 100644
--- a/Software/Visual_Studio/Utilities/Tango.PMRGenerator.CLI/Program.cs
+++ b/Software/Visual_Studio/Utilities/Tango.PMRGenerator.CLI/Program.cs
@@ -33,6 +33,11 @@ namespace Tango.PMRGenerator.CLI
GenerateWindingMethods(db, pmrFolder);
GenerateSpoolTypes(db, pmrFolder);
GenerateProcessParameters(db, pmrFolder);
+
+ GenerateColorLabColorSpaces(db, pmrFolder);
+ GenerateColorLabLiquidTypes(db, pmrFolder);
+ GenerateDiagnosticsValueComponents(db, pmrFolder);
+ GenerateDiagnosticsMonitors(db, pmrFolder);
}
Console.WriteLine("Done");
@@ -52,6 +57,7 @@ namespace Tango.PMRGenerator.CLI
{
Name = field.Name.Replace(" ", ""),
Value = field.Code,
+ Description = field.Description,
});
}
@@ -61,11 +67,11 @@ namespace Tango.PMRGenerator.CLI
messageFile.Package = "Tango.PMR.Hardware";
messageFile.Imports.Add("HardwareMotorType.proto");
- messageFile.Properties.Add(new Property("HardwareMotorType", "HardwareMotorType"));
+ messageFile.Properties.Add(new ProtoProperty("HardwareMotorType", "HardwareMotorType"));
foreach (var prop in typeof(HardwareMotor).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly).Where(x => x.PropertyType.IsPrimitive))
{
- messageFile.Properties.Add(new Property(prop.Name, CoercePropertyType(prop.PropertyType)));
+ messageFile.Properties.Add(new ProtoProperty(prop.Name, CoercePropertyType(prop.PropertyType)));
}
String enumString = enumFile.GenerateCode();
@@ -89,6 +95,7 @@ namespace Tango.PMRGenerator.CLI
{
Name = field.Name.Replace(" ", ""),
Value = field.Code,
+ Description = field.Description,
});
}
@@ -99,11 +106,11 @@ namespace Tango.PMRGenerator.CLI
messageFile.Package = "Tango.PMR.Hardware";
messageFile.Imports.Add("HardwareDancerType.proto");
- messageFile.Properties.Add(new Property("HardwareDancerType", "HardwareDancerType"));
+ messageFile.Properties.Add(new ProtoProperty("HardwareDancerType", "HardwareDancerType"));
foreach (var prop in typeof(HardwareDancer).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly).Where(x => x.PropertyType.IsPrimitive))
{
- messageFile.Properties.Add(new Property(prop.Name, CoercePropertyType(prop.PropertyType)));
+ messageFile.Properties.Add(new ProtoProperty(prop.Name, CoercePropertyType(prop.PropertyType)));
}
String enumString = enumFile.GenerateCode();
@@ -127,6 +134,7 @@ namespace Tango.PMRGenerator.CLI
{
Name = field.Name.Replace(" ", ""),
Value = field.Code,
+ Description = field.Description,
});
}
@@ -137,11 +145,11 @@ namespace Tango.PMRGenerator.CLI
messageFile.Package = "Tango.PMR.Hardware";
messageFile.Imports.Add("HardwarePidControlType.proto");
- messageFile.Properties.Add(new Property("HardwarePidControlType", "HardwarePidControlType"));
+ messageFile.Properties.Add(new ProtoProperty("HardwarePidControlType", "HardwarePidControlType"));
foreach (var prop in typeof(HardwarePidControl).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly).Where(x => x.PropertyType.IsPrimitive))
{
- messageFile.Properties.Add(new Property(prop.Name, CoercePropertyType(prop.PropertyType)));
+ messageFile.Properties.Add(new ProtoProperty(prop.Name, CoercePropertyType(prop.PropertyType)));
}
String enumString = enumFile.GenerateCode();
@@ -175,13 +183,13 @@ namespace Tango.PMRGenerator.CLI
messageFile.Package = "Tango.PMR.Hardware";
messageFile.Imports.Add("HardwareDispenserType.proto");
- messageFile.Properties.Add(new Property("HardwareDispenserType", "HardwareDispenserType"));
+ messageFile.Properties.Add(new ProtoProperty("HardwareDispenserType", "HardwareDispenserType"));
foreach (var prop in typeof(DispenserType).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly).Where(x => x.PropertyType.IsPrimitive))
{
if (prop.Name != "Name" && prop.Name != "Code")
{
- messageFile.Properties.Add(new Property(prop.Name, CoercePropertyType(prop.PropertyType)));
+ messageFile.Properties.Add(new ProtoProperty(prop.Name, CoercePropertyType(prop.PropertyType)));
}
}
@@ -206,6 +214,7 @@ namespace Tango.PMRGenerator.CLI
{
Name = field.Name.Replace(" ", ""),
Value = field.Code,
+ Description = field.Description,
});
}
@@ -215,11 +224,11 @@ namespace Tango.PMRGenerator.CLI
messageFile.Package = "Tango.PMR.Hardware";
messageFile.Imports.Add("HardwareWinderType.proto");
- messageFile.Properties.Add(new Property("HardwareWinderType", "HardwareWinderType"));
+ messageFile.Properties.Add(new ProtoProperty("HardwareWinderType", "HardwareWinderType"));
foreach (var prop in typeof(HardwareWinder).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly).Where(x => x.PropertyType.IsPrimitive))
{
- messageFile.Properties.Add(new Property(prop.Name, CoercePropertyType(prop.PropertyType)));
+ messageFile.Properties.Add(new ProtoProperty(prop.Name, CoercePropertyType(prop.PropertyType)));
}
String enumString = enumFile.GenerateCode();
@@ -265,6 +274,7 @@ namespace Tango.PMRGenerator.CLI
{
Name = field.Name.Replace(" ", ""),
Value = field.Code,
+ Description = field.Description,
});
}
@@ -296,13 +306,13 @@ namespace Tango.PMRGenerator.CLI
messageFile.Package = "Tango.PMR.Printing";
messageFile.Imports.Add("JobSpoolType.proto");
- messageFile.Properties.Add(new Property("JobSpoolType", "JobSpoolType"));
+ messageFile.Properties.Add(new ProtoProperty("JobSpoolType", "JobSpoolType"));
foreach (var prop in typeof(SpoolType).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly).Where(x => x.PropertyType.IsPrimitive))
{
if (prop.Name != "Name" && prop.Name != "Code")
{
- messageFile.Properties.Add(new Property(prop.Name, CoercePropertyType(prop.PropertyType)));
+ messageFile.Properties.Add(new ProtoProperty(prop.Name, CoercePropertyType(prop.PropertyType)));
}
}
@@ -322,7 +332,7 @@ namespace Tango.PMRGenerator.CLI
foreach (var prop in typeof(ProcessParametersTable).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly).Where(x => x.PropertyType.IsPrimitive))
{
- messageFile.Properties.Add(new Property(prop.Name, CoercePropertyType(prop.PropertyType)));
+ messageFile.Properties.Add(new ProtoProperty(prop.Name, CoercePropertyType(prop.PropertyType)));
}
String messageString = messageFile.GenerateCode();
@@ -330,6 +340,108 @@ namespace Tango.PMRGenerator.CLI
File.WriteAllText(Path.Combine(pmrFolder, "Printing", messageFile.Name + ".proto"), messageString);
}
+ private static void GenerateColorLabColorSpaces(ObservablesContext db, String pmrFolder)
+ {
+ Console.WriteLine("Generating ColorLab Color Spaces...");
+
+ ProtoEnumFile enumFile = new ProtoEnumFile();
+ enumFile.Name = "ColorSpace";
+ enumFile.Package = "Tango.PMR.ColorLab";
+
+ foreach (var field in db.ColorSpaces.ToList().OrderBy(x => x.Code))
+ {
+ enumFile.Fields.Add(new EnumerationField()
+ {
+ Name = field.Name.Replace(" ", ""),
+ Value = field.Code,
+ });
+ }
+
+ String enumString = enumFile.GenerateCode();
+
+ File.WriteAllText(Path.Combine(pmrFolder, "ColorLab", enumFile.Name + ".proto"), enumString);
+ }
+
+ private static void GenerateColorLabLiquidTypes(ObservablesContext db, String pmrFolder)
+ {
+ Console.WriteLine("Generating ColorLab Liquid Types...");
+
+ ProtoEnumFile enumFile = new ProtoEnumFile();
+ enumFile.Name = "LiquidType";
+ enumFile.Package = "Tango.PMR.ColorLab";
+
+ foreach (var field in db.LiquidTypes.ToList().OrderBy(x => x.Code))
+ {
+ enumFile.Fields.Add(new EnumerationField()
+ {
+ Name = field.Name.Replace(" ", ""),
+ Value = field.Code,
+ });
+ }
+
+ String enumString = enumFile.GenerateCode();
+
+ File.WriteAllText(Path.Combine(pmrFolder, "ColorLab", enumFile.Name + ".proto"), enumString);
+ }
+
+ private static void GenerateDiagnosticsValueComponents(ObservablesContext db, String pmrFolder)
+ {
+ Console.WriteLine("Generating Diagnostics Value Component...");
+
+ ProtoEnumFile enumFile = new ProtoEnumFile();
+ enumFile.Name = "ValueComponent";
+ enumFile.Package = "Tango.PMR.Diagnostics";
+
+ foreach (var field in db.TechControllers.ToList().OrderBy(x => x.Code))
+ {
+ enumFile.Fields.Add(new EnumerationField()
+ {
+ Name = field.Name.Replace(" ", ""),
+ Description = field.Description + String.Format(" (Min = {0}, Max = {1})", field.Min, field.Max),
+ Value = field.Code,
+ });
+ }
+
+ String enumString = enumFile.GenerateCode();
+
+ File.WriteAllText(Path.Combine(pmrFolder, "Diagnostics", enumFile.Name + ".proto"), enumString);
+ }
+
+ private static void GenerateDiagnosticsMonitors(ObservablesContext db, String pmrFolder)
+ {
+ Console.WriteLine("Generating Monitors...");
+
+ ProtoMessageFile messageFile = new ProtoMessageFile();
+ messageFile.Name = "DiagnosticsMonitors";
+ messageFile.Package = "Tango.PMR.Diagnostics";
+
+ messageFile.Imports.Add("DoubleArray.proto");
+
+ foreach (var monitor in db.TechMonitors.ToList().OrderBy(x => x.Code))
+ {
+ var prop = new ProtoProperty();
+ prop.Name = monitor.Name.Replace(" ", "");
+ prop.Description = monitor.Description + String.Format(" (Min = {0}, Max = {1}, PPF = {2})", monitor.Min, monitor.Max, monitor.PointsPerFrame);
+ prop.Repeated = true;
+
+ if (!monitor.MultiChannel)
+ {
+ prop.Type = "double";
+ }
+ else
+ {
+ prop.Type = "DoubleArray";
+ prop.Description += String.Format(" Channel Count = {0}", monitor.ChannelCount);
+ }
+
+ messageFile.Properties.Add(prop);
+ }
+
+ String messageString = messageFile.GenerateCode();
+
+ File.WriteAllText(Path.Combine(pmrFolder, "Diagnostics", messageFile.Name + ".proto"), messageString);
+ }
+
private static String CoercePropertyType(Type type)
{
if (type == typeof(bool))
diff --git a/Software/Visual_Studio/Utilities/Tango.PMRGenerator.CLI/Tango.PMRGenerator.CLI.csproj b/Software/Visual_Studio/Utilities/Tango.PMRGenerator.CLI/Tango.PMRGenerator.CLI.csproj
index be6e31ea1..b242b0c06 100644
--- a/Software/Visual_Studio/Utilities/Tango.PMRGenerator.CLI/Tango.PMRGenerator.CLI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.PMRGenerator.CLI/Tango.PMRGenerator.CLI.csproj
@@ -26,7 +26,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Utilities/Tango.Protobuf.CLI/Tango.Protobuf.CLI.csproj b/Software/Visual_Studio/Utilities/Tango.Protobuf.CLI/Tango.Protobuf.CLI.csproj
index f97eaa932..fdee6d04f 100644
--- a/Software/Visual_Studio/Utilities/Tango.Protobuf.CLI/Tango.Protobuf.CLI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.Protobuf.CLI/Tango.Protobuf.CLI.csproj
@@ -26,7 +26,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Utilities/Tango.Protobuf.UI/Tango.Protobuf.UI.csproj b/Software/Visual_Studio/Utilities/Tango.Protobuf.UI/Tango.Protobuf.UI.csproj
index e767b2400..c39abb2fb 100644
--- a/Software/Visual_Studio/Utilities/Tango.Protobuf.UI/Tango.Protobuf.UI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.Protobuf.UI/Tango.Protobuf.UI.csproj
@@ -28,7 +28,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Utilities/Tango.SQLiteGenerator.CLI/Tango.SQLiteGenerator.CLI.csproj b/Software/Visual_Studio/Utilities/Tango.SQLiteGenerator.CLI/Tango.SQLiteGenerator.CLI.csproj
index 2e9420527..46b458c90 100644
--- a/Software/Visual_Studio/Utilities/Tango.SQLiteGenerator.CLI/Tango.SQLiteGenerator.CLI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.SQLiteGenerator.CLI/Tango.SQLiteGenerator.CLI.csproj
@@ -26,7 +26,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Utilities/Tango.ShortcutGenerator.CLI/Tango.ShortcutGenerator.CLI.csproj b/Software/Visual_Studio/Utilities/Tango.ShortcutGenerator.CLI/Tango.ShortcutGenerator.CLI.csproj
index b69dc4a4c..1f2a36176 100644
--- a/Software/Visual_Studio/Utilities/Tango.ShortcutGenerator.CLI/Tango.ShortcutGenerator.CLI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.ShortcutGenerator.CLI/Tango.ShortcutGenerator.CLI.csproj
@@ -26,7 +26,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.CLI/Tango.Stubs.CLI.csproj b/Software/Visual_Studio/Utilities/Tango.Stubs.CLI/Tango.Stubs.CLI.csproj
index 20787bbbb..c9fffe6dd 100644
--- a/Software/Visual_Studio/Utilities/Tango.Stubs.CLI/Tango.Stubs.CLI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.Stubs.CLI/Tango.Stubs.CLI.csproj
@@ -28,7 +28,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.Installer/Tango.Stubs.Installer.vdproj b/Software/Visual_Studio/Utilities/Tango.Stubs.Installer/Tango.Stubs.Installer.vdproj
index a3e7a9f0d..94fe4a1bf 100644
--- a/Software/Visual_Studio/Utilities/Tango.Stubs.Installer/Tango.Stubs.Installer.vdproj
+++ b/Software/Visual_Studio/Utilities/Tango.Stubs.Installer/Tango.Stubs.Installer.vdproj
@@ -15,272 +15,80 @@
{
"Entry"
{
- "MsmKey" = "8:_011E4FBBC5C8A2D0B69D7396BB68E588"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_011E4FBBC5C8A2D0B69D7396BB68E588"
- "OwnerKey" = "8:_09D3C4AB243038764D7428FA4ECD321C"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_011E4FBBC5C8A2D0B69D7396BB68E588"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_011E4FBBC5C8A2D0B69D7396BB68E588"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_02894B9DAB8C1E69F665E0408C9901BF"
- "OwnerKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_04774E07A11AB771AEB1E00CF69FE931"
- "OwnerKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_04774E07A11AB771AEB1E00CF69FE931"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_04774E07A11AB771AEB1E00CF69FE931"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_04774E07A11AB771AEB1E00CF69FE931"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_065F6BA03C582BF7C3553DB9B3F563A5"
- "OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
"MsmKey" = "8:_0712ECEB4DE24D8B9E9936D94BDC61B4"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_09D3C4AB243038764D7428FA4ECD321C"
- "OwnerKey" = "8:_0712ECEB4DE24D8B9E9936D94BDC61B4"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_09D3C4AB243038764D7428FA4ECD321C"
- "OwnerKey" = "8:_73A191186BF426331AD533F7B8FE7B35"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
- "OwnerKey" = "8:_09D3C4AB243038764D7428FA4ECD321C"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
- "OwnerKey" = "8:_09D3C4AB243038764D7428FA4ECD321C"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
"MsmKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_1237B704F91F5863D7A8712599F76BEF"
- "OwnerKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_206A4DF263C6795E8B431691A1797973"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_24CF3526503A71076261C556A8D2B0F6"
+ "MsmKey" = "8:_2DC8C87C2D90158064A700C697B49957"
"OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_24CF3526503A71076261C556A8D2B0F6"
+ "MsmKey" = "8:_2DC8C87C2D90158064A700C697B49957"
"OwnerKey" = "8:_E6DED22BB43E475B9794561C384D2713"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_24CF3526503A71076261C556A8D2B0F6"
- "OwnerKey" = "8:_455470118F61E20DD1B47E1B5F2CD07E"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_24CF3526503A71076261C556A8D2B0F6"
- "OwnerKey" = "8:_065F6BA03C582BF7C3553DB9B3F563A5"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_27A0728EBCD8D8D764810B9089B94964"
- "OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_28B55C31B3EDD1E5B51ADE3DF9ED2EBE"
- "OwnerKey" = "8:_455470118F61E20DD1B47E1B5F2CD07E"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
- "OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
- "OwnerKey" = "8:_E6DED22BB43E475B9794561C384D2713"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
- "OwnerKey" = "8:_455470118F61E20DD1B47E1B5F2CD07E"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
- "OwnerKey" = "8:_065F6BA03C582BF7C3553DB9B3F563A5"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
- "OwnerKey" = "8:_FD63FD7AD44D6BD26EED625F3EA5DAA9"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_34792E5BC01BD47CBA3200D0EC40E0D6"
- "OwnerKey" = "8:_09D3C4AB243038764D7428FA4ECD321C"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_34792E5BC01BD47CBA3200D0EC40E0D6"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_34792E5BC01BD47CBA3200D0EC40E0D6"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_3AECB6C039716AC5DBC0F3D16C97DD87"
- "OwnerKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_3AECB6C039716AC5DBC0F3D16C97DD87"
- "OwnerKey" = "8:_09D3C4AB243038764D7428FA4ECD321C"
+ "MsmKey" = "8:_2DC8C87C2D90158064A700C697B49957"
+ "OwnerKey" = "8:_92474495A2F0D65A21D2BFF4587358D8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_3AECB6C039716AC5DBC0F3D16C97DD87"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
+ "MsmKey" = "8:_2DC8C87C2D90158064A700C697B49957"
+ "OwnerKey" = "8:_94CDF51D67BB69C2699CEC4485EBCA30"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_3AECB6C039716AC5DBC0F3D16C97DD87"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
+ "MsmKey" = "8:_2DC8C87C2D90158064A700C697B49957"
+ "OwnerKey" = "8:_5397E5B2CD05015FD556CF7136D97D21"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_3AECB6C039716AC5DBC0F3D16C97DD87"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "MsmKey" = "8:_2DC8C87C2D90158064A700C697B49957"
+ "OwnerKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_3AECB6C039716AC5DBC0F3D16C97DD87"
- "OwnerKey" = "8:_6A593C6C7F92CA0166D5863B200AA05D"
+ "MsmKey" = "8:_37EC5D1BE221C8E104929A1B70B2661E"
+ "OwnerKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_3BA9A53EB9BA38CAE59AE79DD57216DA"
- "OwnerKey" = "8:_FD63FD7AD44D6BD26EED625F3EA5DAA9"
+ "MsmKey" = "8:_5397E5B2CD05015FD556CF7136D97D21"
+ "OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_455470118F61E20DD1B47E1B5F2CD07E"
- "OwnerKey" = "8:_065F6BA03C582BF7C3553DB9B3F563A5"
+ "MsmKey" = "8:_5397E5B2CD05015FD556CF7136D97D21"
+ "OwnerKey" = "8:_E6DED22BB43E475B9794561C384D2713"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_455470118F61E20DD1B47E1B5F2CD07E"
- "OwnerKey" = "8:_E6DED22BB43E475B9794561C384D2713"
+ "MsmKey" = "8:_5397E5B2CD05015FD556CF7136D97D21"
+ "OwnerKey" = "8:_92474495A2F0D65A21D2BFF4587358D8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_455470118F61E20DD1B47E1B5F2CD07E"
- "OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
+ "MsmKey" = "8:_5397E5B2CD05015FD556CF7136D97D21"
+ "OwnerKey" = "8:_94CDF51D67BB69C2699CEC4485EBCA30"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -291,212 +99,146 @@
}
"Entry"
{
- "MsmKey" = "8:_6A593C6C7F92CA0166D5863B200AA05D"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_6EDA9B68CBA90E9D08C225E64882A91A"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_73A191186BF426331AD533F7B8FE7B35"
- "OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_83838CE7A607B1C85B1D3E962EBF13AD"
- "OwnerKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_950EEF994AA25A7143EC3BCC121B5474"
+ "MsmKey" = "8:_6290C6253BE08D5AEAF445DC538F5A32"
"OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_950EEF994AA25A7143EC3BCC121B5474"
- "OwnerKey" = "8:_E6DED22BB43E475B9794561C384D2713"
+ "MsmKey" = "8:_65CE51F98CEBE9E3D46589DB414FAA93"
+ "OwnerKey" = "8:_9E54529BF03690F97BEE24C45258265B"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_950EEF994AA25A7143EC3BCC121B5474"
- "OwnerKey" = "8:_455470118F61E20DD1B47E1B5F2CD07E"
+ "MsmKey" = "8:_65CE51F98CEBE9E3D46589DB414FAA93"
+ "OwnerKey" = "8:_72B65244C4FF9BF01D372402C3CE52C5"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_950EEF994AA25A7143EC3BCC121B5474"
- "OwnerKey" = "8:_065F6BA03C582BF7C3553DB9B3F563A5"
+ "MsmKey" = "8:_72B65244C4FF9BF01D372402C3CE52C5"
+ "OwnerKey" = "8:_92474495A2F0D65A21D2BFF4587358D8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_950EEF994AA25A7143EC3BCC121B5474"
- "OwnerKey" = "8:_24CF3526503A71076261C556A8D2B0F6"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_950EEF994AA25A7143EC3BCC121B5474"
- "OwnerKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_9B73A2245EE7C4F9AB0977E14A7687AB"
- "OwnerKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_9B73A2245EE7C4F9AB0977E14A7687AB"
- "OwnerKey" = "8:_455470118F61E20DD1B47E1B5F2CD07E"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_9B73A2245EE7C4F9AB0977E14A7687AB"
- "OwnerKey" = "8:_065F6BA03C582BF7C3553DB9B3F563A5"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_9B73A2245EE7C4F9AB0977E14A7687AB"
- "OwnerKey" = "8:_27A0728EBCD8D8D764810B9089B94964"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_A304CEC70994BBC8BE642A6D2A00C301"
+ "MsmKey" = "8:_78C9B7DB89C8CFF3E6F812DBDAF18DC7"
"OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
+ "MsmKey" = "8:_8B8BABD8173D326B3175B52925968439"
+ "OwnerKey" = "8:_78C9B7DB89C8CFF3E6F812DBDAF18DC7"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
+ "MsmKey" = "8:_8F0D060313A40E3D6C4B196C5819AA1F"
+ "OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "OwnerKey" = "8:_09D3C4AB243038764D7428FA4ECD321C"
+ "MsmKey" = "8:_92474495A2F0D65A21D2BFF4587358D8"
+ "OwnerKey" = "8:_94CDF51D67BB69C2699CEC4485EBCA30"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_A763E0945B5DF943AFC202393056F34F"
- "OwnerKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
+ "MsmKey" = "8:_92474495A2F0D65A21D2BFF4587358D8"
+ "OwnerKey" = "8:_E6DED22BB43E475B9794561C384D2713"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_BF01E96BB3B7FA07DDE0651D59B2C1C8"
- "OwnerKey" = "8:_A304CEC70994BBC8BE642A6D2A00C301"
+ "MsmKey" = "8:_92474495A2F0D65A21D2BFF4587358D8"
+ "OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_BF62E984AB706A9532C332E9E71B18BC"
- "OwnerKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
+ "MsmKey" = "8:_94CDF51D67BB69C2699CEC4485EBCA30"
+ "OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_C00C2B072AD4B5A2E97117F31DA5BF4D"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
+ "MsmKey" = "8:_9E54529BF03690F97BEE24C45258265B"
+ "OwnerKey" = "8:_94CDF51D67BB69C2699CEC4485EBCA30"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_C00C2B072AD4B5A2E97117F31DA5BF4D"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "MsmKey" = "8:_9E54529BF03690F97BEE24C45258265B"
+ "OwnerKey" = "8:_72B65244C4FF9BF01D372402C3CE52C5"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_C3653413D52CF13A3AC1C694364A8882"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "MsmKey" = "8:_A09EFD9A2681B7EEE293BB3C3E00C524"
+ "OwnerKey" = "8:_E8DB13B92FF4C290BF9E84F6AD1DE386"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_C938B65796CF5490A0CC3DA14C718F01"
+ "MsmKey" = "8:_B903CCAAE77F80B733B5FF7D00A8E88A"
"OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_C938B65796CF5490A0CC3DA14C718F01"
+ "MsmKey" = "8:_B903CCAAE77F80B733B5FF7D00A8E88A"
"OwnerKey" = "8:_E6DED22BB43E475B9794561C384D2713"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_C938B65796CF5490A0CC3DA14C718F01"
- "OwnerKey" = "8:_E9E779ABD8B7FA0322F597FC3FE5269E"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_C938B65796CF5490A0CC3DA14C718F01"
- "OwnerKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
+ "MsmKey" = "8:_B903CCAAE77F80B733B5FF7D00A8E88A"
+ "OwnerKey" = "8:_8B8BABD8173D326B3175B52925968439"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "OwnerKey" = "8:_09D3C4AB243038764D7428FA4ECD321C"
+ "MsmKey" = "8:_B903CCAAE77F80B733B5FF7D00A8E88A"
+ "OwnerKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "OwnerKey" = "8:_73A191186BF426331AD533F7B8FE7B35"
+ "MsmKey" = "8:_BFCEC942CF3BF1B9FB6AEACA2A8753C3"
+ "OwnerKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "OwnerKey" = "8:_0712ECEB4DE24D8B9E9936D94BDC61B4"
+ "MsmKey" = "8:_BFCEC942CF3BF1B9FB6AEACA2A8753C3"
+ "OwnerKey" = "8:_92474495A2F0D65A21D2BFF4587358D8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_DAF686C3DE2DEABE3DC046748C50DB00"
- "OwnerKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
+ "MsmKey" = "8:_BFCEC942CF3BF1B9FB6AEACA2A8753C3"
+ "OwnerKey" = "8:_94CDF51D67BB69C2699CEC4485EBCA30"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_E1E1D5FF266348A818C0D62B861455F1"
- "OwnerKey" = "8:_FCDFDB9DDDD58E80F781871548F781B4"
+ "MsmKey" = "8:_BFCEC942CF3BF1B9FB6AEACA2A8753C3"
+ "OwnerKey" = "8:_78C9B7DB89C8CFF3E6F812DBDAF18DC7"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_E1E1D5FF266348A818C0D62B861455F1"
- "OwnerKey" = "8:_28B55C31B3EDD1E5B51ADE3DF9ED2EBE"
+ "MsmKey" = "8:_D2FFB7AB335C92855094B6988900F58C"
+ "OwnerKey" = "8:_8F0D060313A40E3D6C4B196C5819AA1F"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_E24C6D577AF7FF009D66CA15C21E0A7C"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
+ "MsmKey" = "8:_DE92CA29E3DCD5F35FD39C7351489051"
+ "OwnerKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -507,386 +249,170 @@
}
"Entry"
{
- "MsmKey" = "8:_E9059FA100DE1C98726DA9227C08734B"
- "OwnerKey" = "8:_0CFB833EC8758FDDB415984703D96A78"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_E9E779ABD8B7FA0322F597FC3FE5269E"
- "OwnerKey" = "8:_27A0728EBCD8D8D764810B9089B94964"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_F3984995940A979BD200F6C155905708"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_F3984995940A979BD200F6C155905708"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_F3F18112295FF17BD182DB86D6EB1133"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_F924359C0BCB71C0806EF440F78E897E"
- "OwnerKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_F9F9CEF184152F7DD4271F8E16A99306"
- "OwnerKey" = "8:_6A593C6C7F92CA0166D5863B200AA05D"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_FCDFDB9DDDD58E80F781871548F781B4"
- "OwnerKey" = "8:_065F6BA03C582BF7C3553DB9B3F563A5"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_FCDFDB9DDDD58E80F781871548F781B4"
- "OwnerKey" = "8:_28B55C31B3EDD1E5B51ADE3DF9ED2EBE"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_FD63FD7AD44D6BD26EED625F3EA5DAA9"
+ "MsmKey" = "8:_E8DB13B92FF4C290BF9E84F6AD1DE386"
"OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_UNDEFINED"
+ "MsmKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
"OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_UNDEFINED"
+ "MsmKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
"OwnerKey" = "8:_E6DED22BB43E475B9794561C384D2713"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_065F6BA03C582BF7C3553DB9B3F563A5"
+ "MsmKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
+ "OwnerKey" = "8:_92474495A2F0D65A21D2BFF4587358D8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_455470118F61E20DD1B47E1B5F2CD07E"
+ "MsmKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
+ "OwnerKey" = "8:_94CDF51D67BB69C2699CEC4485EBCA30"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_28B55C31B3EDD1E5B51ADE3DF9ED2EBE"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_FCDFDB9DDDD58E80F781871548F781B4"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_E1E1D5FF266348A818C0D62B861455F1"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_FD63FD7AD44D6BD26EED625F3EA5DAA9"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_3BA9A53EB9BA38CAE59AE79DD57216DA"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_27A0728EBCD8D8D764810B9089B94964"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_E9E779ABD8B7FA0322F597FC3FE5269E"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_73A191186BF426331AD533F7B8FE7B35"
+ "MsmKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
+ "OwnerKey" = "8:_8F0D060313A40E3D6C4B196C5819AA1F"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_24CF3526503A71076261C556A8D2B0F6"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_2A544C3030504E69BE77BBA9737E74A0"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_9B73A2245EE7C4F9AB0977E14A7687AB"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_F924359C0BCB71C0806EF440F78E897E"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_83838CE7A607B1C85B1D3E962EBF13AD"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_C938B65796CF5490A0CC3DA14C718F01"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_A304CEC70994BBC8BE642A6D2A00C301"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_BF01E96BB3B7FA07DDE0651D59B2C1C8"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_950EEF994AA25A7143EC3BCC121B5474"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_0712ECEB4DE24D8B9E9936D94BDC61B4"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_E24C6D577AF7FF009D66CA15C21E0A7C"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_D4DD93908C793CC94F4F8F78409F3100"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_F3F18112295FF17BD182DB86D6EB1133"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_0ADE9351CA1303DF987E24747A4181FB"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_6EDA9B68CBA90E9D08C225E64882A91A"
+ "OwnerKey" = "8:_61BDC9339D1440BCBC454CC904BCE79C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_206A4DF263C6795E8B431691A1797973"
+ "OwnerKey" = "8:_E6DED22BB43E475B9794561C384D2713"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_C3653413D52CF13A3AC1C694364A8882"
+ "OwnerKey" = "8:_94CDF51D67BB69C2699CEC4485EBCA30"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_011E4FBBC5C8A2D0B69D7396BB68E588"
+ "OwnerKey" = "8:_92474495A2F0D65A21D2BFF4587358D8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "OwnerKey" = "8:_72B65244C4FF9BF01D372402C3CE52C5"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_F3984995940A979BD200F6C155905708"
+ "OwnerKey" = "8:_9E54529BF03690F97BEE24C45258265B"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "OwnerKey" = "8:_65CE51F98CEBE9E3D46589DB414FAA93"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_F9F9CEF184152F7DD4271F8E16A99306"
+ "OwnerKey" = "8:_8F0D060313A40E3D6C4B196C5819AA1F"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_C00C2B072AD4B5A2E97117F31DA5BF4D"
+ "OwnerKey" = "8:_D2FFB7AB335C92855094B6988900F58C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_34792E5BC01BD47CBA3200D0EC40E0D6"
+ "OwnerKey" = "8:_78C9B7DB89C8CFF3E6F812DBDAF18DC7"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "OwnerKey" = "8:_8B8BABD8173D326B3175B52925968439"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "OwnerKey" = "8:_6290C6253BE08D5AEAF445DC538F5A32"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "OwnerKey" = "8:_5397E5B2CD05015FD556CF7136D97D21"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "OwnerKey" = "8:_F35F069FCC8C9B6808AAD45B8039A4FB"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_1237B704F91F5863D7A8712599F76BEF"
+ "OwnerKey" = "8:_BFCEC942CF3BF1B9FB6AEACA2A8753C3"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_A763E0945B5DF943AFC202393056F34F"
+ "OwnerKey" = "8:_DE92CA29E3DCD5F35FD39C7351489051"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_BF62E984AB706A9532C332E9E71B18BC"
+ "OwnerKey" = "8:_37EC5D1BE221C8E104929A1B70B2661E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_3AECB6C039716AC5DBC0F3D16C97DD87"
+ "OwnerKey" = "8:_B903CCAAE77F80B733B5FF7D00A8E88A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_04774E07A11AB771AEB1E00CF69FE931"
+ "OwnerKey" = "8:_E8DB13B92FF4C290BF9E84F6AD1DE386"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_E9059FA100DE1C98726DA9227C08734B"
+ "OwnerKey" = "8:_A09EFD9A2681B7EEE293BB3C3E00C524"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_02894B9DAB8C1E69F665E0408C9901BF"
+ "OwnerKey" = "8:_2DC8C87C2D90158064A700C697B49957"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
- "OwnerKey" = "8:_DAF686C3DE2DEABE3DC046748C50DB00"
+ "OwnerKey" = "8:_0712ECEB4DE24D8B9E9936D94BDC61B4"
"MsmSig" = "8:_UNDEFINED"
}
}
@@ -929,7 +455,7 @@
"DisplayName" = "8:Release"
"IsDebugOnly" = "11:FALSE"
"IsReleaseOnly" = "11:TRUE"
- "OutputFilename" = "8:Release\\Tango.Stubs.Installer.msi"
+ "OutputFilename" = "8:..\\..\\Build\\Release\\Installers\\Tango Stubs Installer v1.0.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
@@ -946,6 +472,14 @@
"PrerequisitesLocation" = "2:1"
"Url" = "8:"
"ComponentsUrl" = "8:"
+ "Items"
+ {
+ "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.6.1"
+ {
+ "Name" = "8:Microsoft .NET Framework 4.6.1 (x86 and x64)"
+ "ProductCode" = "8:.NETFramework,Version=v4.6.1"
+ }
+ }
}
}
}
@@ -976,130 +510,6 @@
}
"File"
{
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_011E4FBBC5C8A2D0B69D7396BB68E588"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Diagnostics.Tools, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_011E4FBBC5C8A2D0B69D7396BB68E588"
- {
- "Name" = "8:System.Diagnostics.Tools.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Diagnostics.Tools.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_02894B9DAB8C1E69F665E0408C9901BF"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Diagnostics.Debug, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_02894B9DAB8C1E69F665E0408C9901BF"
- {
- "Name" = "8:System.Diagnostics.Debug.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Diagnostics.Debug.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_04774E07A11AB771AEB1E00CF69FE931"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_04774E07A11AB771AEB1E00CF69FE931"
- {
- "Name" = "8:System.Linq.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Linq.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_065F6BA03C582BF7C3553DB9B3F563A5"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Stubs, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_065F6BA03C582BF7C3553DB9B3F563A5"
- {
- "Name" = "8:Tango.Stubs.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:Tango.Stubs.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_0712ECEB4DE24D8B9E9936D94BDC61B4"
{
"AssemblyRegister" = "3:1"
@@ -1131,68 +541,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_09D3C4AB243038764D7428FA4ECD321C"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Microsoft.CodeAnalysis.CSharp.Scripting, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_09D3C4AB243038764D7428FA4ECD321C"
- {
- "Name" = "8:Microsoft.CodeAnalysis.CSharp.Scripting.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:Microsoft.CodeAnalysis.CSharp.Scripting.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_0ADE9351CA1303DF987E24747A4181FB"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Microsoft.CodeAnalysis.CSharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_0ADE9351CA1303DF987E24747A4181FB"
- {
- "Name" = "8:Microsoft.CodeAnalysis.CSharp.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:Microsoft.CodeAnalysis.CSharp.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_0CFB833EC8758FDDB415984703D96A78"
{
"AssemblyRegister" = "3:1"
@@ -1200,11 +548,6 @@
"AssemblyAsmDisplayName" = "8:System.Collections.Immutable, Version=1.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_0CFB833EC8758FDDB415984703D96A78"
- {
- "Name" = "8:System.Collections.Immutable.DLL"
- "Attributes" = "3:512"
- }
}
"SourcePath" = "8:System.Collections.Immutable.DLL"
"TargetName" = "8:"
@@ -1224,20 +567,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_1237B704F91F5863D7A8712599F76BEF"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2DC8C87C2D90158064A700C697B49957"
{
"AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Threading, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_1237B704F91F5863D7A8712599F76BEF"
+ "_2DC8C87C2D90158064A700C697B49957"
{
- "Name" = "8:System.Threading.dll"
+ "Name" = "8:Google.Protobuf.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Threading.dll"
+ "SourcePath" = "8:Google.Protobuf.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1255,20 +598,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_206A4DF263C6795E8B431691A1797973"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_37EC5D1BE221C8E104929A1B70B2661E"
{
"AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Security.Cryptography.Algorithms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.Practices.ServiceLocation, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_206A4DF263C6795E8B431691A1797973"
+ "_37EC5D1BE221C8E104929A1B70B2661E"
{
- "Name" = "8:System.Security.Cryptography.Algorithms.dll"
+ "Name" = "8:Microsoft.Practices.ServiceLocation.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Security.Cryptography.Algorithms.dll"
+ "SourcePath" = "8:Microsoft.Practices.ServiceLocation.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1286,14 +629,14 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_24CF3526503A71076261C556A8D2B0F6"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5397E5B2CD05015FD556CF7136D97D21"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Tango.PMR, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_24CF3526503A71076261C556A8D2B0F6"
+ "_5397E5B2CD05015FD556CF7136D97D21"
{
"Name" = "8:Tango.PMR.DLL"
"Attributes" = "3:512"
@@ -1317,223 +660,6 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_27A0728EBCD8D8D764810B9089B94964"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Settings, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_27A0728EBCD8D8D764810B9089B94964"
- {
- "Name" = "8:Tango.Settings.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:Tango.Settings.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_28B55C31B3EDD1E5B51ADE3DF9ED2EBE"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:System.Reactive.Linq, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_28B55C31B3EDD1E5B51ADE3DF9ED2EBE"
- {
- "Name" = "8:System.Reactive.Linq.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Reactive.Linq.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2A544C3030504E69BE77BBA9737E74A0"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Core, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_2A544C3030504E69BE77BBA9737E74A0"
- {
- "Name" = "8:Tango.Core.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:Tango.Core.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_34792E5BC01BD47CBA3200D0EC40E0D6"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Reflection.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_34792E5BC01BD47CBA3200D0EC40E0D6"
- {
- "Name" = "8:System.Reflection.Extensions.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Reflection.Extensions.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3AECB6C039716AC5DBC0F3D16C97DD87"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Resources.ResourceManager, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_3AECB6C039716AC5DBC0F3D16C97DD87"
- {
- "Name" = "8:System.Resources.ResourceManager.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Resources.ResourceManager.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3BA9A53EB9BA38CAE59AE79DD57216DA"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:ICSharpCode.AvalonEdit, Version=4.3.1.9429, Culture=neutral, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_3BA9A53EB9BA38CAE59AE79DD57216DA"
- {
- "Name" = "8:ICSharpCode.AvalonEdit.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:ICSharpCode.AvalonEdit.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_455470118F61E20DD1B47E1B5F2CD07E"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Transport, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_455470118F61E20DD1B47E1B5F2CD07E"
- {
- "Name" = "8:Tango.Transport.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:Tango.Transport.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_61BDC9339D1440BCBC454CC904BCE79C"
{
"AssemblyRegister" = "3:1"
@@ -1565,20 +691,20 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6A593C6C7F92CA0166D5863B200AA05D"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6290C6253BE08D5AEAF445DC538F5A32"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:System.Text.Encoding.CodePages, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Scripting, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_6A593C6C7F92CA0166D5863B200AA05D"
+ "_6290C6253BE08D5AEAF445DC538F5A32"
{
- "Name" = "8:System.Text.Encoding.CodePages.DLL"
+ "Name" = "8:Tango.Scripting.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Text.Encoding.CodePages.DLL"
+ "SourcePath" = "8:Tango.Scripting.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1596,20 +722,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6EDA9B68CBA90E9D08C225E64882A91A"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_65CE51F98CEBE9E3D46589DB414FAA93"
{
"AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Security.Cryptography.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.Reactive.Interfaces, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_6EDA9B68CBA90E9D08C225E64882A91A"
+ "_65CE51F98CEBE9E3D46589DB414FAA93"
{
- "Name" = "8:System.Security.Cryptography.Primitives.dll"
+ "Name" = "8:System.Reactive.Interfaces.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Security.Cryptography.Primitives.dll"
+ "SourcePath" = "8:System.Reactive.Interfaces.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1627,20 +753,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_73A191186BF426331AD533F7B8FE7B35"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_72B65244C4FF9BF01D372402C3CE52C5"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Scripting, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:System.Reactive.Linq, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_73A191186BF426331AD533F7B8FE7B35"
+ "_72B65244C4FF9BF01D372402C3CE52C5"
{
- "Name" = "8:Tango.Scripting.DLL"
+ "Name" = "8:System.Reactive.Linq.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:Tango.Scripting.DLL"
+ "SourcePath" = "8:System.Reactive.Linq.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1658,20 +784,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_83838CE7A607B1C85B1D3E962EBF13AD"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_78C9B7DB89C8CFF3E6F812DBDAF18DC7"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Microsoft.Practices.ServiceLocation, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Settings, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_83838CE7A607B1C85B1D3E962EBF13AD"
+ "_78C9B7DB89C8CFF3E6F812DBDAF18DC7"
{
- "Name" = "8:Microsoft.Practices.ServiceLocation.DLL"
+ "Name" = "8:Tango.Settings.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:Microsoft.Practices.ServiceLocation.DLL"
+ "SourcePath" = "8:Tango.Settings.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1689,20 +815,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_950EEF994AA25A7143EC3BCC121B5474"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8B8BABD8173D326B3175B52925968439"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Serialization, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_950EEF994AA25A7143EC3BCC121B5474"
+ "_8B8BABD8173D326B3175B52925968439"
{
- "Name" = "8:Google.Protobuf.DLL"
+ "Name" = "8:Tango.Serialization.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:Google.Protobuf.DLL"
+ "SourcePath" = "8:Tango.Serialization.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1720,20 +846,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9B73A2245EE7C4F9AB0977E14A7687AB"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8F0D060313A40E3D6C4B196C5819AA1F"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Logging, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.SharedUI, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_9B73A2245EE7C4F9AB0977E14A7687AB"
+ "_8F0D060313A40E3D6C4B196C5819AA1F"
{
- "Name" = "8:Tango.Logging.DLL"
+ "Name" = "8:Tango.SharedUI.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:Tango.Logging.DLL"
+ "SourcePath" = "8:Tango.SharedUI.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1751,20 +877,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A304CEC70994BBC8BE642A6D2A00C301"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_92474495A2F0D65A21D2BFF4587358D8"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:MahApps.Metro, Version=1.5.0.23, Culture=neutral, PublicKeyToken=f4fb5a3c4d1e5b4f, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Transport, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_A304CEC70994BBC8BE642A6D2A00C301"
+ "_92474495A2F0D65A21D2BFF4587358D8"
{
- "Name" = "8:MahApps.Metro.DLL"
+ "Name" = "8:Tango.Transport.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:MahApps.Metro.DLL"
+ "SourcePath" = "8:Tango.Transport.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1782,20 +908,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_94CDF51D67BB69C2699CEC4485EBCA30"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Microsoft.CodeAnalysis, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Stubs, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_A6DD21EE032731C3E2B52FCE0C3E1CB8"
+ "_94CDF51D67BB69C2699CEC4485EBCA30"
{
- "Name" = "8:Microsoft.CodeAnalysis.DLL"
+ "Name" = "8:Tango.Stubs.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:Microsoft.CodeAnalysis.DLL"
+ "SourcePath" = "8:Tango.Stubs.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1813,20 +939,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A763E0945B5DF943AFC202393056F34F"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9E54529BF03690F97BEE24C45258265B"
{
"AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:System.Reactive.Core, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_A763E0945B5DF943AFC202393056F34F"
+ "_9E54529BF03690F97BEE24C45258265B"
{
- "Name" = "8:System.Runtime.dll"
+ "Name" = "8:System.Reactive.Core.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Runtime.dll"
+ "SourcePath" = "8:System.Reactive.Core.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -1844,14 +970,14 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BF01E96BB3B7FA07DDE0651D59B2C1C8"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A09EFD9A2681B7EEE293BB3C3E00C524"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_BF01E96BB3B7FA07DDE0651D59B2C1C8"
+ "_A09EFD9A2681B7EEE293BB3C3E00C524"
{
"Name" = "8:System.Windows.Interactivity.DLL"
"Attributes" = "3:512"
@@ -1875,107 +1001,14 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BF62E984AB706A9532C332E9E71B18BC"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Runtime.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_BF62E984AB706A9532C332E9E71B18BC"
- {
- "Name" = "8:System.Runtime.Extensions.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Runtime.Extensions.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C00C2B072AD4B5A2E97117F31DA5BF4D"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Reflection.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_C00C2B072AD4B5A2E97117F31DA5BF4D"
- {
- "Name" = "8:System.Reflection.Primitives.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Reflection.Primitives.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C3653413D52CF13A3AC1C694364A8882"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Runtime.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_C3653413D52CF13A3AC1C694364A8882"
- {
- "Name" = "8:System.Runtime.Numerics.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Runtime.Numerics.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C938B65796CF5490A0CC3DA14C718F01"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_B903CCAAE77F80B733B5FF7D00A8E88A"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_C938B65796CF5490A0CC3DA14C718F01"
+ "_B903CCAAE77F80B733B5FF7D00A8E88A"
{
"Name" = "8:Newtonsoft.Json.DLL"
"Attributes" = "3:512"
@@ -1999,51 +1032,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D4DD93908C793CC94F4F8F78409F3100"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BFCEC942CF3BF1B9FB6AEACA2A8753C3"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Microsoft.CodeAnalysis.Scripting, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_D4DD93908C793CC94F4F8F78409F3100"
- {
- "Name" = "8:Microsoft.CodeAnalysis.Scripting.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:Microsoft.CodeAnalysis.Scripting.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DAF686C3DE2DEABE3DC046748C50DB00"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Logging, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_DAF686C3DE2DEABE3DC046748C50DB00"
+ "_BFCEC942CF3BF1B9FB6AEACA2A8753C3"
{
- "Name" = "8:System.Collections.dll"
+ "Name" = "8:Tango.Logging.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Collections.dll"
+ "SourcePath" = "8:Tango.Logging.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -2061,20 +1063,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E1E1D5FF266348A818C0D62B861455F1"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D2FFB7AB335C92855094B6988900F58C"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:System.Reactive.Interfaces, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:ICSharpCode.AvalonEdit, Version=4.3.1.9429, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_E1E1D5FF266348A818C0D62B861455F1"
+ "_D2FFB7AB335C92855094B6988900F58C"
{
- "Name" = "8:System.Reactive.Interfaces.DLL"
+ "Name" = "8:ICSharpCode.AvalonEdit.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Reactive.Interfaces.DLL"
+ "SourcePath" = "8:ICSharpCode.AvalonEdit.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -2092,20 +1094,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E24C6D577AF7FF009D66CA15C21E0A7C"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DE92CA29E3DCD5F35FD39C7351489051"
{
"AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Console, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:SimpleValidator, Version=0.6.1.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_E24C6D577AF7FF009D66CA15C21E0A7C"
+ "_DE92CA29E3DCD5F35FD39C7351489051"
{
- "Name" = "8:System.Console.dll"
+ "Name" = "8:SimpleValidator.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Console.dll"
+ "SourcePath" = "8:SimpleValidator.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -2154,206 +1156,20 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E9059FA100DE1C98726DA9227C08734B"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Globalization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_E9059FA100DE1C98726DA9227C08734B"
- {
- "Name" = "8:System.Globalization.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Globalization.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E9E779ABD8B7FA0322F597FC3FE5269E"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E8DB13B92FF4C290BF9E84F6AD1DE386"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Serialization, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_E9E779ABD8B7FA0322F597FC3FE5269E"
- {
- "Name" = "8:Tango.Serialization.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:Tango.Serialization.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F3984995940A979BD200F6C155905708"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_F3984995940A979BD200F6C155905708"
- {
- "Name" = "8:System.Xml.ReaderWriter.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Xml.ReaderWriter.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F3F18112295FF17BD182DB86D6EB1133"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Threading.Tasks.Parallel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_F3F18112295FF17BD182DB86D6EB1133"
- {
- "Name" = "8:System.Threading.Tasks.Parallel.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Threading.Tasks.Parallel.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F924359C0BCB71C0806EF440F78E897E"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:SimpleValidator, Version=0.6.1.0, Culture=neutral, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_F924359C0BCB71C0806EF440F78E897E"
- {
- "Name" = "8:SimpleValidator.DLL"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:SimpleValidator.DLL"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F9F9CEF184152F7DD4271F8E16A99306"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:TRUE"
- "AssemblyAsmDisplayName" = "8:System.Runtime.Handles, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
- "ScatterAssemblies"
- {
- "_F9F9CEF184152F7DD4271F8E16A99306"
- {
- "Name" = "8:System.Runtime.Handles.dll"
- "Attributes" = "3:512"
- }
- }
- "SourcePath" = "8:System.Runtime.Handles.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FCDFDB9DDDD58E80F781871548F781B4"
- {
- "AssemblyRegister" = "3:1"
- "AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:System.Reactive.Core, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:MahApps.Metro, Version=1.5.0.23, Culture=neutral, PublicKeyToken=f4fb5a3c4d1e5b4f, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_FCDFDB9DDDD58E80F781871548F781B4"
+ "_E8DB13B92FF4C290BF9E84F6AD1DE386"
{
- "Name" = "8:System.Reactive.Core.DLL"
+ "Name" = "8:MahApps.Metro.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:System.Reactive.Core.DLL"
+ "SourcePath" = "8:MahApps.Metro.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
@@ -2371,20 +1187,20 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
- "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FD63FD7AD44D6BD26EED625F3EA5DAA9"
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F35F069FCC8C9B6808AAD45B8039A4FB"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.SharedUI, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Core, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
- "_FD63FD7AD44D6BD26EED625F3EA5DAA9"
+ "_F35F069FCC8C9B6808AAD45B8039A4FB"
{
- "Name" = "8:Tango.SharedUI.DLL"
+ "Name" = "8:Tango.Core.DLL"
"Attributes" = "3:512"
}
}
- "SourcePath" = "8:Tango.SharedUI.DLL"
+ "SourcePath" = "8:Tango.Core.DLL"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_D5AAD35A4ABE407AA40E02371659B408"
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Resources/CodeTabTemplate.cs b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Resources/CodeTabTemplate.cs
index 68b249a8a..2a721184b 100644
--- a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Resources/CodeTabTemplate.cs
+++ b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Resources/CodeTabTemplate.cs
@@ -7,14 +7,19 @@ using System.Windows.Forms;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
+using Tango.PMR.Stubs;
using Tango.Stubs.UI;
public void OnExecute(StubManager stubManager)
{
for (int i = 0; i < 10; i++)
{
- stubManager.Run("calculate", 10, 5);
- Thread.Sleep(10);
+ var response = stubManager.Run<CalculateResponse>("calculate", 10, 5);
+
+ if (response.Sum == 15)
+ {
+ stubManager.WriteLine("OK!");
+ }
}
}
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/StubManager.cs b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/StubManager.cs
index 0c121c116..6249b3577 100644
--- a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/StubManager.cs
+++ b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/StubManager.cs
@@ -7,6 +7,7 @@ using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
+using System.Windows.Controls;
using Tango.PMR;
using Tango.PMR.Common;
using Tango.Transport.Adapters;
@@ -19,6 +20,9 @@ namespace Tango.Stubs.UI
public class StubManager
{
private UsbTransportAdapter _adapter; //Holds the USB transport adapter.
+ private Action<String> _writeLine;
+ private Action<String> _write;
+ private Action _clear;
/// <summary>
/// Occurs when the stub has failed to execute.
@@ -44,8 +48,12 @@ namespace Tango.Stubs.UI
/// Initializes a new instance of the <see cref="StubManager"/> class.
/// </summary>
/// <param name="adapter">The adapter.</param>
- public StubManager(UsbTransportAdapter adapter)
+ public StubManager(UsbTransportAdapter adapter, Action<String> writeLine, Action<String> write, Action clear)
{
+ _writeLine = writeLine;
+ _write = write;
+ _clear = clear;
+
_adapter = adapter;
}
@@ -62,15 +70,15 @@ namespace Tango.Stubs.UI
/// </summary>
/// <param name="stubName">Name of the stub.</param>
/// <param name="args">The arguments.</param>
- public void Run(String stubName, params Object[] args)
+ public IMessage Run(String stubName, params Object[] args)
{
- if (Aborted) return;
+ if (Aborted) return null;
var stubType = StubBase.GetAvailableRequestStubs().SingleOrDefault(x => x.Name.ToLower() == stubName.ToLower() || x.Name.Replace("Request", "").ToLower() == stubName.ToLower());
if (stubType == null)
{
OnFailed(new ArgumentException("Invalid stub '" + stubName + "'."));
- return;
+ return null;
}
var stubProps = stubType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
@@ -78,7 +86,7 @@ namespace Tango.Stubs.UI
if (stubProps.Length > args.Length)
{
OnFailed(new ArgumentOutOfRangeException("Not enough arguments for " + stubType.Name + "."));
- return;
+ return null;
}
Executed?.Invoke(this, stubType.Name);
@@ -117,6 +125,8 @@ namespace Tango.Stubs.UI
bool done = false;
+ IMessage message = null;
+
Task.Factory.StartNew(() =>
{
_adapter.Write(requestData);
@@ -142,7 +152,7 @@ namespace Tango.Stubs.UI
}
}
- IMessage message = MessageFactory.ExtractMessageFromContainer(responseContainer);
+ message = MessageFactory.ExtractMessageFromContainer(responseContainer);
OnCompleted(JsonConvert.SerializeObject(message, Formatting.Indented));
done = true;
});
@@ -151,11 +161,45 @@ namespace Tango.Stubs.UI
{
Thread.Sleep(2);
}
+
+ return message;
}
catch (Exception ex)
{
OnFailed(ex);
}
+
+ return null;
+ }
+
+ public T Run<T>(String stubName, params Object[] args) where T : class, IMessage
+ {
+ return Run(stubName, args) as T;
+ }
+
+ public void WriteLine(Object obj)
+ {
+ _writeLine(obj.ToString());
+ }
+
+ public void Write(Object obj)
+ {
+ _write(obj.ToString());
+ }
+
+ public void WriteLineHex(Object number, int digits)
+ {
+ _writeLine("#" + Convert.ToInt32(number).ToString("X" + digits.ToString()));
+ }
+
+ public void WriteHex(Object number, int digits)
+ {
+ _write("#" + Convert.ToInt32(number).ToString("X" + digits.ToString()));
+ }
+
+ public void Clear()
+ {
+ _clear();
}
/// <summary>
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Tango.Stubs.UI.csproj b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Tango.Stubs.UI.csproj
index 24f9d6b40..c5819c1cb 100644
--- a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Tango.Stubs.UI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Tango.Stubs.UI.csproj
@@ -30,7 +30,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -177,7 +177,7 @@
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
- <PostBuildEvent>$(TargetDir)linkgen.exe -s "$(TargetPath)" -d "$(TargetDir)Utilities\Stubs Execution GUI.lnk"</PostBuildEvent>
+ <PostBuildEvent>if $(ConfigurationName) == Debug $(TargetDir)linkgen.exe -s "$(TargetPath)" -d "$(TargetDir)Utilities\Stubs Execution GUI.lnk"</PostBuildEvent>
</PropertyGroup>
<Import Project="..\..\packages\Fody.2.0.0\build\dotnet\Fody.targets" Condition="Exists('..\..\packages\Fody.2.0.0\build\dotnet\Fody.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/ViewModels/MainViewVM.cs
index 462449182..f4e4aa124 100644
--- a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/ViewModels/MainViewVM.cs
@@ -1,4 +1,5 @@
-using Microsoft.Win32;
+using Google.Protobuf;
+using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -8,6 +9,7 @@ using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
+using System.Windows.Controls;
using Tango.Core.Commands;
using Tango.Scripting;
using Tango.Settings;
@@ -25,6 +27,7 @@ namespace Tango.Stubs.UI.ViewModels
{
private UsbTransportAdapter _adapter; //Holds the USB transport adapter.
private StubManager _stubManager;
+ private TextBox _logTextBox;
#region Properties
@@ -53,16 +56,6 @@ namespace Tango.Stubs.UI.ViewModels
set { _selectedStubSnippet = value; RaisePropertyChanged(nameof(SelectedStubSnippet)); }
}
- private String _log;
- /// <summary>
- /// Gets or sets the current response log.
- /// </summary>
- public String Log
- {
- get { return _log; }
- set { _log = value; RaisePropertyChanged(nameof(Log)); }
- }
-
private CodeTabVM _selectedCodeTab;
/// <summary>
/// Gets or sets the selected code tab.
@@ -123,6 +116,14 @@ namespace Tango.Stubs.UI.ViewModels
set { _isRunning = value; RaisePropertyChanged(nameof(IsRunning)); InvalidateRelayCommands(); }
}
+ private bool _appendLogAuto;
+
+ public bool AppendLogAuto
+ {
+ get { return _appendLogAuto; }
+ set { _appendLogAuto = value; RaisePropertyChangedAuto(); }
+ }
+
#endregion
#region Commands
@@ -168,6 +169,11 @@ namespace Tango.Stubs.UI.ViewModels
public RelayCommand SaveAsCommand { get; set; }
/// <summary>
+ /// Gets or sets the clear command.
+ /// </summary>
+ public RelayCommand ClearCommand { get; set; }
+
+ /// <summary>
/// Gets or sets the stub snippet selected command.
/// </summary>
public RelayCommand StubSnippetSelectedCommand { get; set; }
@@ -191,6 +197,7 @@ namespace Tango.Stubs.UI.ViewModels
/// </summary>
public MainViewVM()
{
+ AppendLogAuto = true;
CodeTabs = new ObservableCollection<CodeTabVM>();
NewCommand = new RelayCommand(CreateNewTab);
CloseTabCommand = new RelayCommand<CodeTabVM>(OnTabClosing);
@@ -201,21 +208,40 @@ namespace Tango.Stubs.UI.ViewModels
HighlightTypes = new ObservableCollection<KeyValuePair<string, Type>>();
HighlightTypes.Add(new KeyValuePair<string, Type>("stubManager", typeof(StubManager)));
+ foreach (var stubType in StubBase.GetAvailableRequestResponseStubs())
+ {
+ HighlightTypes.Add(new KeyValuePair<string, Type>(stubType.GetType().Name, stubType));
+ }
+
StubSnippets = new ObservableCollection<StubSnippetVM>();
foreach (var stubType in StubBase.GetAvailableRequestStubs())
{
StubSnippetVM snippet = new StubSnippetVM();
- snippet.Name = stubType.Name.Replace("Stub_","");
+ snippet.Name = stubType.Name.Replace("Stub_", "");
snippet.Code = String.Empty;
+ snippet.Code += "// " + "Request ----" + Environment.NewLine;
+
foreach (var prop in stubType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
snippet.Code += "// " + prop.PropertyType.Name + " : " + prop.Name + Environment.NewLine;
}
- snippet.Code += String.Format("stubManager.Run(\"{0}\" ,{1});", stubType.Name, String.Join(", ", stubType.GetProperties(BindingFlags.Public | BindingFlags.Instance).Select(x => x.PropertyType.Name == "string" ? "\"string\"" : x.PropertyType.Name)));
+ Type responseType = StubBase.GetAvailableRequestResponseStubs().SingleOrDefault(x => x.Name == stubType.Name.Replace("Request", "Response"));
+
+ if (responseType != null)
+ {
+ snippet.Code += Environment.NewLine + "// " + "Response ----" + Environment.NewLine;
+
+ foreach (var prop in responseType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
+ {
+ snippet.Code += "// " + prop.PropertyType.Name + " : " + prop.Name + Environment.NewLine;
+ }
+ }
+
+ snippet.Code += String.Format("var response = stubManager.Run<{2}>(\"{0}\" ,{1});", stubType.Name, String.Join(", ", stubType.GetProperties(BindingFlags.Public | BindingFlags.Instance).Select(x => x.PropertyType.Name == "string" ? "\"string\"" : x.PropertyType.Name)), stubType.Name.Replace("Request", "Response"));
StubSnippets.Add(snippet);
}
@@ -225,6 +251,7 @@ namespace Tango.Stubs.UI.ViewModels
SaveAsCommand = new RelayCommand(SaveAsFile);
StubSnippetSelectedCommand = new RelayCommand(OnStubSnippetSelected);
ExitCommand = new RelayCommand(() => Application.Current.Shutdown());
+ ClearCommand = new RelayCommand(ClearLog);
Ports = new List<string>()
{
@@ -293,6 +320,14 @@ namespace Tango.Stubs.UI.ViewModels
#region Private Methods
/// <summary>
+ /// Clears the log.
+ /// </summary>
+ private void ClearLog()
+ {
+ _logTextBox.Clear();
+ }
+
+ /// <summary>
/// Saves the selected script file.
/// </summary>
private void SaveFile()
@@ -400,13 +435,22 @@ namespace Tango.Stubs.UI.ViewModels
{
IsRunning = true;
SelectedCodeTab.IsRunning = true;
- Log = (DateTime.Now.ToTimeString() + ": ") + "Executing script '" + SelectedCodeTab.Title + "'..." + Environment.NewLine;
+ _logTextBox.Text = (DateTime.Now.ToTimeString() + ": ") + "Executing script '" + SelectedCodeTab.Title + "'..." + Environment.NewLine;
await Task.Factory.StartNew(async () =>
{
try
{
- _stubManager = new StubManager(_adapter);
+ _stubManager = new StubManager(_adapter, (txt) =>
+ {
+ AppendTextLog(txt + Environment.NewLine);
+ }, (txt) =>
+ {
+ AppendTextLog(txt);
+ }, () =>
+ {
+
+ });
var thisStubManager = _stubManager;
_stubManager.Completed += Manager_Completed;
_stubManager.Failed += Manager_Failed;
@@ -415,6 +459,8 @@ namespace Tango.Stubs.UI.ViewModels
ScriptEngine engine = new ScriptEngine(new StubOnExecuteParameters(_stubManager));
engine.ReferencedAssemblies.Add(this.GetType());
+ engine.ReferencedAssemblies.Add(typeof(PMR.Stubs.CalculateRequest));
+ engine.ReferencedAssemblies.Add(typeof(IMessage));
await engine.Run(SelectedCodeTab.Code);
if (!thisStubManager.Aborted)
@@ -443,12 +489,21 @@ namespace Tango.Stubs.UI.ViewModels
IsRunning = false;
SelectedCodeTab.IsRunning = false;
Status = "Stopped!";
- Log += (DateTime.Now.ToTimeString() + ": ") + "Stopped!" + Environment.NewLine;
+ AppendTextLog((DateTime.Now.ToTimeString() + ": ") + "Stopped!" + Environment.NewLine);
}
}
#endregion
+ #region Public Methods
+
+ public void SetLogTextBox(TextBox logTextBox)
+ {
+ _logTextBox = logTextBox;
+ }
+
+ #endregion
+
#region Event Handlers
/// <summary>
@@ -458,7 +513,11 @@ namespace Tango.Stubs.UI.ViewModels
/// <param name="stubName">Name of the stub.</param>
private void Manager_Executed(object sender, string stubName)
{
- Log += (DateTime.Now.ToTimeString() + ": ") + "Executing '" + stubName + "'..." + Environment.NewLine;
+ if (AppendLogAuto)
+ {
+ AppendTextLog((DateTime.Now.ToTimeString() + ": ") + "Executing '" + stubName + "'..." + Environment.NewLine);
+ }
+
Status = "Executing " + stubName + "...";
}
@@ -471,7 +530,11 @@ namespace Tango.Stubs.UI.ViewModels
{
if (IsRunning)
{
- Log += (DateTime.Now.ToTimeString() + ": ") + ex.Message + Environment.NewLine;
+ if (AppendLogAuto)
+ {
+ AppendTextLog((DateTime.Now.ToTimeString() + ": ") + ex.Message + Environment.NewLine);
+ }
+
Status = "Failed!";
}
}
@@ -483,8 +546,11 @@ namespace Tango.Stubs.UI.ViewModels
/// <param name="response">The response.</param>
private void Manager_Completed(object sender, string response)
{
- Log += (DateTime.Now.ToTimeString() + ": ") + "Response Received:" + Environment.NewLine;
- Log += (DateTime.Now.ToTimeString() + ": ") + response + Environment.NewLine;
+ if (AppendLogAuto)
+ {
+ AppendTextLog((DateTime.Now.ToTimeString() + ": ") + "Response Received:" + Environment.NewLine);
+ AppendTextLog((DateTime.Now.ToTimeString() + ": ") + response + Environment.NewLine);
+ }
Status = "Completed";
}
@@ -495,6 +561,22 @@ namespace Tango.Stubs.UI.ViewModels
SettingsManager.SaveDefaultSettings();
}
+ private void AppendTextLog(String log)
+ {
+ InvokeUI(() =>
+ {
+ _logTextBox.AppendText(log);
+ });
+ }
+
+ private void ClearTextLog()
+ {
+ InvokeUI(() =>
+ {
+ _logTextBox.Text = String.Empty;
+ });
+ }
+
#endregion
}
}
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Views/MainView.xaml b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Views/MainView.xaml
index b1cf09d51..1ba809a28 100644
--- a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Views/MainView.xaml
+++ b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Views/MainView.xaml
@@ -279,7 +279,12 @@
</Grid.RowDefinitions>
<GroupBox Header="Response">
<Grid Background="#151515">
- <TextBox x:Name="txtLog" FontFamily="Lucida Console" TextChanged="TextBox_TextChanged" Background="Transparent" Text="{Binding Log}" BorderThickness="0" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" Padding="5" IsReadOnly="True" TextWrapping="Wrap" FontSize="11" Foreground="Gainsboro"></TextBox>
+ <TextBox x:Name="txtLog" FontFamily="Lucida Console" TextChanged="TextBox_TextChanged" Background="Transparent" BorderThickness="0" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" Padding="5" IsReadOnly="True" TextWrapping="Wrap" FontSize="11" Foreground="Gainsboro"></TextBox>
+
+ <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0 -32 -6 0">
+ <CheckBox VerticalAlignment="Center" Margin="0 0 20 0" IsChecked="{Binding AppendLogAuto}">Log response automatically</CheckBox>
+ <Button Width="80" Height="25" Command="{Binding ClearCommand}">CLEAR</Button>
+ </StackPanel>
</Grid>
</GroupBox>
<StatusBar Background="#007ACC" Grid.Row="1">
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Views/MainView.xaml.cs b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Views/MainView.xaml.cs
index a51f78f7c..2e9878453 100644
--- a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Views/MainView.xaml.cs
+++ b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Views/MainView.xaml.cs
@@ -23,19 +23,28 @@ namespace Tango.Stubs.UI.Views
/// </summary>
public partial class MainView : UserControl
{
+ private MainViewVM _vm;
+
public MainView() : base()
{
- InitializeComponent();
+ InitializeComponent();
+ Loaded += (_, __) =>
+ {
+ _vm = DataContext as MainViewVM;
+ _vm.SetLogTextBox(txtLog);
+
+
+ };
}
//Auto scroll to bottom of response log each time it is changed.
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
- Task.Factory.StartNew(() =>
+ Task.Factory.StartNew(() =>
{
Thread.Sleep(50);
- this.Dispatcher.Invoke(() =>
+ this.Dispatcher.Invoke(() =>
{
txtLog.SelectionStart = txtLog.Text.Length;
txtLog.ScrollToEnd();
diff --git a/Software/Visual_Studio/Utilities/Tango.TransportRouter.UI/Tango.TransportRouter.UI.csproj b/Software/Visual_Studio/Utilities/Tango.TransportRouter.UI/Tango.TransportRouter.UI.csproj
index 0c039d0f9..57251e5ea 100644
--- a/Software/Visual_Studio/Utilities/Tango.TransportRouter.UI/Tango.TransportRouter.UI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.TransportRouter.UI/Tango.TransportRouter.UI.csproj
@@ -28,7 +28,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -144,6 +144,6 @@
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
- <PostBuildEvent>$(TargetDir)linkgen.exe -s "$(TargetPath)" -d "$(TargetDir)Utilities\Transport Router.lnk"</PostBuildEvent>
+ <PostBuildEvent>if $(ConfigurationName) == Debug $(TargetDir)linkgen.exe -s "$(TargetPath)" -d "$(TargetDir)Utilities\Transport Router.lnk"</PostBuildEvent>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Utilities/Tango.UITests/Tango.UITests.csproj b/Software/Visual_Studio/Utilities/Tango.UITests/Tango.UITests.csproj
index e381ede6d..9efcfd9cf 100644
--- a/Software/Visual_Studio/Utilities/Tango.UITests/Tango.UITests.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.UITests/Tango.UITests.csproj
@@ -28,7 +28,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
+ <OutputPath>..\..\Build\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>