From 41b950b3f3f7fa0384cccd13ed4ef38119bbcbcf Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 18 Dec 2019 15:52:25 +0200 Subject: Fixed ContinueThreadLoadingResponse. Refactored ActionLog Difference data structure to node tree. --- .../MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI') diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs index a61f14746..6c550ffda 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs @@ -95,7 +95,7 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Register(); TangoIOC.Default.Register(); TangoIOC.Default.Register(); - TangoIOC.Default.Register(new DefaultActionLogManager() { ThrowExceptions = false }); + TangoIOC.Default.Register(); TangoIOC.Default.Register(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com", String.Empty, "szzfokrceo4rhd4eqi5qpmxn3pa5iwl3q7tlqd36l2m7smz2ynoa")); -- cgit v1.3.1 From 68916b0c7e3322ff1ca8b45ed789973a23ccac51 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 18 Dec 2019 19:55:31 +0200 Subject: Improved architecture of ActionLogs. --- .../ViewModels/MainViewVM.cs | 4 +- .../Tango.MachineStudio.UI/ViewModelLocator.cs | 2 +- .../Tango.BL/ActionLogs/BasicActionLogComparer.cs | 234 --------------------- .../ActionLogs/DefaultActionLogComparer.cs | 234 +++++++++++++++++++++ .../Tango.BL/ActionLogs/DefaultActionLogManager.cs | 74 +++++-- .../Tango.BL/ActionLogs/IActionLogComparable.cs | 20 -- .../Tango.BL/ActionLogs/IActionLogComparer.cs | 23 ++ .../Tango.BL/ActionLogs/IActionLogManager.cs | 10 + .../Visual_Studio/Tango.BL/ObservableEntity.cs | 26 +-- .../Visual_Studio/Tango.BL/ObservableEntityDTO.cs | 26 +-- Software/Visual_Studio/Tango.BL/Tango.BL.csproj | 9 +- 11 files changed, 337 insertions(+), 325 deletions(-) delete mode 100644 Software/Visual_Studio/Tango.BL/ActionLogs/BasicActionLogComparer.cs create mode 100644 Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs create mode 100644 Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparer.cs (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs index 404a459d3..ae763167b 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs @@ -320,11 +320,13 @@ namespace Tango.MachineStudio.Catalogs.ViewModels IsFree = false; ActiveCatalog.LastUpdated = DateTime.UtcNow; await _activeCatalogContext.SaveChangesAsync(); - await LoadCatalogs(); var activeCatalogDTO = ColorCatalogDTO.FromObservable(ActiveCatalog); _actionLogManager.InsertLog(ActionLogType.CatalogSaved, _authentication.CurrentUser, ActiveCatalog.Name, _catalogBeforeSave, activeCatalogDTO, "Catalog created using Machine Studio."); _catalogBeforeSave = activeCatalogDTO; + + await LoadCatalogs(); + _notification.ShowInfo("Catalog updated successfully."); } catch (Exception ex) diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs index 6c550ffda..9539037f1 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs @@ -95,7 +95,7 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Register(); TangoIOC.Default.Register(); TangoIOC.Default.Register(); - TangoIOC.Default.Register(); + TangoIOC.Default.Register(new DefaultActionLogManager() { IsAsync = true }); TangoIOC.Default.Register(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com", String.Empty, "szzfokrceo4rhd4eqi5qpmxn3pa5iwl3q7tlqd36l2m7smz2ynoa")); diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/BasicActionLogComparer.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/BasicActionLogComparer.cs deleted file mode 100644 index de07f6678..000000000 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/BasicActionLogComparer.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.ValueObjects; - -namespace Tango.BL.ActionLogs -{ - /// - /// Represents a basic ActionLog comparison engine. - /// - public class BasicActionLogComparer - { - /// - /// Compares two instances of . - /// - /// The object before the change. - /// The object after the change. - /// - public Task Compare(IActionLogComparable before, IActionLogComparable after) - { - return Task.Factory.StartNew(() => - { - ActionLogDifference diff = new ActionLogDifference(); - diff.Name = GetComponentName(before, after); - - Compare(diff, before, after, null); - RemoveNoDifferences(diff); - - return diff; - }); - } - - #region Helpers - - private void Compare(ActionLogDifference diff, Object before, Object after, HashSet scannedObjects) - { - if (scannedObjects == null) - { - scannedObjects = new HashSet(); - } - - if (before == null && after == null) return; - - if (before != null) - { - if (scannedObjects.Contains(before)) return; - scannedObjects.Add(before); - } - - if (after != null) - { - if (scannedObjects.Contains(after)) return; - scannedObjects.Add(after); - } - - foreach (var prop in GetProperties(before, after).OrderByDescending(x => x.PropertyType.IsPrimitive || x.PropertyType.IsValueType || x.PropertyType == typeof(String))) - { - if (GetShouldIgnore(prop, before, after)) continue; - - if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String)) - { - object beforeValue = null; - object afterValue = null; - - if (before != null) - { - beforeValue = prop.GetValue(before); - } - - if (after != null) - { - afterValue = prop.GetValue(after); - } - - if (afterValue == null && beforeValue != null) AddValueDiff(diff, prop.Name, beforeValue, afterValue); - if (afterValue != null && beforeValue == null) AddValueDiff(diff, prop.Name, beforeValue, afterValue); - - if (afterValue != null && beforeValue != null) - { - if (!afterValue.Equals(beforeValue)) - { - AddValueDiff(diff, prop.Name, beforeValue, afterValue); - } - } - } - else if (!prop.PropertyType.IsGenericType) - { - object beforePropInstance = null; - object afterPropInstance = null; - - if (before != null) - { - beforePropInstance = prop.GetValue(before); - } - - if (after != null) - { - afterPropInstance = prop.GetValue(after); - } - - Compare(AddChildDiff(diff, prop.Name), beforePropInstance, afterPropInstance, scannedObjects); - } - else - { - IList beforeCollection = null; - IList afterCollection = null; - - if (before != null) - { - beforeCollection = prop.GetValue(before) as IList; - } - - if (after != null) - { - afterCollection = prop.GetValue(after) as IList; - } - - if (beforeCollection != null && afterCollection == null) - { - for (int i = 0; i < beforeCollection.Count; i++) - { - Compare(AddChildDiff(diff, GetActionLogName(beforeCollection[i], prop.Name)), beforeCollection[i], null, scannedObjects); - } - } - else if (beforeCollection == null && afterCollection != null) - { - for (int i = 0; i < afterCollection.Count; i++) - { - Compare(AddChildDiff(diff, GetActionLogName(afterCollection[i], prop.Name)), null, afterCollection[i], scannedObjects); - } - } - - if (beforeCollection != null && afterCollection != null) - { - for (int i = 0; i < Math.Max(beforeCollection.Count, afterCollection.Count); i++) - { - var beforeItem = i < beforeCollection.Count ? beforeCollection[i] : null; - var afterItem = i < afterCollection.Count ? afterCollection[i] : null; - Compare(AddChildDiff(diff, GetActionLogName(beforeItem, prop.Name)), beforeItem, afterItem, scannedObjects); - } - } - } - } - } - - private void AddValueDiff(ActionLogDifference diff, String property, object before, object after) - { - diff.Children.Add(new ActionLogDifferenceValue() - { - Name = property, - Before = before, - After = after - }); - } - - private ActionLogDifference AddChildDiff(ActionLogDifference diff, String property) - { - ActionLogDifference childDiff = new ActionLogDifference(); - childDiff.Name = property; - diff.Children.Add(childDiff); - return childDiff; - } - - private void RemoveNoDifferences(ActionLogDifference diff) - { - foreach (var child in diff.Children.ToList()) - { - if (!child.HasDifference) - { - diff.Children.Remove(child); - } - else - { - RemoveNoDifferences(child); - } - } - } - - private String GetComponentName(Object before, Object after) - { - var afterCast = after as IActionLogComparable; - var beforeCast = before as IActionLogComparable; - - var name = afterCast != null ? afterCast.GetActionLogName() : beforeCast.GetActionLogName(); - - return name; - } - - private String GetActionLogName(Object obj, String defaultName) - { - var objCast = obj as IActionLogComparable; - if (objCast != null) - { - return objCast.GetActionLogName(); - } - else - { - return defaultName; - } - } - - private PropertyInfo GetProperty(String name, Object before, Object after) - { - return after != null ? after.GetType().GetProperty(name) : before.GetType().GetProperty(name); - } - - private List GetProperties(BindingFlags flags, Object before, Object after) - { - return after != null ? after.GetType().GetProperties(flags).ToList() : before.GetType().GetProperties(flags).ToList(); - } - - private List GetProperties(Object before, Object after) - { - return after != null ? after.GetType().GetProperties().ToList() : before.GetType().GetProperties().ToList(); - } - - private bool GetShouldIgnore(PropertyInfo prop, Object before, Object after) - { - var beforeCast = before as IActionLogComparable; - var afterCast = after as IActionLogComparable; - - if (beforeCast != null) return beforeCast.ShouldActionLogIgnore(prop.Name); - if (afterCast != null) return afterCast.ShouldActionLogIgnore(prop.Name); - - return false; - } - - #endregion - } -} diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs new file mode 100644 index 000000000..542aba0e4 --- /dev/null +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogComparer.cs @@ -0,0 +1,234 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using Tango.BL.ValueObjects; + +namespace Tango.BL.ActionLogs +{ + /// + /// Represents the default implementation of . + /// + public class DefaultActionLogComparer : IActionLogComparer + { + /// + /// Compares the specified object before and after changes and returns the difference tree. + /// + /// The object before the change. + /// The object after the change. + /// + public Task Compare(IActionLogComparable before, IActionLogComparable after) + { + return Task.Factory.StartNew(() => + { + ActionLogDifference diff = new ActionLogDifference(); + diff.Name = GetComponentName(before, after); + + Compare(diff, before, after, null); + RemoveNoDifferences(diff); + + return diff; + }); + } + + #region Helpers + + private void Compare(ActionLogDifference diff, Object before, Object after, HashSet scannedObjects) + { + if (scannedObjects == null) + { + scannedObjects = new HashSet(); + } + + if (before == null && after == null) return; + + if (before != null) + { + if (scannedObjects.Contains(before)) return; + scannedObjects.Add(before); + } + + if (after != null) + { + if (scannedObjects.Contains(after)) return; + scannedObjects.Add(after); + } + + foreach (var prop in GetProperties(before, after).OrderByDescending(x => x.PropertyType.IsPrimitive || x.PropertyType.IsValueType || x.PropertyType == typeof(String))) + { + if (GetShouldIgnore(prop, before, after)) continue; + + if (prop.PropertyType.IsPrimitive || prop.PropertyType.IsValueType || prop.PropertyType == typeof(String)) + { + object beforeValue = null; + object afterValue = null; + + if (before != null) + { + beforeValue = prop.GetValue(before); + } + + if (after != null) + { + afterValue = prop.GetValue(after); + } + + if (afterValue == null && beforeValue != null) AddValueDiff(diff, prop.Name, beforeValue, afterValue); + if (afterValue != null && beforeValue == null) AddValueDiff(diff, prop.Name, beforeValue, afterValue); + + if (afterValue != null && beforeValue != null) + { + if (!afterValue.Equals(beforeValue)) + { + AddValueDiff(diff, prop.Name, beforeValue, afterValue); + } + } + } + else if (!prop.PropertyType.IsGenericType) + { + object beforePropInstance = null; + object afterPropInstance = null; + + if (before != null) + { + beforePropInstance = prop.GetValue(before); + } + + if (after != null) + { + afterPropInstance = prop.GetValue(after); + } + + Compare(AddChildDiff(diff, prop.Name), beforePropInstance, afterPropInstance, scannedObjects); + } + else + { + IList beforeCollection = null; + IList afterCollection = null; + + if (before != null) + { + beforeCollection = prop.GetValue(before) as IList; + } + + if (after != null) + { + afterCollection = prop.GetValue(after) as IList; + } + + if (beforeCollection != null && afterCollection == null) + { + for (int i = 0; i < beforeCollection.Count; i++) + { + Compare(AddChildDiff(diff, GetActionLogName(beforeCollection[i], prop.Name)), beforeCollection[i], null, scannedObjects); + } + } + else if (beforeCollection == null && afterCollection != null) + { + for (int i = 0; i < afterCollection.Count; i++) + { + Compare(AddChildDiff(diff, GetActionLogName(afterCollection[i], prop.Name)), null, afterCollection[i], scannedObjects); + } + } + + if (beforeCollection != null && afterCollection != null) + { + for (int i = 0; i < Math.Max(beforeCollection.Count, afterCollection.Count); i++) + { + var beforeItem = i < beforeCollection.Count ? beforeCollection[i] : null; + var afterItem = i < afterCollection.Count ? afterCollection[i] : null; + Compare(AddChildDiff(diff, GetActionLogName(beforeItem, prop.Name)), beforeItem, afterItem, scannedObjects); + } + } + } + } + } + + private void AddValueDiff(ActionLogDifference diff, String property, object before, object after) + { + diff.Children.Add(new ActionLogDifferenceValue() + { + Name = property, + Before = before, + After = after + }); + } + + private ActionLogDifference AddChildDiff(ActionLogDifference diff, String property) + { + ActionLogDifference childDiff = new ActionLogDifference(); + childDiff.Name = property; + diff.Children.Add(childDiff); + return childDiff; + } + + private void RemoveNoDifferences(ActionLogDifference diff) + { + foreach (var child in diff.Children.ToList()) + { + if (!child.HasDifference) + { + diff.Children.Remove(child); + } + else + { + RemoveNoDifferences(child); + } + } + } + + private String GetComponentName(Object before, Object after) + { + var afterCast = after as IActionLogComparable; + var beforeCast = before as IActionLogComparable; + + var name = afterCast != null ? afterCast.GetActionLogName() : beforeCast.GetActionLogName(); + + return name; + } + + private String GetActionLogName(Object obj, String defaultName) + { + var objCast = obj as IActionLogComparable; + if (objCast != null) + { + return objCast.GetActionLogName(); + } + else + { + return defaultName; + } + } + + private PropertyInfo GetProperty(String name, Object before, Object after) + { + return after != null ? after.GetType().GetProperty(name) : before.GetType().GetProperty(name); + } + + private List GetProperties(BindingFlags flags, Object before, Object after) + { + return after != null ? after.GetType().GetProperties(flags).ToList() : before.GetType().GetProperties(flags).ToList(); + } + + private List GetProperties(Object before, Object after) + { + return after != null ? after.GetType().GetProperties().ToList() : before.GetType().GetProperties().ToList(); + } + + private bool GetShouldIgnore(PropertyInfo prop, Object before, Object after) + { + var beforeCast = before as IActionLogComparable; + var afterCast = after as IActionLogComparable; + + if (beforeCast != null) return beforeCast.ShouldActionLogIgnore(prop.Name); + if (afterCast != null) return afterCast.ShouldActionLogIgnore(prop.Name); + + return false; + } + + #endregion + } +} diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs index 9ffdcbc22..d95f4cd54 100644 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/DefaultActionLogManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using Tango.BL.Entities; using Tango.BL.Enumerations; @@ -19,6 +20,25 @@ namespace Tango.BL.ActionLogs /// public class DefaultActionLogManager : ExtendedObject, IActionLogManager { + /// + /// Gets or sets the action log comparer used to compare related objects. + /// + public IActionLogComparer ActionLogComparer { get; set; } + + /// + /// Gets or sets a value indicating whether to perform the logging operations asynchronously. + /// + public bool IsAsync { get; set; } + + /// + /// Initializes a new instance of the class. + /// + public DefaultActionLogManager() + { + IsAsync = true; + ActionLogComparer = new DefaultActionLogComparer(); + } + /// /// Inserts a new action log (main entry point). /// @@ -30,7 +50,7 @@ namespace Tango.BL.ActionLogs /// The message. public void InsertLog(ActionLogType type, string userGuid, string relatedObjectName, string relatedObjectGuid, ActionLogDifference difference, string message = null) { - Task.Factory.StartNew(() => + Task task = new Task(() => { using (ObservablesContext db = ObservablesContext.CreateDefault()) { @@ -62,6 +82,15 @@ namespace Tango.BL.ActionLogs } } }); + + if (IsAsync) + { + task.Start(); + } + else + { + task.RunSynchronously(); + } } /// @@ -75,28 +104,45 @@ namespace Tango.BL.ActionLogs /// The message. public void InsertLog(ActionLogType type, string userGuid, string relatedObjectName, IActionLogComparable relatedObjectBefore, IActionLogComparable relatedObjectAfter, string message = null) { - Task.Factory.StartNew(() => + Task task = new Task(() => { - ActionLogDifference diff = null; + ActionLogDifference diff = new ActionLogDifference(); - try + if (ActionLogComparer != null) { - diff = new BasicActionLogComparer().Compare(relatedObjectBefore, relatedObjectAfter).Result; - } - catch (Exception ex) - { - LogManager.Log(ex, $"Error while comparing for action log '{type}'."); - } + try + { + diff = ActionLogComparer.Compare(relatedObjectBefore, relatedObjectAfter).Result; + } + catch (Exception ex) + { + LogManager.Log(ex, $"Error while comparing for action log '{type}'."); + } - if (diff.Children.Count > 0) - { - InsertLog(type, userGuid, relatedObjectName, GetRelatedObjectGuid(relatedObjectBefore, relatedObjectAfter), diff, message); + if (diff.Children.Count > 0) + { + InsertLog(type, userGuid, relatedObjectName, GetRelatedObjectGuid(relatedObjectBefore, relatedObjectAfter), diff, message); + } + else + { + LogManager.Log($"Action log '{type}' was about to be inserted but skipped due to no differences."); + } } else { - LogManager.Log($"Action log '{type}' was about to be inserted but skipped due to no differences."); + Debug.WriteLine("No comparer defined for action log."); + InsertLog(type, userGuid, relatedObjectName, GetRelatedObjectGuid(relatedObjectBefore, relatedObjectAfter), diff, message); } }); + + if (IsAsync) + { + task.Start(); + } + else + { + task.RunSynchronously(); + } } /// diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparable.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparable.cs index b9416635f..255f5a407 100644 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparable.cs +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparable.cs @@ -17,13 +17,6 @@ namespace Tango.BL.ActionLogs /// String Guid { get; } - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// A tree of differences. - Task CompareTo(IActionLogComparable before); - /// /// Returns true if the specified property should be ignored during ActionLog comparison. /// @@ -37,17 +30,4 @@ namespace Tango.BL.ActionLogs /// String GetActionLogName(); } - - /// - /// Represents a type which is supported for ActionLog difference comparison. - /// - public interface IActionLogComparable : IActionLogComparable where T : class - { - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// A tree of differences. - Task CompareTo(T before); - } } diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparer.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparer.cs new file mode 100644 index 000000000..94db259b0 --- /dev/null +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogComparer.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.BL.ValueObjects; + +namespace Tango.BL.ActionLogs +{ + /// + /// Represents an comparer. + /// + public interface IActionLogComparer + { + /// + /// Compares the specified object before and after changes and returns the difference tree. + /// + /// The object before the change. + /// The object after the change. + /// + Task Compare(IActionLogComparable before, IActionLogComparable after); + } +} diff --git a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs index 150116c97..6fdca98a7 100644 --- a/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs +++ b/Software/Visual_Studio/Tango.BL/ActionLogs/IActionLogManager.cs @@ -14,6 +14,16 @@ namespace Tango.BL.ActionLogs /// public interface IActionLogManager { + /// + /// Gets or sets the action log comparer used to compare related objects. + /// + IActionLogComparer ActionLogComparer { get; set; } + + /// + /// Gets or sets a value indicating whether to perform the logging operations asynchronously. + /// + bool IsAsync { get; set; } + /// /// Inserts a new action log (main entry point). /// diff --git a/Software/Visual_Studio/Tango.BL/ObservableEntity.cs b/Software/Visual_Studio/Tango.BL/ObservableEntity.cs index 211450614..e3bba77bd 100644 --- a/Software/Visual_Studio/Tango.BL/ObservableEntity.cs +++ b/Software/Visual_Studio/Tango.BL/ObservableEntity.cs @@ -52,7 +52,7 @@ namespace Tango.BL /// /// [Serializable] - public abstract class ObservableEntity : ExtendedObject, IObservableEntity, IActionLogComparable where T : class, IObservableEntity + public abstract class ObservableEntity : ExtendedObject, IObservableEntity, IActionLogComparable where T : class, IObservableEntity { #region Events @@ -663,30 +663,6 @@ namespace Tango.BL #region Action Log - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// - /// A tree of differences. - /// - public Task CompareTo(T before) - { - return new BasicActionLogComparer().Compare(before as IActionLogComparable, this); - } - - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// - /// A tree of differences. - /// - Task IActionLogComparable.CompareTo(IActionLogComparable before) - { - return CompareTo(before as T); - } - /// /// Returns true if the specified property should be ignored during ActionLog comparison. /// diff --git a/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs b/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs index 15ba1b24e..720d6b9b7 100644 --- a/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs +++ b/Software/Visual_Studio/Tango.BL/ObservableEntityDTO.cs @@ -18,7 +18,7 @@ namespace Tango.BL /// /// /// - public abstract class ObservableEntityDTO : IObservableEntityDTO, IEquatable, IActionLogComparable where T : IObservableEntity where DTO : ObservableEntityDTO + public abstract class ObservableEntityDTO : IObservableEntityDTO, IEquatable, IActionLogComparable where T : IObservableEntity where DTO : ObservableEntityDTO { /// /// Gets or sets the ID of the entity. @@ -250,30 +250,6 @@ namespace Tango.BL return EqualsToObservable(observable); } - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// - /// A tree of differences. - /// - public Task CompareTo(DTO before) - { - return new BasicActionLogComparer().Compare(before, this); - } - - /// - /// Compares this instance to another ActionLog comparable instance. - /// - /// The before. - /// - /// A tree of differences. - /// - Task IActionLogComparable.CompareTo(IActionLogComparable before) - { - return CompareTo(before as DTO); - } - /// /// Returns true if the specified property should be ignored during ActionLog comparison. /// diff --git a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj index 2f9cf489e..f1bdf94ec 100644 --- a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj +++ b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj @@ -84,9 +84,10 @@ GlobalVersionInfo.cs - + + @@ -578,9 +579,7 @@ Tango.Settings - - - + @@ -591,7 +590,7 @@ - + \ No newline at end of file -- cgit v1.3.1 From 59a334d66d1538e351e714437fa6c10e8ad5a475 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 18 Dec 2019 22:59:54 +0200 Subject: Added ActionLogs MS module. --- .../ActionLogsModule.cs | 62 +++++++++ .../Images/action_logs.jpg | Bin 0 -> 25603 bytes .../Properties/AssemblyInfo.cs | 19 +++ .../Properties/Resources.Designer.cs | 71 ++++++++++ .../Properties/Resources.resx | 117 ++++++++++++++++ .../Properties/Settings.Designer.cs | 30 ++++ .../Properties/Settings.settings | 7 + .../Tango.MachineStudio.ActionLogs.csproj | 154 +++++++++++++++++++++ .../ViewModelLocator.cs | 29 ++++ .../ViewModels/MainViewVM.cs | 18 +++ .../Views/MainView.xaml | 15 ++ .../Views/MainView.xaml.cs | 28 ++++ .../Tango.MachineStudio.ActionLogs/app.config | 85 ++++++++++++ .../Tango.MachineStudio.ActionLogs/packages.config | 9 ++ .../Tango.MachineStudio.UI.csproj | 6 +- Software/Visual_Studio/Tango.sln | 55 +++++++- 16 files changed, 698 insertions(+), 7 deletions(-) create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.Designer.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.settings create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml.cs create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config create mode 100644 Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs new file mode 100644 index 000000000..3a9dcdfaa --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; +using Tango.BL.Enumerations; +using Tango.MachineStudio.Common; +using Tango.MachineStudio.ActionLogs.Views; +using Tango.SharedUI.Helpers; + +namespace Tango.MachineStudio.ActionLogs +{ + [StudioModule(21)] + public class ActionLogsModule : StudioModuleBase + { + public override string Name + { + get + { + return "Action Logs"; + } + } + + public override string Description + { + get + { + return "Monitor and track changes made to Twine's global datasets."; + } + } + + public override BitmapSource Image + { + get + { + return ResourceHelper.GetImageFromResources("Images/action_logs.jpg"); + } + } + + public override Type MainViewType + { + get + { + return typeof(MainView); + } + } + + public override Permissions Permission + { + get + { + return Permissions.RunMachineStudio; + } + } + + public override void Dispose() + { + + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg new file mode 100644 index 000000000..75f39c09c Binary files /dev/null and b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg differ diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..072265a74 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +[assembly: AssemblyTitle("Tango - Machine Studio Action Logs Module")] +[assembly: AssemblyVersion("1.0.0.1737")] + +[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.ActionLogs/Properties/Resources.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.Designer.cs new file mode 100644 index 000000000..796a67686 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace Tango.MachineStudio.ActionLogs.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + 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() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [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.ActionLogs.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx new file mode 100644 index 000000000..af7dbebba --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs new file mode 100644 index 000000000..507ac539d --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace Tango.MachineStudio.ActionLogs.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.ActionLogs/Properties/Settings.settings b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.settings new file mode 100644 index 000000000..033d7a5e9 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj new file mode 100644 index 000000000..1a5d06616 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj @@ -0,0 +1,154 @@ + + + + + Debug + AnyCPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315} + library + Tango.MachineStudio.ActionLogs + Tango.MachineStudio.ActionLogs + v4.6.1 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + + + true + full + false + ..\..\..\Build\Machine Studio\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\..\Build\Machine Studio\Release\ + TRACE + prompt + 4 + + + + ..\..\..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll + + + ..\..\..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll + + + ..\..\..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll + + + ..\..\..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll + + + ..\..\..\packages\MaterialDesignColors.1.1.2\lib\net45\MaterialDesignColors.dll + + + ..\..\..\packages\MaterialDesignThemes.2.3.1.953\lib\net45\MaterialDesignThemes.Wpf.dll + + + ..\..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + + + + + + ..\..\..\packages\MahApps.Metro.1.5.0\lib\net45\System.Windows.Interactivity.dll + + + + + + + + + 4.0 + + + + + + + + GlobalVersionInfo.cs + + + + + MainView.xaml + + + + Designer + MSBuild:Compile + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {f441feee-322a-4943-b566-110e12fd3b72} + Tango.BL + + + {a34ee0f0-649d-41c8-8489-b6f1cc6924ee} + Tango.Core + + + {4206ac58-3b57-4699-8835-90bf6db01a61} + Tango.Integration + + + {bc932dbd-7cdb-488c-99e4-f02cf441f55e} + Tango.Logging + + + {d8f1ad85-526a-4f50-b6dc-d437af63d8d8} + Tango.Settings + + + {8491D07B-C1F6-4B62-A412-41B9FD2D6538} + Tango.SharedUI + + + {74e700b0-1156-4126-be40-ee450d3c3026} + Tango.Transport + + + {cb0b0aa2-bb24-4bca-a720-45e397684e12} + Tango.MachineStudio.Common + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs new file mode 100644 index 000000000..29540fa86 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core.DI; +using Tango.MachineStudio.ActionLogs.ViewModels; + +namespace Tango.MachineStudio.ActionLogs +{ + public static class ViewModelLocator + { + /// + /// Initializes a new instance of the ViewModelLocator class. + /// + static ViewModelLocator() + { + TangoIOC.Default.Register(); + } + + public static MainViewVM MainViewVM + { + get + { + return TangoIOC.Default.GetInstance(); + } + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs new file mode 100644 index 000000000..48f243c1b --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs @@ -0,0 +1,18 @@ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.MachineStudio.Common; + +namespace Tango.MachineStudio.ActionLogs.ViewModels +{ + public class MainViewVM : StudioViewModel + { + public override void OnApplicationReady() + { + + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml new file mode 100644 index 000000000..e6c200fbe --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml @@ -0,0 +1,15 @@ + + + Action Logs + + diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml.cs new file mode 100644 index 000000000..e87e3e55a --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.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.ActionLogs.Views +{ + /// + /// Interaction logic for MainView.xaml + /// + public partial class MainView : UserControl + { + public MainView() + { + InitializeComponent(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config new file mode 100644 index 000000000..7b82e5f7c --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config @@ -0,0 +1,85 @@ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config new file mode 100644 index 000000000..e57143046 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file 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 635d372c2..d5084d051 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 @@ -468,6 +468,10 @@ {f69da3a8-f823-461e-87cf-a9275abc0b15} Tango.MachineStudio.Dispensers + + {447ecb9f-f730-47d6-8df8-d232bf4a0315} + Tango.MachineStudio.ActionLogs + {7d0fce3c-9a37-439c-9f9f-b26cfd6a8a33} Tango.MachineStudio.Catalogs @@ -670,7 +674,7 @@ if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)Roslyn\" - + \ No newline at end of file diff --git a/Software/Visual_Studio/Tango.sln b/Software/Visual_Studio/Tango.sln index bfdbb9c8a..05031dfd7 100644 --- a/Software/Visual_Studio/Tango.sln +++ b/Software/Visual_Studio/Tango.sln @@ -333,6 +333,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.PPC.Packages.CefInsta EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.MachineStudio.Sites", "MachineStudio\Modules\Tango.MachineStudio.Sites\Tango.MachineStudio.Sites.csproj", "{18A27902-9881-4556-8163-F6DF2236A14D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.MachineStudio.ActionLogs", "MachineStudio\Modules\Tango.MachineStudio.ActionLogs\Tango.MachineStudio.ActionLogs.csproj", "{447ECB9F-F730-47D6-8DF8-D232BF4A0315}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution AppVeyor|Any CPU = AppVeyor|Any CPU @@ -5945,6 +5947,46 @@ Global {18A27902-9881-4556-8163-F6DF2236A14D}.Release|x64.Build.0 = Release|Any CPU {18A27902-9881-4556-8163-F6DF2236A14D}.Release|x86.ActiveCfg = Release|Any CPU {18A27902-9881-4556-8163-F6DF2236A14D}.Release|x86.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|Any CPU.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|ARM.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|ARM.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|ARM64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|ARM64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|x64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|x64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|x86.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.AppVeyor|x86.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|Any CPU.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|ARM.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|ARM.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|ARM64.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|x64.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|x64.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|x86.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Debug|x86.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|ARM.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|ARM.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|ARM64.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|ARM64.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x64.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|Any CPU.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|Any CPU.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|ARM.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|ARM.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|ARM64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|ARM64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|x64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|x64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|x86.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -6056,14 +6098,15 @@ Global {F02EAA84-AD59-465B-99A2-4422C13BFB72} = {0048447D-1D94-4E60-9DAD-7349C777CB4E} {DF64460A-6617-4338-872A-DC43FD994C48} = {E728CBD9-1AF4-4814-A218-E4BD26E7EDEA} {18A27902-9881-4556-8163-F6DF2236A14D} = {B2AF4F3F-2828-47C3-8F3E-A0EA0BD66FF8} + {447ECB9F-F730-47D6-8DF8-D232BF4A0315} = {B2AF4F3F-2828-47C3-8F3E-A0EA0BD66FF8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6} - BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear - BuildVersion_UpdateAssemblyVersion = True - BuildVersion_UpdateFileVersion = False - BuildVersion_StartDate = 2000/1/1 - BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs BuildVersion_UseGlobalSettings = False + BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs + BuildVersion_StartDate = 2000/1/1 + BuildVersion_UpdateFileVersion = False + BuildVersion_UpdateAssemblyVersion = True + BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear + SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6} EndGlobalSection EndGlobal -- cgit v1.3.1