diff options
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner')
13 files changed, 1010 insertions, 165 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/AutoComplete/MachineVersionsProvider.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/AutoComplete/MachineVersionsProvider.cs new file mode 100644 index 000000000..c018e3ce8 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/AutoComplete/MachineVersionsProvider.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.AutoComplete.Editors; +using Tango.Integration.Observables; + +namespace Tango.MachineStudio.MachineDesigner.AutoComplete +{ + /// <summary> + /// Represents an auto-complete <see cref="MachineVersion">Machine Versions</see> provider. + /// </summary> + /// <seealso cref="Tango.AutoComplete.Editors.ISuggestionProvider" /> + public class MachineVersionsProvider : ISuggestionProvider + { + public String Text { get; set; } + + public IEnumerable GetSuggestions(string filter) + { + Text = filter; + return ObservablesEntitiesAdapter.Instance.MachineVersions.Where(x => x.Version.ToString().StartsWith(filter, StringComparison.CurrentCultureIgnoreCase) || x.Name.StartsWith(filter, StringComparison.CurrentCultureIgnoreCase)).ToList(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/AutoComplete/MachinesProvider.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/AutoComplete/MachinesProvider.cs index 943c52f81..9261f648a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/AutoComplete/MachinesProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/AutoComplete/MachinesProvider.cs @@ -5,12 +5,21 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.AutoComplete.Editors; -using Tango.DAL.Observables; +using Tango.Integration.Observables; namespace Tango.MachineStudio.MachineDesigner.AutoComplete { + /// <summary> + /// Represents an auto-complete <see cref="Machine">Machines</see> provider. + /// </summary> + /// <seealso cref="Tango.AutoComplete.Editors.ISuggestionProvider" /> public class MachinesProvider : ISuggestionProvider { + /// <summary> + /// Gets the suggestions. + /// </summary> + /// <param name="filter">The filter.</param> + /// <returns></returns> public IEnumerable GetSuggestions(string filter) { return ObservablesEntitiesAdapter.Instance.Machines.Where(x => x.SerialNumber.StartsWith(filter, StringComparison.CurrentCultureIgnoreCase)).ToList(); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Images/formula.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Images/formula.png Binary files differnew file mode 100644 index 000000000..6f476e79c --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Images/formula.png diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/MachineDesignerModule.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/MachineDesignerModule.cs index db937028b..a6fa13f08 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/MachineDesignerModule.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/MachineDesignerModule.cs @@ -5,33 +5,48 @@ using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media.Imaging; -using Tango.DAL.Observables; +using Tango.Integration.Observables; using Tango.MachineStudio.Common; using Tango.MachineStudio.MachineDesigner.Views; using Tango.SharedUI.Helpers; namespace Tango.MachineStudio.MachineDesigner { - public class MachineDesignerModule : IStudioModule + /// <summary> + /// Represents a machine designer Machine Studio module providing an interactive GUI for managing machine configurations. + /// </summary> + /// <seealso cref="Tango.MachineStudio.Common.IStudioModule" /> + public class MachineDesignerModule : StudioModuleBase { - public string Name => "Machine Designer"; + /// <summary> + /// Gets the module name. + /// </summary> + public override string Name => "Machine Designer"; - public string Description => "Provides a graphical control over machine configurations. Create, manage and deploy machine configurations using simple drag and drop interface."; + /// <summary> + /// Gets the module description. + /// </summary> + public override string Description => "Provides a graphical control over machine configurations. Create, manage and deploy machine configurations using simple drag and drop interface."; - public BitmapSource Image => ResourceHelper.GetImageFromResources("Images/machine-designer-module.jpg"); + /// <summary> + /// Gets the module cover image. + /// </summary> + public override BitmapSource Image => ResourceHelper.GetImageFromResources("Images/machine-designer-module.jpg"); - public FrameworkElement MainView => new MainView(); + /// <summary> + /// Gets the module entry point view. + /// </summary> + public override FrameworkElement MainView => new MainView(); - public Permissions Permission => Permissions.RunDeveloperModule; + /// <summary> + /// Gets the permission required to see and load this module. + /// </summary> + public override Permissions Permission => Permissions.RunMachineDesignerModule; - public bool IsInitialized => true; - - public void Dispose() - { - - } - - public void Initialize() + /// <summary> + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// </summary> + public override void Dispose() { } 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 46ec20fdc..46571f99c 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 @@ -78,8 +78,16 @@ </ItemGroup> <ItemGroup> <Compile Include="AutoComplete\MachinesProvider.cs" /> + <Compile Include="AutoComplete\MachineVersionsProvider.cs" /> <Compile Include="ViewModelLocator.cs" /> + <Compile Include="ViewModels\MachineVersionDialogVM.cs" /> <Compile Include="ViewModels\MainViewVM.cs" /> + <Compile Include="Views\MachineVersionDialog.xaml.cs"> + <DependentUpon>MachineVersionDialog.xaml</DependentUpon> + </Compile> + <Compile Include="Views\MachineView.xaml.cs"> + <DependentUpon>MachineView.xaml</DependentUpon> + </Compile> <Compile Include="Views\MainView.xaml.cs"> <DependentUpon>MainView.xaml</DependentUpon> </Compile> @@ -87,6 +95,14 @@ <Link>GlobalVersionInfo.cs</Link> </Compile> <Compile Include="MachineDesignerModule.cs" /> + <Page Include="Views\MachineVersionDialog.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> + <Page Include="Views\MachineView.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Views\MainView.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -130,10 +146,6 @@ <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project> <Name>Tango.Core</Name> </ProjectReference> - <ProjectReference Include="..\..\..\Tango.DAL.Observables\Tango.DAL.Observables.csproj"> - <Project>{0ecd6da8-7aa6-48d9-8b65-279d176ad9af}</Project> - <Name>Tango.DAL.Observables</Name> - </ProjectReference> <ProjectReference Include="..\..\..\Tango.DAL.Remote\Tango.DAL.Remote.csproj"> <Project>{38197109-8610-4d3f-92b9-16d48df94d7c}</Project> <Name>Tango.DAL.Remote</Name> @@ -142,6 +154,10 @@ <Project>{b112d89a-a106-41ae-a0c1-4abc84c477f5}</Project> <Name>Tango.DragAndDrop</Name> </ProjectReference> + <ProjectReference Include="..\..\..\Tango.Integration\Tango.Integration.csproj"> + <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> @@ -210,5 +226,8 @@ <ItemGroup> <Resource Include="Images\machine-designer-module.jpg" /> </ItemGroup> + <ItemGroup> + <Resource Include="Images\formula.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.MachineDesigner/ViewModels/MachineVersionDialogVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineVersionDialogVM.cs new file mode 100644 index 000000000..15bebefc8 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineVersionDialogVM.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core.Commands; +using Tango.Integration.Observables; +using Tango.MachineStudio.Common.Notifications; +using Tango.MachineStudio.MachineDesigner.AutoComplete; + +namespace Tango.MachineStudio.MachineDesigner.ViewModels +{ + public class MachineVersionDialogVM : DialogViewVM + { + public ObservablesEntitiesAdapter Adapter { get; set; } + + public double Version { get; set; } + + private String _versionName; + + public String VersionName + { + get { return _versionName; } + set { _versionName = value; RaisePropertyChangedAuto(); } + } + + private MachineVersion _selectedVersion; + + public MachineVersion SelectedVersion + { + get { return _selectedVersion; } + set + { + _selectedVersion = value; + RaisePropertyChangedAuto(); + VersionName = value != null ? value.Name : null; + Version = value != null ? value.Version : 0; + } + } + + public RelayCommand AcceptCommand { get; set; } + + public RelayCommand CancelCommand { get; set; } + + public MachineVersionDialogVM() + { + Adapter = ObservablesEntitiesAdapter.Instance; + AcceptCommand = new RelayCommand(() => + { + Accept(); + }); + CancelCommand = new RelayCommand(Cancel); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs index ca1c95a03..6fbd5852d 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs @@ -9,17 +9,22 @@ using System.Threading.Tasks; using System.Windows.Data; using Tango.Core.Commands; using Tango.Core.Helpers; -using Tango.DAL.Observables; +using Tango.Integration.Observables; using Tango.MachineStudio.Common.Notifications; using Tango.SharedUI; using SimpleValidator.Extensions; +using Tango.MachineStudio.Common.StudioApplication; +using Tango.MachineStudio.Common; namespace Tango.MachineStudio.MachineDesigner.ViewModels { - public class MainViewVM : ViewModel + public class MainViewVM : ViewModel, IModuleRequestListener { private bool _isSaving; private INotificationProvider _notification; + + + #region Properties private ObservablesEntitiesAdapter _adapter; /// <summary> @@ -33,7 +38,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels private Machine _machine; /// <summary> - /// Gets or sets the machine. + /// Gets or sets the current editable machine. /// </summary> public Machine Machine { @@ -42,6 +47,9 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } private Machine _selectedMachine; + /// <summary> + /// Gets or sets the selected machine from the drop down. + /// </summary> public Machine SelectedMachine { get { return _selectedMachine; } @@ -50,7 +58,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels private Configuration _configuration; /// <summary> - /// Gets or sets the configuration. + /// Gets or sets the editable machine configuration. /// </summary> public Configuration Configuration { @@ -69,17 +77,18 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } private ObservableCollection<Configuration> _history; - + /// <summary> + /// Gets or sets the machine configuration history. + /// </summary> public ObservableCollection<Configuration> History { get { return _history; } set { _history = value; RaisePropertyChangedAuto(); } } - private Configuration _selectedHistoryConfiguration; /// <summary> - /// Gets or sets the selected history configuration. + /// Gets or sets the machine selected configuration from history. /// </summary> public Configuration SelectedHistoryConfiguration { @@ -88,20 +97,49 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } private String _filter; - + /// <summary> + /// Gets or sets the configuration components filter. + /// </summary> public String Filter { get { return _filter; } set { _filter = value; RaisePropertyChangedAuto(); OnFilterChanged(); } } + #endregion + + #region Commands + + /// <summary> + /// Gets or sets the save command. + /// </summary> public RelayCommand SaveCommand { get; set; } + /// <summary> + /// Gets or sets the add ids command. + /// </summary> public RelayCommand AddIdsCommand { get; set; } + /// <summary> + /// Gets or sets the remove ids command. + /// </summary> public RelayCommand RemoveIdsCommand { get; set; } /// <summary> + /// Gets or sets the set version configuration command. + /// </summary> + public RelayCommand SetVersionConfigurationCommand { get; set; } + + /// <summary> + /// Gets or sets the set as default command. + /// </summary> + public RelayCommand SetAsDefaultCommand { get; set; } + + #endregion + + #region Constructors + + /// <summary> /// Initializes a new instance of the <see cref="MainViewVM"/> class. /// </summary> public MainViewVM(INotificationProvider notification) @@ -117,9 +155,18 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels SaveCommand = new RelayCommand(Save, (x) => !_isSaving); AddIdsCommand = new RelayCommand(AddIds, (x) => !_isSaving && Configuration.IdsPacks.Count < 8); RemoveIdsCommand = new RelayCommand(RemoveIds, (x) => !_isSaving && SelectedIds != null); + SetVersionConfigurationCommand = new RelayCommand(SetVersionConfiguration,(x) => !_isSaving); + SetAsDefaultCommand = new RelayCommand(SetAsDefaultConfiguration,(x) => !_isSaving); } - private void OnSelectedMachineChanged() + #endregion + + #region Virtual Methods + + /// <summary> + /// Called when the selected machine has changed. + /// </summary> + protected virtual void OnSelectedMachineChanged() { if (SelectedMachine != null) { @@ -133,136 +180,224 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } } - public void DropIdsPack(IdsPack idsPack1, IdsPack idsPack2) + /// <summary> + /// Called when the history configuration has been selected + /// </summary> + protected virtual void OnHistoryConfigurationSelected() { - Configuration.IdsPacks.Swap(idsPack1, idsPack2); + if (SelectedHistoryConfiguration != null) + { + Configuration = SelectedHistoryConfiguration.CloneConfiguration(); + } } - private void OnHistoryConfigurationSelected() + /// <summary> + /// Called when the filter has changed + /// </summary> + protected virtual void OnFilterChanged() { - if (SelectedHistoryConfiguration != null) + + + List<ICollectionView> collections = new List<ICollectionView>(); + collections.Add(Adapter.ApplicationDisplayPanelVersionsViewSource); + collections.Add(Adapter.ApplicationVersionsViewSource); + collections.Add(Adapter.EmbeddedSoftwareVersionsViewSource); + collections.Add(Adapter.EmbeddedFirmwareVersionsViewSource); + collections.Add(Adapter.ApplicationOsVersionsViewSource); + collections.Add(Adapter.ApplicationVersionsViewSource); + collections.Add(Adapter.DispenserTypesViewSource); + collections.Add(Adapter.CartridgeTypesViewSource); + collections.Add(Adapter.LiquidTypesViewSource); + collections.Add(Adapter.MidTankTypesViewSource); + collections.Add(Adapter.HardwareVersionsViewSource); + + foreach (var collection in collections) { - Configuration = SelectedHistoryConfiguration.CloneConfiguration(); + collection.Filter = (x) => + { + foreach (var prop in x.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(y => y.PropertyType == typeof(String))) + { + String value = prop.GetValue(x).ToStringSafe(); + + if (value != null) + { + if (value.ToLower().Contains(Filter.ToLower())) + { + return true; + } + } + } + + return false; + }; } } + #endregion + + #region Drag Drop Handlers + + /// <summary> + /// Drops the ids pack. + /// </summary> + /// <param name="idsPack1">The ids pack1.</param> + /// <param name="idsPack2">The ids pack2.</param> + public void DropIdsPack(IdsPack idsPack1, IdsPack idsPack2) + { + Configuration.IdsPacks.Swap(idsPack1, idsPack2); + } + + /// <summary> + /// Drops the touch panel. + /// </summary> + /// <param name="applicationDisplayPanelVersion">The application display panel version.</param> public void DropTouchPanel(ApplicationDisplayPanelVersion applicationDisplayPanelVersion) { - Configuration.ApplicationDisplayPanelVersions = applicationDisplayPanelVersion; + Configuration.ApplicationDisplayPanelVersion = applicationDisplayPanelVersion; Configuration.ApplicationDisplayPanelVersionGuid = applicationDisplayPanelVersion.Guid; } + /// <summary> + /// Drops the application firmware version. + /// </summary> + /// <param name="applicationFirmwareVersion">The application firmware version.</param> public void DropApplicationFirmwareVersion(ApplicationFirmwareVersion applicationFirmwareVersion) { - Configuration.ApplicationFirmwareVersions = applicationFirmwareVersion; + Configuration.ApplicationFirmwareVersion = applicationFirmwareVersion; Configuration.ApplicationFirmwareVersionGuid = applicationFirmwareVersion.Guid; } + /// <summary> + /// Drops the application version. + /// </summary> + /// <param name="applicationVersion">The application version.</param> public void DropApplicationVersion(ApplicationVersion applicationVersion) { - Configuration.ApplicationVersions = applicationVersion; + Configuration.ApplicationVersion = applicationVersion; Configuration.ApplicationVersionGuid = applicationVersion.Guid; } + /// <summary> + /// Drops the hardware version. + /// </summary> + /// <param name="hardwareVersion">The hardware version.</param> public void DropHardwareVersion(HardwareVersion hardwareVersion) { - Configuration.HardwareVersions = hardwareVersion; + Configuration.HardwareVersion = hardwareVersion; Configuration.HardwareVersionGuid = hardwareVersion.Guid; } + /// <summary> + /// Drops the embedded firmware. + /// </summary> + /// <param name="embeddedFirmwareVersion">The embedded firmware version.</param> public void DropEmbeddedFirmware(EmbeddedFirmwareVersion embeddedFirmwareVersion) { - Configuration.EmbeddedFirmwareVersions = embeddedFirmwareVersion; + Configuration.EmbeddedFirmwareVersion = embeddedFirmwareVersion; Configuration.EmbeddedFirmwareVersionGuid = embeddedFirmwareVersion.Guid; } + /// <summary> + /// Drops the embedded software. + /// </summary> + /// <param name="embeddedSoftwareVersion">The embedded software version.</param> public void DropEmbeddedSoftware(EmbeddedSoftwareVersion embeddedSoftwareVersion) { - Configuration.EmbeddedSoftwareVersions = embeddedSoftwareVersion; + Configuration.EmbeddedSoftwareVersion = embeddedSoftwareVersion; Configuration.EmbeddedSoftwareVersionGuid = embeddedSoftwareVersion.Guid; } + /// <summary> + /// Drops the application os version. + /// </summary> + /// <param name="applicationOsVersion">The application os version.</param> public void DropApplicationOsVersion(ApplicationOsVersion applicationOsVersion) { - Configuration.ApplicationOsVersions = applicationOsVersion; + Configuration.ApplicationOsVersion = applicationOsVersion; Configuration.ApplicationVersionGuid = applicationOsVersion.Guid; } - private void RemoveIds() - { - Configuration.IdsPacks.Remove(SelectedIds); - SelectedIds = null; - } - - private void AddIds() - { - Configuration.IdsPacks.Add(new IdsPack() { Configuration = Configuration }); - InvalidateRelayCommands(); - } - + /// <summary> + /// Drops the type of the cartridge. + /// </summary> + /// <param name="cartridgeType">Type of the cartridge.</param> + /// <param name="idsPack">The ids pack.</param> public void DropCartridgeType(CartridgeType cartridgeType, IdsPack idsPack) { - idsPack.CartridgeTypes = cartridgeType; + idsPack.CartridgeType = cartridgeType; idsPack.CartridgeTypeGuid = cartridgeType.Guid; } - public void DropDispenser(Dispenser dispenser, IdsPack idsPack) + /// <summary> + /// Drops the dispenser. + /// </summary> + /// <param name="dispenserType">The dispenser.</param> + /// <param name="idsPack">The ids pack.</param> + public void DropDispenserType(DispenserType dispenserType, IdsPack idsPack) { - idsPack.Dispenser = dispenser; - idsPack.DispenserGuid = dispenser.Guid; + idsPack.DispenserType = dispenserType; + idsPack.DispenserTypeGuid = dispenserType.Guid; } + /// <summary> + /// Drops the type of the mid tank. + /// </summary> + /// <param name="midTankType">Type of the mid tank.</param> + /// <param name="idsPack">The ids pack.</param> public void DropMidTankType(MidTankType midTankType, IdsPack idsPack) { - idsPack.MidTankTypes = midTankType; + idsPack.MidTankType = midTankType; idsPack.MidTankTypeGuid = midTankType.Guid; } + /// <summary> + /// Drops the type of the liquid. + /// </summary> + /// <param name="liquidType">Type of the liquid.</param> + /// <param name="idsPack">The ids pack.</param> public void DropLiquidType(LiquidType liquidType, IdsPack idsPack) { - idsPack.LiquidTypes = liquidType; + idsPack.LiquidType = liquidType; idsPack.LiquidTypeGuid = liquidType.Guid; } - private void OnFilterChanged() + /// <summary> + /// Drops the ids formula. + /// </summary> + /// <param name="idsPackFormula">The ids pack formula.</param> + /// <param name="idsPack">The ids pack.</param> + /// <exception cref="NotImplementedException"></exception> + public void DropIdsFormula(IdsPackFormula idsPackFormula, IdsPack idsPack) { + idsPack.IdsPackFormula = idsPackFormula; + idsPack.IdsPackFormulaGuid = idsPackFormula.Guid; + } + #endregion - List<ICollectionView> collections = new List<ICollectionView>(); - collections.Add(Adapter.ApplicationDisplayPanelVersionsViewSource); - collections.Add(Adapter.ApplicationVersionsViewSource); - collections.Add(Adapter.EmbeddedSoftwareVersionsViewSource); - collections.Add(Adapter.EmbeddedFirmwareVersionsViewSource); - collections.Add(Adapter.ApplicationOsVersionsViewSource); - collections.Add(Adapter.ApplicationVersionsViewSource); - collections.Add(Adapter.DispensersViewSource); - collections.Add(Adapter.CartridgeTypesViewSource); - collections.Add(Adapter.LiquidTypesViewSource); - collections.Add(Adapter.MidTankTypesViewSource); - collections.Add(Adapter.HardwareVersionsViewSource); + #region Private Methods - foreach (var collection in collections) - { - collection.Filter = (x) => - { - foreach (var prop in x.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(y => y.PropertyType == typeof(String))) - { - String value = prop.GetValue(x).ToStringSafe(); - - if (value != null) - { - if (value.ToLower().Contains(Filter.ToLower())) - { - return true; - } - } - } + /// <summary> + /// Removes the selected IDS pack. + /// </summary> + private void RemoveIds() + { + Configuration.IdsPacks.Remove(SelectedIds); + SelectedIds = null; + } - return false; - }; - } + /// <summary> + /// Adds a new IDS pack. + /// </summary> + private void AddIds() + { + Configuration.IdsPacks.Add(new IdsPack() { Configuration = Configuration }); + InvalidateRelayCommands(); } + /// <summary> + /// Saves the current machine configuration. + /// </summary> private async void Save() { foreach (var ids in Configuration.IdsPacks) @@ -276,9 +411,9 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels List<String> errors = new List<string>(); - if (Machine.MachineVersions == null) + if (Machine.MachineVersion == null) { - errors.Add("Machine Version is required."); + errors.Add("Machine version is required."); } if (Machine.Name.IsNullOrWhiteSpace()) @@ -301,39 +436,39 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels errors.Add("Configuration name is required."); } - if (Configuration.ApplicationDisplayPanelVersions == null) + if (Configuration.ApplicationDisplayPanelVersion == null) { errors.Add("Touch Panel is required."); } - if (Configuration.ApplicationFirmwareVersions == null) + if (Configuration.ApplicationFirmwareVersion == null) { - errors.Add("Application Firmware is required."); + errors.Add("Application firmware is required."); } - if (Configuration.ApplicationOsVersions == null) + if (Configuration.ApplicationOsVersion == null) { - errors.Add("Application OS Version is required."); + errors.Add("Application operation system is required."); } - if (Configuration.ApplicationVersions == null) + if (Configuration.ApplicationVersion == null) { - errors.Add("Application Version is required."); + errors.Add("Application version is required."); } - if (Configuration.EmbeddedFirmwareVersions == null) + if (Configuration.EmbeddedFirmwareVersion == null) { - errors.Add("Embedded Firmware is required."); + errors.Add("Embedded firmware is required."); } - if (Configuration.EmbeddedSoftwareVersions == null) + if (Configuration.EmbeddedSoftwareVersion == null) { - errors.Add("Embedded Software is required."); + errors.Add("Embedded software is required."); } - if (Configuration.HardwareVersions == null) + if (Configuration.HardwareVersion == null) { - errors.Add("Hardware Version is required."); + errors.Add("Hardware version is required."); } foreach (var pack in Configuration.IdsPacks) @@ -343,31 +478,22 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels errors.Add(String.Format("Name is required on IDS pack number '{0}'.", Configuration.IdsPacks.IndexOf(pack) + 1)); continue; } - if (pack.CartridgeTypes == null) + if (pack.CartridgeType == null) { errors.Add(String.Format("Cartridge type is required on IDS pack '{0}'.", pack.Name)); } - if (pack.Dispenser == null) + if (pack.DispenserType == null) { - errors.Add(String.Format("Dispenser is required on IDS pack '{0}'.", pack.Name)); + errors.Add(String.Format("Dispenser type is required on IDS pack '{0}'.", pack.Name)); } - if (pack.LiquidTypes == null) + if (pack.LiquidType == null) { errors.Add(String.Format("Liquid type is required on IDS pack '{0}'.", pack.Name)); } - if (pack.MidTankTypes == null) + if (pack.MidTankType == null) { errors.Add(String.Format("Mid Tank type is required on IDS pack '{0}'.", pack.Name)); } - - var taken_ids = Adapter.Machines.Where(x => x.SerialNumber.ToLower() != Machine.SerialNumber).SelectMany(x => x.MachinesConfigurations).Select(x => x.Configuration).SelectMany(x => x.IdsPacks).ToList().FirstOrDefault(x => x.Dispenser.SerialNumber.ToLower() == pack.Dispenser.SerialNumber.ToLower()); - if (taken_ids != null && taken_ids.Configuration.MachinesConfigurations.Count > 0) - { - if (!_notification.ShowQuestion(String.Format("The Dispenser '{1}' on IDS pack '{0}' is already taken by another machine ('{2}', '{3}'). Are you sure you want to assign it to this machine?", pack.Name, pack.Dispenser.SerialNumber, taken_ids.Configuration.MachinesConfigurations.First().Machine.Name, taken_ids.Configuration.MachinesConfigurations.First().Machine.SerialNumber))) - { - return; - } - } } if (errors.Count > 0) @@ -403,7 +529,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels Configuration = Configuration, Machine = Machine, }); - await Machine.SaveAsync(); + await Machine.SaveAsync(Adapter.Context); Machine = Adapter.Machines.SingleOrDefault(x => x.Guid == Machine.Guid); Configuration = Machine.Configuration.CloneConfiguration(); @@ -419,7 +545,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels machine.Name = Machine.Name; machine.SerialNumber = Machine.SerialNumber; - machine.Configuration = Configuration; machine.Organization = Machine.Organization; @@ -431,8 +556,14 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels Machine = machine }); } + else + { + machine.Configuration.DefferedDelete(Adapter.Context); + } - await machine.SaveAsync(); + machine.Configuration = Configuration; + + await machine.SaveAsync(Adapter.Context); Machine = Adapter.Machines.SingleOrDefault(x => x.Guid == machine.Guid); Configuration = Machine.Configuration.CloneConfiguration(); @@ -453,10 +584,88 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } } + /// <summary> + /// Sets the specified machine history. + /// </summary> + /// <param name="machine">The machine.</param> private void SetHistory(Machine machine) { History = machine.MachinesConfigurations.Select(x => x.Configuration).ToObservableCollection(); History.Insert(0, machine.Configuration); } + + /// <summary> + /// Sets the current configuration to the selected machine version default configuration. + /// </summary> + private void SetVersionConfiguration() + { + if (Machine.MachineVersion != null) + { + Configuration = Machine.MachineVersion.DefaultConfiguration.CloneConfiguration(); + } + else + { + _notification.ShowError("No machine version selected."); + } + } + + /// <summary> + /// Sets the current configuration as a default machine version configuration. + /// </summary> + private void SetAsDefaultConfiguration() + { + _notification.ShowModalDialog<MachineVersionDialogVM>(async (vm) => + { + try + { + using (_notification.PushTaskItem("Saving Default Configuration...")) + { + if (vm.SelectedVersion != null) + { + vm.SelectedVersion.DefaultConfiguration = Configuration.CloneConfiguration(); + vm.SelectedVersion.DefaultConfigurationGuid = vm.SelectedVersion.DefaultConfiguration.Guid; + await vm.SelectedVersion.SaveAsync(Adapter.Context); + } + else + { + MachineVersion newVersion = new MachineVersion(); + newVersion.Version = vm.Version; + newVersion.Name = vm.VersionName; + + newVersion.DefaultConfiguration = Configuration.CloneConfiguration(); + newVersion.DefaultConfigurationGuid = newVersion.DefaultConfiguration.Guid; + await newVersion.SaveAsync(Adapter.Context); + } + } + } + catch (Exception ex) + { + _notification.ShowError(ex.Message); + } + + }, () => + { + + }); + } + + #endregion + + #region IModuleRequestListener + + /// <summary> + /// Called when the request has been made. + /// </summary> + /// <param name="module">The module instance.</param> + /// <param name="args">The arguments.</param> + public void OnRequestModule(IStudioModule module, object args) + { + if (module is MachineDesignerModule) + { + SelectedMachine = Adapter.Machines.SingleOrDefault(x => x.Guid == (args as Machine).Guid); + } + } + + #endregion } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineVersionDialog.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineVersionDialog.xaml new file mode 100644 index 000000000..f6c39a6cd --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineVersionDialog.xaml @@ -0,0 +1,71 @@ +<UserControl x:Class="Tango.MachineStudio.MachineDesigner.Views.MachineVersionDialog" + 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:mahapps="http://metro.mahapps.com/winfx/xaml/controls" + xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" + xmlns:autoComplete="clr-namespace:Tango.AutoComplete.Editors;assembly=Tango.AutoComplete" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:providers="clr-namespace:Tango.MachineStudio.MachineDesigner.AutoComplete" + xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" + xmlns:local="clr-namespace:Tango.MachineStudio.MachineDesigner.Views" + mc:Ignorable="d" Width="530" Height="239" Background="White"> + + <UserControl.Resources> + <providers:MachineVersionsProvider x:Key="VersionsProvider"></providers:MachineVersionsProvider> + </UserControl.Resources> + + <Grid> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="50"/> + <RowDefinition Height="1*"/> + </Grid.RowDefinitions> + + <Grid> + <StackPanel Orientation="Horizontal" Margin="10"> + <materialDesign:PackIcon Width="24" Height="24" Kind="Verified" VerticalAlignment="Center"></materialDesign:PackIcon> + <TextBlock Text="Default Version Configuration" VerticalAlignment="Center" Margin="10 0 0 0" FontSize="16"></TextBlock> + </StackPanel> + </Grid> + + <Grid Grid.Row="1" Margin="10"> + <Grid.RowDefinitions> + <RowDefinition Height="1*"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + + <Grid> + <StackPanel Margin="10"> + <TextBlock>Version</TextBlock> + <ComboBox ItemsSource="{Binding Adapter.MachineVersions}" Text="{Binding Version}" DisplayMemberPath="Version" SelectedItem="{Binding SelectedVersion}" IsEditable="True" materialDesign:HintAssist.Hint="Select or enter a new version name"></ComboBox> + <TextBlock Margin="0 10 0 0">Name</TextBlock> + <TextBox materialDesign:HintAssist.Hint="Version name" Text="{Binding VersionName}"> + <TextBox.Style> + <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}"> + <Setter Property="IsEnabled" Value="False"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding SelectedVersion}" Value="{x:Null}"> + <Setter Property="IsEnabled" Value="True"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </TextBox.Style> + </TextBox> + </StackPanel> + </Grid> + + <Grid Grid.Row="1"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Right" DockPanel.Dock="Bottom"> + <Button Command="{Binding AcceptCommand}" Style="{StaticResource MaterialDesignFlatButton}" IsDefault="True" Margin="0 8 8 0"> + ACCEPT + </Button> + <Button Command="{Binding CancelCommand}" Style="{StaticResource MaterialDesignFlatButton}" IsCancel="False" Margin="0 8 8 0"> + CANCEL + </Button> + </StackPanel> + </Grid> + </Grid> + </Grid> + </Grid> +</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineVersionDialog.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineVersionDialog.xaml.cs new file mode 100644 index 000000000..3d59d7cda --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineVersionDialog.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.MachineDesigner.Views +{ + /// <summary> + /// Interaction logic for MachineVersionDialog.xaml + /// </summary> + public partial class MachineVersionDialog : UserControl + { + public MachineVersionDialog() + { + InitializeComponent(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.xaml new file mode 100644 index 000000000..4d75651f7 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.xaml @@ -0,0 +1,327 @@ +<UserControl x:Class="Tango.MachineStudio.MachineDesigner.Views.MachineView" + 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:dragAndDrop="clr-namespace:Tango.DragAndDrop;assembly=Tango.DragAndDrop" + xmlns:global="clr-namespace:Tango.MachineStudio.MachineDesigner" + xmlns:fa="http://schemas.fontawesome.io/icons/" + xmlns:providers="clr-namespace:Tango.MachineStudio.MachineDesigner.AutoComplete" + xmlns:autoComplete="clr-namespace:Tango.AutoComplete.Editors;assembly=Tango.AutoComplete" + xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" + xmlns:sharedConverters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" + xmlns:vm="clr-namespace:Tango.MachineStudio.MachineDesigner.ViewModels" + xmlns:local="clr-namespace:Tango.MachineStudio.MachineDesigner.Views" + mc:Ignorable="d" + d:DesignHeight="720" d:DesignWidth="1280" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}"> + + <UserControl.Resources> + <sharedConverters:ColorToIntegerConverter x:Key="ColorToIntegerConverter" /> + <providers:MachinesProvider x:Key="MachinesProvider"></providers:MachinesProvider> + + <Style x:Key="draggableGrid" TargetType="Grid"> + <Setter Property="RenderTransform"> + <Setter.Value> + <ScaleTransform ScaleX="1" ScaleY="1"></ScaleTransform> + </Setter.Value> + </Setter> + <Setter Property="RenderTransformOrigin" Value="0.5,0.5"></Setter> + <Setter Property="Background" Value="Transparent"></Setter> + </Style> + + <Style TargetType="Expander" BasedOn="{StaticResource {x:Type Expander}}"> + <Setter Property="HeaderTemplate"> + <Setter.Value> + <DataTemplate> + <TextBlock Text="{Binding}" FontSize="13"></TextBlock> + </DataTemplate> + </Setter.Value> + </Setter> + </Style> + </UserControl.Resources> + + <Grid> + <Viewbox MaxWidth="1200" Grid.Row="1" > + <Grid VerticalAlignment="Top"> + + <Image IsHitTestVisible="False" Source="../Images/machine-full-fx.png" MaxWidth="800" RenderOptions.BitmapScalingMode="Fant"> + <Image.Effect> + <DropShadowEffect ShadowDepth="0" BlurRadius="20" Opacity="1" RenderingBias="Performance" Color="DimGray"></DropShadowEffect> + </Image.Effect> + </Image> + + <Canvas ClipToBounds="False" x:Name="canvas"> + + <Grid x:Name="hardwareGrid" Style="{StaticResource draggableGrid}" Width="118" Height="27" Canvas.Left="342" Canvas.Top="80" Background="#6B303030" IsHitTestVisible="True"> + <Border BorderBrush="#6C6C6C" BorderThickness="1" IsHitTestVisible="False"> + <StackPanel Orientation="Horizontal"> + <Image Source="../Images/hardware.png" Width="10" VerticalAlignment="Center" Margin="5" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Padding="2 0 2 0" VerticalAlignment="Center" TextAlignment="Center" Foreground="Gainsboro" IsHitTestVisible="False" FontSize="6" TextWrapping="Wrap"> + <Run Text="{Binding Configuration.HardwareVersion.Name}"></Run> + <Run Text="{Binding Configuration.HardwareVersion.Version}"></Run> + </TextBlock> + </StackPanel> + </Border> + </Grid> + + <TextBlock Canvas.Left="532" FontStyle="Italic" Foreground="Gray" Canvas.Top="-22">Hardware</TextBlock> + <Grid Width="97" Height="90" Canvas.Left="431" Canvas.Top="-13"> + <Rectangle Stroke="Gray" VerticalAlignment="Top" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <TextBlock Canvas.Top="222" Canvas.Left="446" FontStyle="Italic" Foreground="Gray">Add IDS</TextBlock> + <Grid Width="23" Height="20" Canvas.Top="231" Canvas.Left="414"> + <Rectangle Stroke="Gray" VerticalAlignment="Top" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <TextBlock Canvas.Top="255" Canvas.Left="500" FontStyle="Italic" Foreground="Gray">Remove IDS</TextBlock> + <Grid Width="35" Height="8" Canvas.Top="264" Canvas.Left="460"> + <Rectangle Stroke="Gray" VerticalAlignment="Top" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <Button Style="{StaticResource MaterialDesignFlatButton}" Height="24" Width="24" Padding="0" Canvas.Left="402" Canvas.Top="253"> + <materialDesign:PackIcon Kind="Plus" Width="24" Height="24"></materialDesign:PackIcon> + </Button> + + <Button Style="{StaticResource MaterialDesignFlatButton}" Height="24" Width="24" Padding="0" Canvas.Left="430" Canvas.Top="252"> + <materialDesign:PackIcon Kind="Minus" Width="24" Height="24"></materialDesign:PackIcon> + </Button> + + <Grid x:Name="gridIds" Width="310" Height="195" Canvas.Top="314" Canvas.Left="420"> + <ListBox ItemsSource="{Binding Configuration.IdsPacks}" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> + <ListBox.ItemContainerStyle> + <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}"> + <Setter Property="Padding" Value="0"></Setter> + <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter> + <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> + </Style> + </ListBox.ItemContainerStyle> + <ItemsControl.ItemsPanel> + <ItemsPanelTemplate> + <UniformGrid Columns="8"></UniformGrid> + </ItemsPanelTemplate> + </ItemsControl.ItemsPanel> + <ItemsControl.ItemTemplate> + <DataTemplate> + <Grid dragAndDrop:DragAndDropService.DraggableBorderBrush="{StaticResource AccentColorBrush}" > + <Grid.RowDefinitions> + <RowDefinition Height="1*"/> + <RowDefinition Height="30"/> + </Grid.RowDefinitions> + <Grid.Style> + <Style TargetType="Grid" BasedOn="{StaticResource draggableGrid}"> + <Style.Triggers> + + </Style.Triggers> + </Style> + </Grid.Style> + <UniformGrid Columns="1" Rows="2"> + <Grid Margin="2"> + <Image IsHitTestVisible="False" Source="../Images/dispenser.png" RenderOptions.BitmapScalingMode="Fant"> + <Image.Style> + <Style TargetType="Image"> + <Style.Triggers> + <DataTrigger Binding="{Binding DispenserType}" Value="{x:Null}"> + <Setter Property="Opacity" Value="0.2"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Image.Style> + </Image> + <Rectangle IsHitTestVisible="False" Margin="14 25 13 34"> + <Rectangle.Fill> + <LinearGradientBrush StartPoint="0,0" EndPoint="0,0.8" Opacity="0.8"> + <GradientStop Offset="0" Color="Transparent" /> + <GradientStop Offset="1" Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + </LinearGradientBrush> + </Rectangle.Fill> + </Rectangle> + </Grid> + + <Grid Margin="2"> + <Image IsHitTestVisible="False" Stretch="Fill" Source="../Images/mid-tank.png" RenderOptions.BitmapScalingMode="Fant"> + <Image.Style> + <Style TargetType="Image"> + <Style.Triggers> + <DataTrigger Binding="{Binding MidTankType}" Value="{x:Null}"> + <Setter Property="Opacity" Value="0.2"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Image.Style> + </Image> + <Rectangle IsHitTestVisible="False" Margin="4 25 4 1"> + <Rectangle.Fill> + <LinearGradientBrush StartPoint="0,0" EndPoint="0,0.8" Opacity="0.8"> + <GradientStop Offset="0" Color="Transparent" /> + <GradientStop Offset="1" Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + </LinearGradientBrush> + </Rectangle.Fill> + </Rectangle> + </Grid> + </UniformGrid> + + <Grid Grid.Row="1" Margin="3" IsHitTestVisible="False"> + <Grid.Style> + <Style TargetType="Grid"> + <Style.Triggers> + <DataTrigger Binding="{Binding CartridgeType}" Value="{x:Null}"> + <Setter Property="Opacity" Value="0.2"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Grid.Style> + <Border BorderBrush="#252525" BorderThickness="1" CornerRadius="3"> + <Border.Background> + <LinearGradientBrush> + <GradientStop Color="#FF252525"/> + <GradientStop Color="#FF838383" Offset="1"/> + </LinearGradientBrush> + </Border.Background> + </Border> + <Border BorderBrush="#252525" BorderThickness="1" CornerRadius="3"> + <Border.Background> + <LinearGradientBrush Opacity="0.7"> + <GradientStop Offset="0" Color="Transparent" /> + <GradientStop Offset="1" Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + </LinearGradientBrush> + </Border.Background> + </Border> + </Grid> + </Grid> + </DataTemplate> + </ItemsControl.ItemTemplate> + </ListBox> + + <Grid Margin="0 50 0 0"> + <Grid.Style> + <Style TargetType="Grid"> + <Setter Property="Visibility" Value="Hidden"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding Configuration.IdsPacks.Count}" Value="0"> + <Setter Property="Visibility" Value="Visible"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Grid.Style> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" FontWeight="Bold" Foreground="Gainsboro">NO IDS PACKS</TextBlock> + </Grid> + + <Rectangle VerticalAlignment="Bottom" Stroke="DimGray" StrokeThickness="1"> + <Rectangle.Effect> + <DropShadowEffect ShadowDepth="1" Opacity="1" Color="Black" /> + </Rectangle.Effect> + </Rectangle> + </Grid> + + <Grid x:Name="gridEmbedded" Style="{StaticResource draggableGrid}" Width="70" Height="100" Canvas.Left="80" Canvas.Top="331" IsHitTestVisible="True" SnapsToDevicePixels="True"> + <Image Source="../Images/ti-tm4c129x.png" RenderOptions.BitmapScalingMode="Fant"></Image> + </Grid> + + <Grid Width="61" IsHitTestVisible="True" SnapsToDevicePixels="True" ClipToBounds="True" Height="42" Canvas.Left="85" Canvas.Top="385"> + <Grid.RowDefinitions> + <RowDefinition Height="1*" /> + <RowDefinition Height="1*" /> + </Grid.RowDefinitions> + + <StackPanel Orientation="Horizontal"> + <Image Source="../Images/embedded.png" Width="10" VerticalAlignment="Center" Margin="1" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock VerticalAlignment="Center" Padding="1" Foreground="Gainsboro" IsHitTestVisible="False" FontSize="5" TextAlignment="Center" TextWrapping="Wrap" Height="15" Margin="0,6,0,0" Width="47"><Run Text="{Binding Configuration.EmbeddedFirmwareVersion.Name}"/><Run Text=" "/><Run Text="{Binding Configuration.EmbeddedFirmwareVersion.Version}"/></TextBlock> + </StackPanel> + <StackPanel Grid.Row="1" Orientation="Horizontal"> + <Image Source="../Images/embedded-software.png" Width="10" VerticalAlignment="Center" Margin="1" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Padding="1" IsHitTestVisible="False" VerticalAlignment="Center" Foreground="Gainsboro" FontSize="5" TextAlignment="Center" TextWrapping="Wrap" Height="14" Margin="0,6,0,1" Width="47"> + <Run Text="{Binding Configuration.EmbeddedSoftwareVersion.Name}"></Run> + <Run Text="{Binding Configuration.EmbeddedSoftwareVersion.Version}"></Run> + </TextBlock> + </StackPanel> + </Grid> + + <TextBlock Canvas.Top="163" Canvas.Left="288" FontStyle="Italic" Foreground="Gray">Touch Panel</TextBlock> + <Grid Width="53" Height="55" Canvas.Top="184" Canvas.Left="279"> + <Rectangle Stroke="Gray" VerticalAlignment="Bottom" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Right" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <TextBlock Canvas.Top="441" Canvas.Left="156" FontStyle="Italic" Foreground="Gray">Embedded Firmware</TextBlock> + <Grid Width="82" Height="26" Canvas.Top="410" Canvas.Left="158"> + <Rectangle Stroke="Gray" VerticalAlignment="Top" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Right" StrokeThickness="1" StrokeDashArray="6" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <TextBlock Canvas.Top="310" Canvas.Left="340" FontStyle="Italic" Foreground="Gray">Dispensers</TextBlock> + <Grid Width="53" Height="20" Canvas.Top="331" Canvas.Left="377"> + <Rectangle Stroke="Gray" VerticalAlignment="Bottom" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <TextBlock Canvas.Top="395" Canvas.Left="331" FontStyle="Italic" Foreground="Gray">Mid Tanks</TextBlock> + <Grid Width="62" Height="29" Canvas.Top="418" Canvas.Left="357"> + <Rectangle Stroke="Gray" VerticalAlignment="Bottom" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <TextBlock Canvas.Top="469" Canvas.Left="304" FontStyle="Italic" Foreground="Gray">Cartridges</TextBlock> + <Grid Width="87" Height="10" Canvas.Top="487" Canvas.Left="332"> + <Rectangle Stroke="Gray" VerticalAlignment="Bottom" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <Grid x:Name="gridTablet" Width="67" IsHitTestVisible="True" SnapsToDevicePixels="True" ClipToBounds="True" Height="90" Canvas.Left="188" Canvas.Top="198"> + <Grid.Style> + <Style TargetType="Grid" BasedOn="{StaticResource draggableGrid}"> + <Setter Property="Background" Value="#2B2B2B"></Setter> + <Style.Triggers> + <Trigger Property="dragAndDrop:DragAndDropService.IsDraggableOver" Value="True"> + <Setter Property="Background" Value="Black"></Setter> + </Trigger> + </Style.Triggers> + </Style> + </Grid.Style> + <Grid.RowDefinitions> + <RowDefinition Height="1*" /> + <RowDefinition Height="1*" /> + <RowDefinition Height="1*" /> + <RowDefinition Height="1*" /> + </Grid.RowDefinitions> + + <StackPanel> + <Image Source="../Images/tablet.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Padding="2 0 2 0" Foreground="Gainsboro" IsHitTestVisible="False" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> + <Run Text="{Binding Configuration.ApplicationDisplayPanelVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationDisplayPanelVersion.Version}"></Run> + </TextBlock> + </StackPanel> + + <StackPanel Grid.Row="2" > + <Image Source="../Images/app.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Padding="2 0 2 0" IsHitTestVisible="False" Foreground="Gainsboro" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> + <Run Text="{Binding Configuration.ApplicationVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationVersion.Version}"></Run> + </TextBlock> + </StackPanel> + + + <StackPanel Grid.Row="3" > + <Image Source="../Images/application-firmware.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Padding="2 0 2 0" IsHitTestVisible="False" Foreground="Gainsboro" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> + <Run Text="{Binding Configuration.ApplicationFirmwareVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationFirmwareVersion.Version}"></Run> + </TextBlock> + </StackPanel> + + <StackPanel Grid.Row="1" > + <Image Source="../Images/android.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Padding="2 0 2 0" IsHitTestVisible="False" Foreground="Gainsboro" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> + <Run Text="{Binding Configuration.ApplicationOsVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationOsVersion.Version}"></Run> + </TextBlock> + </StackPanel> + </Grid> + </Canvas> + </Grid> + </Viewbox> + </Grid> +</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.xaml.cs new file mode 100644 index 000000000..67fa0d5bf --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.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.MachineDesigner.Views +{ + /// <summary> + /// Interaction logic for MachineView.xaml + /// </summary> + public partial class MachineView : UserControl + { + public MachineView() + { + InitializeComponent(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml index 5324959e4..6257fa2af 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml @@ -13,7 +13,7 @@ xmlns:vm="clr-namespace:Tango.MachineStudio.MachineDesigner.ViewModels" xmlns:local="clr-namespace:Tango.MachineStudio.MachineDesigner.Views" mc:Ignorable="d" - d:DesignHeight="720" d:DesignWidth="1280" Background="White" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> + d:DesignHeight="720" d:DesignWidth="1280" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> <UserControl.Resources> <sharedConverters:ColorToIntegerConverter x:Key="ColorToIntegerConverter" /> @@ -123,8 +123,8 @@ <StackPanel Orientation="Horizontal"> <Image Source="../Images/hardware.png" Width="10" VerticalAlignment="Center" Margin="5" RenderOptions.BitmapScalingMode="Fant"></Image> <TextBlock Padding="2 0 2 0" VerticalAlignment="Center" TextAlignment="Center" Foreground="Gainsboro" IsHitTestVisible="False" FontSize="6" TextWrapping="Wrap"> - <Run Text="{Binding Configuration.HardwareVersions.Name}"></Run> - <Run Text="{Binding Configuration.HardwareVersions.Version}"></Run> + <Run Text="{Binding Configuration.HardwareVersion.Name}"></Run> + <Run Text="{Binding Configuration.HardwareVersion.Version}"></Run> </TextBlock> </StackPanel> </Border> @@ -189,7 +189,7 @@ <Image.Style> <Style TargetType="Image"> <Style.Triggers> - <DataTrigger Binding="{Binding Dispenser}" Value="{x:Null}"> + <DataTrigger Binding="{Binding DispenserType}" Value="{x:Null}"> <Setter Property="Opacity" Value="0.2"></Setter> </DataTrigger> </Style.Triggers> @@ -200,7 +200,7 @@ <Rectangle.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="0,0.8" Opacity="0.8"> <GradientStop Offset="0" Color="Transparent" /> - <GradientStop Offset="1" Color="{Binding LiquidTypes.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + <GradientStop Offset="1" Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> </LinearGradientBrush> </Rectangle.Fill> </Rectangle> @@ -211,7 +211,7 @@ <Image.Style> <Style TargetType="Image"> <Style.Triggers> - <DataTrigger Binding="{Binding MidTankTypes}" Value="{x:Null}"> + <DataTrigger Binding="{Binding MidTankType}" Value="{x:Null}"> <Setter Property="Opacity" Value="0.2"></Setter> </DataTrigger> </Style.Triggers> @@ -222,10 +222,16 @@ <Rectangle.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="0,0.8" Opacity="0.8"> <GradientStop Offset="0" Color="Transparent" /> - <GradientStop Offset="1" Color="{Binding LiquidTypes.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + <GradientStop Offset="1" Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> </LinearGradientBrush> </Rectangle.Fill> </Rectangle> + + <TextBlock Text="{Binding IdsPackFormula.Name}" TextWrapping="Wrap" Height="30" IsHitTestVisible="False" Width="50" Margin="-20 15 0 0" FontSize="7" TextAlignment="Center" RenderTransformOrigin="0.5,0.5" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock.LayoutTransform> + <RotateTransform Angle="90" /> + </TextBlock.LayoutTransform> + </TextBlock> </Grid> </UniformGrid> @@ -233,7 +239,7 @@ <Grid.Style> <Style TargetType="Grid"> <Style.Triggers> - <DataTrigger Binding="{Binding CartridgeTypes}" Value="{x:Null}"> + <DataTrigger Binding="{Binding CartridgeType}" Value="{x:Null}"> <Setter Property="Opacity" Value="0.2"></Setter> </DataTrigger> </Style.Triggers> @@ -251,7 +257,7 @@ <Border.Background> <LinearGradientBrush Opacity="0.7"> <GradientStop Offset="0" Color="Transparent" /> - <GradientStop Offset="1" Color="{Binding LiquidTypes.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + <GradientStop Offset="1" Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> </LinearGradientBrush> </Border.Background> </Border> @@ -294,13 +300,13 @@ <StackPanel Orientation="Horizontal"> <Image Source="../Images/embedded.png" Width="10" VerticalAlignment="Center" Margin="1" RenderOptions.BitmapScalingMode="Fant"></Image> - <TextBlock VerticalAlignment="Center" Padding="1" Foreground="Gainsboro" IsHitTestVisible="False" FontSize="5" TextAlignment="Center" TextWrapping="Wrap" Height="15" Margin="0,6,0,0" Width="47"><Run Text="{Binding Configuration.EmbeddedFirmwareVersions.Name}"/><Run Text=" "/><Run Text="{Binding Configuration.EmbeddedFirmwareVersions.Version}"/></TextBlock> + <TextBlock VerticalAlignment="Center" Padding="1" Foreground="Gainsboro" IsHitTestVisible="False" FontSize="5" TextAlignment="Center" TextWrapping="Wrap" Height="15" Margin="0,6,0,0" Width="47"><Run Text="{Binding Configuration.EmbeddedFirmwareVersion.Name}"/><Run Text=" "/><Run Text="{Binding Configuration.EmbeddedFirmwareVersion.Version}"/></TextBlock> </StackPanel> <StackPanel Grid.Row="1" Orientation="Horizontal"> <Image Source="../Images/embedded-software.png" Width="10" VerticalAlignment="Center" Margin="1" RenderOptions.BitmapScalingMode="Fant"></Image> <TextBlock Padding="1" IsHitTestVisible="False" VerticalAlignment="Center" Foreground="Gainsboro" FontSize="5" TextAlignment="Center" TextWrapping="Wrap" Height="14" Margin="0,6,0,1" Width="47"> - <Run Text="{Binding Configuration.EmbeddedSoftwareVersions.Name}"></Run> - <Run Text="{Binding Configuration.EmbeddedSoftwareVersions.Version}"></Run> + <Run Text="{Binding Configuration.EmbeddedSoftwareVersion.Name}"></Run> + <Run Text="{Binding Configuration.EmbeddedSoftwareVersion.Version}"></Run> </TextBlock> </StackPanel> </Grid> @@ -356,16 +362,16 @@ <StackPanel> <Image Source="../Images/tablet.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> <TextBlock Padding="2 0 2 0" Foreground="Gainsboro" IsHitTestVisible="False" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> - <Run Text="{Binding Configuration.ApplicationDisplayPanelVersions.Name}"></Run> - <Run Text="{Binding Configuration.ApplicationDisplayPanelVersions.Version}"></Run> + <Run Text="{Binding Configuration.ApplicationDisplayPanelVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationDisplayPanelVersion.Version}"></Run> </TextBlock> </StackPanel> <StackPanel Grid.Row="2" > <Image Source="../Images/app.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> <TextBlock Padding="2 0 2 0" IsHitTestVisible="False" Foreground="Gainsboro" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> - <Run Text="{Binding Configuration.ApplicationVersions.Name}"></Run> - <Run Text="{Binding Configuration.ApplicationVersions.Version}"></Run> + <Run Text="{Binding Configuration.ApplicationVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationVersion.Version}"></Run> </TextBlock> </StackPanel> @@ -373,16 +379,16 @@ <StackPanel Grid.Row="3" > <Image Source="../Images/application-firmware.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> <TextBlock Padding="2 0 2 0" IsHitTestVisible="False" Foreground="Gainsboro" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> - <Run Text="{Binding Configuration.ApplicationFirmwareVersions.Name}"></Run> - <Run Text="{Binding Configuration.ApplicationFirmwareVersions.Version}"></Run> + <Run Text="{Binding Configuration.ApplicationFirmwareVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationFirmwareVersion.Version}"></Run> </TextBlock> </StackPanel> <StackPanel Grid.Row="1" > <Image Source="../Images/android.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> <TextBlock Padding="2 0 2 0" IsHitTestVisible="False" Foreground="Gainsboro" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> - <Run Text="{Binding Configuration.ApplicationOsVersions.Name}"></Run> - <Run Text="{Binding Configuration.ApplicationOsVersions.Version}"></Run> + <Run Text="{Binding Configuration.ApplicationOsVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationOsVersion.Version}"></Run> </TextBlock> </StackPanel> </Grid> @@ -403,19 +409,23 @@ <StackPanel Margin="20 0 0 0"> <StackPanel Orientation="Horizontal" Margin="0 3 0 3"> <Image RenderOptions.BitmapScalingMode="Fant" Source="../Images/injection.png" Width="12" VerticalAlignment="Center"></Image> - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center"><Run FontWeight="Bold">Dispenser:</Run> <Run FontStyle="Italic" Text="{Binding Dispenser.SerialNumber}"></Run></TextBlock> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center"><Run FontWeight="Bold">Dispenser:</Run> <Run FontStyle="Italic" Text="{Binding DispenserType.Name}"></Run></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Margin="0 3 0 3"> - <Image RenderOptions.BitmapScalingMode="Fant" Source="../Images/cartridge.png" Width="12" VerticalAlignment="Center"></Image> - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center"><Run FontWeight="Bold">Cartridge:</Run> <Run FontStyle="Italic" Text="{Binding CartridgeTypes.Name}"></Run></TextBlock> + <Image RenderOptions.BitmapScalingMode="Fant" Source="../Images/tank.png" Width="12" VerticalAlignment="Center"></Image> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center"><Run FontWeight="Bold">Mid Tank:</Run> <Run FontStyle="Italic" Text="{Binding MidTankType.Name}"></Run></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Margin="0 3 0 3"> - <Image RenderOptions.BitmapScalingMode="Fant" Source="../Images/tank.png" Width="12" VerticalAlignment="Center"></Image> - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center"><Run FontWeight="Bold">Mid Tank:</Run> <Run FontStyle="Italic" Text="{Binding MidTankTypes.Name}"></Run></TextBlock> + <Image RenderOptions.BitmapScalingMode="Fant" Source="../Images/cartridge.png" Width="12" VerticalAlignment="Center"></Image> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center"><Run FontWeight="Bold">Cartridge:</Run> <Run FontStyle="Italic" Text="{Binding CartridgeType.Name}"></Run></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Margin="0 3 0 3"> <Image RenderOptions.BitmapScalingMode="Fant" Source="../Images/liquid.png" Width="12" VerticalAlignment="Center"></Image> - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center"><Run FontWeight="Bold">Liquid:</Run> <Run FontStyle="Italic" Text="{Binding LiquidTypes.Name}"></Run></TextBlock> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center"><Run FontWeight="Bold">Liquid:</Run> <Run FontStyle="Italic" Text="{Binding LiquidType.Name}"></Run></TextBlock> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="0 3 0 3"> + <Image RenderOptions.BitmapScalingMode="Fant" Source="../Images/formula.png" Width="12" VerticalAlignment="Center"></Image> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center"><Run FontWeight="Bold">Formula:</Run> <Run FontStyle="Italic" Text="{Binding IdsPackFormula.Name}"></Run></TextBlock> </StackPanel> </StackPanel> </StackPanel> @@ -431,7 +441,7 @@ <Grid Grid.Column="1"> <Grid.RowDefinitions> <RowDefinition/> - <RowDefinition Height="70"/> + <RowDefinition Height="60"/> </Grid.RowDefinitions> <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"> <Grid> @@ -447,7 +457,14 @@ <TextBox Text="{Binding Machine.Name,UpdateSourceTrigger=PropertyChanged}"></TextBox> <TextBlock Margin="0 15 0 0" FontSize="10" Foreground="Gray">Machine Version</TextBlock> - <ComboBox ItemsSource="{Binding Adapter.MachineVersions}" SelectedItem="{Binding Machine.MachineVersions}" DisplayMemberPath="Name"></ComboBox> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="1*"></ColumnDefinition> + <ColumnDefinition Width="80"></ColumnDefinition> + </Grid.ColumnDefinitions> + <ComboBox ItemsSource="{Binding Adapter.MachineVersions}" SelectedItem="{Binding Machine.MachineVersion}" DisplayMemberPath="Name"></ComboBox> + <Button Grid.Column="1" Command="{Binding SetVersionConfigurationCommand}" Height="25" Margin="10 2 2 2" ToolTip="Sets the current configuration to the selected machine version default configuration">SET</Button> + </Grid> <TextBlock Margin="0 15 0 0" FontSize="10" Foreground="Gray">Organization</TextBlock> <ComboBox ItemsSource="{Binding Adapter.Organizations}" SelectedItem="{Binding Machine.Organization}" DisplayMemberPath="Name"></ComboBox> @@ -502,7 +519,7 @@ <materialDesign:Card Margin="5,10,5,0" Background="{DynamicResource MaterialDesignBackground}"> <StackPanel> <Expander HorizontalAlignment="Stretch" Header="Dispensers"> - <ListBox ItemsSource="{Binding Adapter.DispensersViewSource}" HorizontalContentAlignment="Stretch"> + <ListBox ItemsSource="{Binding Adapter.DispenserTypesViewSource}" HorizontalContentAlignment="Stretch"> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}"> <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> @@ -516,8 +533,7 @@ <StackPanel Orientation="Horizontal" Margin="2 8"> <Image IsHitTestVisible="False" Width="24" Height="24" Source="../Images/injection.png" Stretch="Fill" RenderOptions.BitmapScalingMode="Fant"></Image> <StackPanel Margin="5 0 0 0" IsHitTestVisible="False"> - <TextBlock IsHitTestVisible="False" FontSize="10" Foreground="DimGray"><Run Text="{Binding DispenserTypes.Name}"></Run></TextBlock> - <TextBlock IsHitTestVisible="False" FontSize="10" Foreground="DimGray" Margin="0 2 0 0"><Run Text="{Binding SerialNumber}"></Run></TextBlock> + <TextBlock IsHitTestVisible="False" FontSize="10" Foreground="DimGray"><Run Text="{Binding Name}"></Run></TextBlock> </StackPanel> </StackPanel> @@ -612,6 +628,32 @@ </ListBox> </Expander> <Border Height="1" HorizontalAlignment="Stretch" Background="{DynamicResource MaterialDesignDivider}" SnapsToDevicePixels="True" /> + <Expander HorizontalAlignment="Stretch" Header="Formulas"> + <ListBox ItemsSource="{Binding Adapter.IdsPackFormulasViewSource}" HorizontalContentAlignment="Stretch"> + <ListBox.ItemContainerStyle> + <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}"> + <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> + <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter> + <Setter Property="Padding" Value="1"></Setter> + </Style> + </ListBox.ItemContainerStyle> + <ListBox.ItemTemplate> + <DataTemplate> + <Grid Background="Transparent" IsHitTestVisible="True" dragAndDrop:DragAndDropService.DraggableBorderBrush="{StaticResource AccentColorBrush}" dragAndDrop:DragAndDropService.Draggable="True" dragAndDrop:DragAndDropService.DraggingSurface="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DraggingSurface}"> + <StackPanel Orientation="Horizontal" Margin="2 8"> + <Image IsHitTestVisible="False" Width="24" Height="24" Source="../Images/formula.png" Stretch="Fill" RenderOptions.BitmapScalingMode="Fant"></Image> + <StackPanel Margin="5 0 0 0" IsHitTestVisible="False"> + <TextBlock IsHitTestVisible="False" FontSize="10" Foreground="DimGray"><Run Text="{Binding Name}"></Run></TextBlock> + </StackPanel> + </StackPanel> + + <Rectangle Margin="0 10 0 0" VerticalAlignment="Bottom" Stroke="Gainsboro" StrokeThickness="1"></Rectangle> + </Grid> + </DataTemplate> + </ListBox.ItemTemplate> + </ListBox> + </Expander> + <Border Height="1" HorizontalAlignment="Stretch" Background="{DynamicResource MaterialDesignDivider}" SnapsToDevicePixels="True" /> <Expander HorizontalAlignment="Stretch" Header="Touch Panels"> <ListBox ItemsSource="{Binding Adapter.ApplicationDisplayPanelVersionsViewSource}" HorizontalContentAlignment="Stretch"> <ListBox.ItemContainerStyle> @@ -807,12 +849,24 @@ </ScrollViewer> <Grid Grid.Row="1" Margin="10"> - <Button Height="50" Command="{Binding SaveCommand}" Margin="0 0 15 0"> - <StackPanel Orientation="Horizontal"> - <materialDesign:PackIcon Width="24" Height="24" VerticalAlignment="Center" Kind="ContentSaveSettings"></materialDesign:PackIcon> - <TextBlock FontSize="18" Margin="10 0 0 0" VerticalAlignment="Center">SAVE</TextBlock> - </StackPanel> - </Button> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="61*"/> + <ColumnDefinition Width="84*"/> + </Grid.ColumnDefinitions> + <Button Height="Auto" Command="{Binding SaveCommand}" Margin="0 0 5 0"> + <StackPanel Orientation="Horizontal"> + <materialDesign:PackIcon Width="20" Height="20" VerticalAlignment="Center" Kind="ContentSaveSettings"></materialDesign:PackIcon> + <TextBlock FontSize="14" Margin="10 0 0 0" VerticalAlignment="Center">SAVE</TextBlock> + </StackPanel> + </Button> + <Button ToolTip="Set this configuration as a default machine configuration" Height="Auto" Background="#FF5C5C" BorderBrush="#FF5C5C" Command="{Binding SetAsDefaultCommand}" Margin="0 0 15 0" Grid.Column="1"> + <StackPanel Orientation="Horizontal"> + <materialDesign:PackIcon Width="20" Height="20" VerticalAlignment="Center" Kind="Verified"></materialDesign:PackIcon> + <TextBlock FontSize="14" Margin="10 0 0 0" VerticalAlignment="Center">SET DEFAULT</TextBlock> + </StackPanel> + </Button> + </Grid> </Grid> </Grid> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml.cs index 44ce75c12..528bb3457 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml.cs @@ -14,7 +14,7 @@ using System.Windows.Media.Animation; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; -using Tango.DAL.Observables; +using Tango.Integration.Observables; using Tango.DragAndDrop; using Tango.MachineStudio.MachineDesigner.ViewModels; @@ -62,7 +62,7 @@ namespace Tango.MachineStudio.MachineDesigner.Views { SetHighlightRegion(hardwareGrid); } - else if (e.DataContext is ApplicationVersion || e.DataContext is ApplicationOsVersion || e.DataContext is ApplicationDisplayPanelVersion) + else if (e.DataContext is ApplicationVersion || e.DataContext is ApplicationOsVersion || e.DataContext is ApplicationDisplayPanelVersion || e.DataContext is ApplicationFirmwareVersion) { SetHighlightRegion(gridTablet); } @@ -70,7 +70,7 @@ namespace Tango.MachineStudio.MachineDesigner.Views { SetHighlightRegion(gridEmbedded); } - else if (e.DataContext is Dispenser || e.DataContext is Cartridge || e.DataContext is LiquidType || e.DataContext is MidTankType) + else if (e.DataContext is DispenserType || e.DataContext is CartridgeType || e.DataContext is LiquidType || e.DataContext is MidTankType || e.DataContext is IdsPackFormula) { SetHighlightRegion(gridIds); } @@ -86,9 +86,9 @@ namespace Tango.MachineStudio.MachineDesigner.Views private void OnDropOnIdsPack(object sender, DropEventArgs e) { - if (e.Draggable.DataContext is Dispenser) + if (e.Draggable.DataContext is DispenserType) { - _vm.DropDispenser(e.Draggable.DataContext as Dispenser, e.Droppable.DataContext as IdsPack); + _vm.DropDispenserType(e.Draggable.DataContext as DispenserType, e.Droppable.DataContext as IdsPack); } else if (e.Draggable.DataContext is LiquidType) { @@ -102,6 +102,10 @@ namespace Tango.MachineStudio.MachineDesigner.Views { _vm.DropMidTankType(e.Draggable.DataContext as MidTankType, e.Droppable.DataContext as IdsPack); } + else if (e.Draggable.DataContext is IdsPackFormula) + { + _vm.DropIdsFormula(e.Draggable.DataContext as IdsPackFormula, e.Droppable.DataContext as IdsPack); + } else if (e.Draggable.DataContext is IdsPack) { _vm.DropIdsPack(e.Draggable.DataContext as IdsPack, e.Droppable.DataContext as IdsPack); |
