diff --git a/Snoop/DebugListenerTab/DebugListenerControl.xaml b/Snoop/DebugListenerTab/DebugListenerControl.xaml
index 2f88afb28..ba38c2e44 100644
--- a/Snoop/DebugListenerTab/DebugListenerControl.xaml
+++ b/Snoop/DebugListenerTab/DebugListenerControl.xaml
@@ -3,9 +3,8 @@
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"
- mc:Ignorable="d"
- d:DesignHeight="300" d:DesignWidth="400">
-
+ mc:Ignorable="d" >
+
@@ -41,8 +40,10 @@
-
-
+
+
+
diff --git a/Snoop/DebugListenerTab/DebugListenerControl.xaml.cs b/Snoop/DebugListenerTab/DebugListenerControl.xaml.cs
index fb40d36cd..10dc950a5 100644
--- a/Snoop/DebugListenerTab/DebugListenerControl.xaml.cs
+++ b/Snoop/DebugListenerTab/DebugListenerControl.xaml.cs
@@ -22,19 +22,21 @@ namespace Snoop.DebugListenerTab
///
public partial class DebugListenerControl : UserControl, IListener
{
- private readonly FiltersViewModel filtersViewModel = new FiltersViewModel();
+ private readonly FiltersViewModel filtersViewModel;// = new FiltersViewModel();
private readonly SnoopDebugListener snoopDebugListener = new SnoopDebugListener();
public DebugListenerControl()
{
+ filtersViewModel = new FiltersViewModel(Properties.Settings.Default.SnoopDebugFilters);
+ this.DataContext = filtersViewModel;
+
InitializeComponent();
-
+
snoopDebugListener.RegisterListener(this);
}
private void checkBoxStartListening_Checked(object sender, RoutedEventArgs e)
{
Debug.Listeners.Add(snoopDebugListener);
- //PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Verbose;
PresentationTraceSources.DataBindingSource.Listeners.Add(snoopDebugListener);
}
@@ -46,8 +48,6 @@ private void checkBoxStartListening_Unchecked(object sender, RoutedEventArgs e)
public void Write(string str)
{
- //this.Dispatcher.InvokeActionSafe((
- //this.Dispatcher.InvokeActionSafe(() => DoWrite(str));
if (!filtersViewModel.IsSet || filtersViewModel.FilterMatches(str))
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Render, () => DoWrite(str));
@@ -64,13 +64,17 @@ private void DoWrite(string str)
private void buttonClear_Click(object sender, RoutedEventArgs e)
{
this.textBoxDebugContent.Clear();
+
}
private void buttonClearFilters_Click(object sender, RoutedEventArgs e)
{
var result = MessageBox.Show("Are you sure you want to clear your filters?", "Clear Filters Confirmation", MessageBoxButton.YesNo);
if (result == MessageBoxResult.Yes)
+ {
filtersViewModel.ClearFilters();
+ Properties.Settings.Default.SnoopDebugFilters = null;
+ }
}
private void buttonSetFilters_Click(object sender, RoutedEventArgs e)
diff --git a/Snoop/DebugListenerTab/SetFiltersWindow.xaml b/Snoop/DebugListenerTab/SetFiltersWindow.xaml
index 4e26d5878..aa0879e48 100644
--- a/Snoop/DebugListenerTab/SetFiltersWindow.xaml
+++ b/Snoop/DebugListenerTab/SetFiltersWindow.xaml
@@ -37,21 +37,12 @@
-
-
+
@@ -73,42 +64,23 @@
Data="M19.831014,18.751491 L4.5959764,3.5164535" />
+
+
+
+
-
+
-
+
+
+
+
+
diff --git a/Snoop/DebugListenerTab/SetFiltersWindow.xaml.cs b/Snoop/DebugListenerTab/SetFiltersWindow.xaml.cs
index 531ec30d6..e6d0ba5de 100644
--- a/Snoop/DebugListenerTab/SetFiltersWindow.xaml.cs
+++ b/Snoop/DebugListenerTab/SetFiltersWindow.xaml.cs
@@ -13,6 +13,8 @@
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
namespace Snoop.DebugListenerTab
{
@@ -30,12 +32,27 @@ internal FiltersViewModel ViewModel
}
+
+ private List initialFilters;
public SetFiltersWindow(FiltersViewModel viewModel)
{
this.DataContext = viewModel;
InitializeComponent();
+ initialFilters = MakeDeepCopyOfFilters(this.ViewModel.Filters);
+ this.Closing += SetFiltersWindow_Closing;
+ }
+
+ void SetFiltersWindow_Closing(object sender, CancelEventArgs e)
+ {
+ if (_setFilterClicked)
+ return;
+
+ var saveChanges = MessageBox.Show("Save changes?", "Changes", MessageBoxButton.YesNo) == MessageBoxResult.Yes;
+ if (saveChanges)
+ return;
+ this.ViewModel.InitializeFilters(initialFilters);
}
@@ -57,17 +74,31 @@ private void buttonRemoveFilter_Click(object sender, RoutedEventArgs e)
if (filter == null)
return;
- //ViewModel.Filters.Remove(filter);
ViewModel.RemoveFilter(filter);
-
}
-
+ private bool _setFilterClicked = false;
private void buttonSetFilter_Click(object sender, RoutedEventArgs e)
{
- this.ViewModel.IsSet = true;
+ SaveFiltersToSettings();
+
+ //this.ViewModel.IsSet = true;
+ this.ViewModel.SetIsSet();
+ _setFilterClicked = true;
this.Close();
}
+ private void SaveFiltersToSettings()
+ {
+ List singleFilters = new List();
+ foreach (var filter in this.ViewModel.Filters)
+ {
+ if (filter is SnoopSingleFilter)
+ singleFilters.Add((SnoopSingleFilter)filter);
+ }
+
+ Properties.Settings.Default.SnoopDebugFilters = singleFilters.ToArray();
+ }
+
private void textBlockFilter_Loaded(object sender, RoutedEventArgs e)
{
var textBox = sender as TextBox;
@@ -97,18 +128,100 @@ private void menuItemGroupFilters_Click(object sender, RoutedEventArgs e)
private void menuItemClearFilterGroups_Click(object sender, RoutedEventArgs e)
{
this.ViewModel.ClearFilterGroups();
- }
+ }
+
+ private List MakeDeepCopyOfFilters(IEnumerable filters)
+ {
+ List snoopSingleFilters = new List();
+
+ foreach (var filter in filters)
+ {
+ var singleFilter = filter as SnoopSingleFilter;
+ if (singleFilter == null)
+ continue;
+
+ var newFilter = (SnoopSingleFilter)singleFilter.Clone();
+
+ snoopSingleFilters.Add(newFilter);
+ }
+
+ return snoopSingleFilters;
+ }
+
+ //private SnoopSingleFilter MakeDeepCopyOfFilter(SnoopSingleFilter filter)
+ //{
+ // try
+ // {
+ // BinaryFormatter formatter = new BinaryFormatter();
+ // var ms = new System.IO.MemoryStream();
+ // formatter.Serialize(ms, filter);
+ // SnoopSingleFilter deepCopy = (SnoopSingleFilter)formatter.Deserialize(ms);
+ // ms.Close();
+ // return deepCopy;
+ // }
+ // catch (Exception)
+ // {
+ // return null;
+ // }
+ //}
}
+
+ [Serializable]
public class FiltersViewModel : INotifyPropertyChanged
{
private List multipleFilters = new List();
public FiltersViewModel()
{
- //this.Filters = new ObservableCollection();
- //Filters.Add(new SnoopSingleFilter());
filters.Add(new SnoopSingleFilter());
+ FilterStatus = _isSet ? "Filter is ON" : "Filter is OFF";
+ }
+
+ public FiltersViewModel(IList singleFilters)
+ {
+ InitializeFilters(singleFilters);
+ }
+
+ public void InitializeFilters(IList singleFilters)
+ {
+ this.filters.Clear();
+
+ if (singleFilters == null)
+ {
+ filters.Add(new SnoopSingleFilter());
+ this.IsSet = false;
+ return;
+ }
+
+ foreach (var filter in singleFilters)
+ this.filters.Add(filter);
+
+ //var groupings = singleFilters.Select(x => x.IsGrouped).GroupBy(x => x.GroupId);
+ var groupings = (from x in singleFilters where x.IsGrouped select x).GroupBy(x => x.GroupId);
+ foreach (var grouping in groupings)
+ {
+ var multipleFilter = new SnoopMultipleFilter();
+ var groupedFilters = grouping.ToArray();
+ if (groupedFilters.Length == 0)
+ continue;
+
+ multipleFilter.AddRange(groupedFilters, groupedFilters[0].GroupId);
+ this.multipleFilters.Add(multipleFilter);
+ }
+
+ SetIsSet();
+ }
+
+ internal void SetIsSet()
+ {
+ if (filters == null)
+ this.IsSet = false;
+
+ if (filters.Count == 1 && filters[0] is SnoopSingleFilter && string.IsNullOrEmpty(((SnoopSingleFilter)filters[0]).Text))
+ this.IsSet = false;
+ else
+ this.IsSet = true;
}
public void ClearFilters()
@@ -117,6 +230,7 @@ public void ClearFilters()
//Filters.Add(new SnoopSingleFilter());
filters.Clear();
filters.Add(new SnoopSingleFilter());
+ this.IsSet = false;
}
public bool FilterMatches(string str)
@@ -139,11 +253,34 @@ public bool FilterMatches(string str)
return false;
}
+ private string GetFirstNonUsedGroupId()
+ {
+ int index = 1;
+ while (true)
+ {
+ if (!GroupIdTaken(index.ToString()))
+ return index.ToString();
+
+ index++;
+ }
+
+ }
+
+ private bool GroupIdTaken(string groupID)
+ {
+ foreach (var filter in multipleFilters)
+ {
+ if (groupID.Equals(filter.GroupId))
+ return true;
+ }
+ return false;
+ }
+
public void GroupFilters(IEnumerable filtersToGroup)
{
SnoopMultipleFilter multipleFilter = new SnoopMultipleFilter();
- multipleFilter.AddRange(filtersToGroup);
-
+ multipleFilter.AddRange(filtersToGroup, (multipleFilters.Count + 1).ToString());
+
multipleFilters.Add(multipleFilter);
}
@@ -176,7 +313,34 @@ public void ClearFilterGroups()
this.multipleFilters.Clear();
}
- public bool IsSet { get; set; }
+ private bool _isSet;
+ private string _filterStatus;
+ public bool IsSet
+ {
+ get
+ {
+ return _isSet;
+ }
+ set
+ {
+ _isSet = value;
+ RaisePropertyChanged("IsSet");
+ FilterStatus = _isSet ? "Filter is ON" : "Filter is OFF";
+ }
+ }
+
+ public string FilterStatus
+ {
+ get
+ {
+ return _filterStatus;
+ }
+ set
+ {
+ _filterStatus = value;
+ RaisePropertyChanged("FilterStatus");
+ }
+ }
private ObservableCollection filters = new ObservableCollection();
public IEnumerable Filters
@@ -206,6 +370,7 @@ public enum FilterType
RegularExpression
}
+ [Serializable]
public class SnoopMultipleFilter : SnoopFilter
{
private List _singleFilters = new List();
@@ -228,6 +393,21 @@ public override bool SupportsGrouping
}
}
+ public override string GroupId
+ {
+ get
+ {
+ if (_singleFilters.Count == 0)
+ return string.Empty;
+
+ return _singleFilters[0].GroupId;
+ }
+ set
+ {
+ throw new NotSupportedException();
+ }
+ }
+
public bool IsValidMultipleFilter
{
get
@@ -249,7 +429,7 @@ public void RemoveFilter(SnoopFilter singleFilter)
_singleFilters.Remove(singleFilter);
}
- public void AddRange(IEnumerable filters)
+ public void AddRange(IEnumerable filters, string groupID)
{
foreach (var filter in filters)
{
@@ -257,6 +437,7 @@ public void AddRange(IEnumerable filters)
throw new NotSupportedException("The filter is not grouped");
filter.IsGrouped = true;
+ filter.GroupId = groupID;
}
_singleFilters.AddRange(filters);
}
@@ -274,9 +455,11 @@ public bool ContainsFilter(SnoopSingleFilter filter)
}
}
+ [Serializable]
public abstract class SnoopFilter : INotifyPropertyChanged
{
- private bool _isGrouped;
+ protected bool _isGrouped = false;
+ protected string _groupId = string.Empty;
public abstract bool FilterMatches(string debugLine);
@@ -298,6 +481,20 @@ public bool IsGrouped
{
_isGrouped = value;
this.RaisePropertyChanged("IsGrouped");
+ GroupId = string.Empty;
+ }
+ }
+
+ public virtual string GroupId
+ {
+ get
+ {
+ return _groupId;
+ }
+ set
+ {
+ _groupId = value;
+ this.RaisePropertyChanged("GroupId");
}
}
@@ -311,15 +508,18 @@ protected void RaisePropertyChanged(string propertyName)
}
}
- public class SnoopSingleFilter : SnoopFilter
+ [Serializable]
+ public class SnoopSingleFilter : SnoopFilter, ICloneable
{
+ private string _text;
+
public SnoopSingleFilter()
{
this.Text = string.Empty;
}
public FilterType FilterType { get; set; }
- private string _text;
+
public string Text
{
@@ -351,6 +551,17 @@ public override bool FilterMatches(string debugLine)
}
return false;
}
+
+ public object Clone()
+ {
+ SnoopSingleFilter newFilter = new SnoopSingleFilter();
+ newFilter._groupId = this._groupId;
+ newFilter._isGrouped = this._isGrouped;
+ newFilter._text = this._text;
+ newFilter.FilterType = this.FilterType;
+
+ return newFilter;
+ }
}
}
diff --git a/Snoop/Properties/Settings.Designer.cs b/Snoop/Properties/Settings.Designer.cs
index d2b9c7df7..677505338 100644
--- a/Snoop/Properties/Settings.Designer.cs
+++ b/Snoop/Properties/Settings.Designer.cs
@@ -1,13 +1,14 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.235
+// Runtime Version:4.0.30319.18033
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------
+using Snoop.DebugListenerTab;
namespace Snoop.Properties {
@@ -25,29 +26,32 @@ internal sealed partial class Settings : global::System.Configuration.Applicatio
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute(@"
-
- 44
- 0
- 1
-
- -1
- -1
-
-
- -1
- -1
-
-
- 10
- 10
- 650
- 490
-
-")]
- public Snoop.WINDOWPLACEMENT SnoopUIWindowPlacement {
+ [global::System.Configuration.DefaultSettingValueAttribute(@"
+
+
+ 44
+ 0
+ 1
+
+ -1
+ -1
+
+
+ -1
+ -1
+
+
+ 10
+ 10
+ 650
+ 490
+
+
+ ")]
+ public WINDOWPLACEMENT SnoopUIWindowPlacement
+ {
get {
- return ((Snoop.WINDOWPLACEMENT)(this["SnoopUIWindowPlacement"]));
+ return ((WINDOWPLACEMENT)(this["SnoopUIWindowPlacement"]));
}
set {
this["SnoopUIWindowPlacement"] = value;
@@ -56,30 +60,32 @@ internal sealed partial class Settings : global::System.Configuration.Applicatio
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute(@"
-
- 44
- 0
- 1
-
- -1
- -1
-
-
- -1
- -1
-
-
- 10
- 10
- 541
- 36
-
-
-")]
- public Snoop.WINDOWPLACEMENT AppChooserWindowPlacement {
+ [global::System.Configuration.DefaultSettingValueAttribute(@"
+
+
+ 44
+ 0
+ 1
+
+ -1
+ -1
+
+
+ -1
+ -1
+
+
+ 10
+ 10
+ 541
+ 36
+
+
+ ")]
+ public WINDOWPLACEMENT AppChooserWindowPlacement
+ {
get {
- return ((Snoop.WINDOWPLACEMENT)(this["AppChooserWindowPlacement"]));
+ return ((WINDOWPLACEMENT)(this["AppChooserWindowPlacement"]));
}
set {
this["AppChooserWindowPlacement"] = value;
@@ -88,30 +94,32 @@ internal sealed partial class Settings : global::System.Configuration.Applicatio
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute(@"
-
- 44
- 0
- 1
-
- -1
- -1
-
-
- -1
- -1
-
-
- 10
- 10
- 541
- 36
-
-
-")]
- public Snoop.WINDOWPLACEMENT ZoomerWindowPlacement {
+ [global::System.Configuration.DefaultSettingValueAttribute(@"
+
+
+ 44
+ 0
+ 1
+
+ -1
+ -1
+
+
+ -1
+ -1
+
+
+ 10
+ 10
+ 541
+ 36
+
+
+ ")]
+ public WINDOWPLACEMENT ZoomerWindowPlacement
+ {
get {
- return ((Snoop.WINDOWPLACEMENT)(this["ZoomerWindowPlacement"]));
+ return ((WINDOWPLACEMENT)(this["ZoomerWindowPlacement"]));
}
set {
this["ZoomerWindowPlacement"] = value;
@@ -120,30 +128,31 @@ internal sealed partial class Settings : global::System.Configuration.Applicatio
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("\r\n\r\n \r\n Layout\r\n false\r\n false\r\n \r\n width\r\n height\r\n actualwidth\r\n act" +
- "ualheight\r\n margin\r\n padding" +
- "\r\n canvas.left\r\n canvas.top<" +
- "/string>\r\n \r\n \r\n \r\n Grid/Dock\r\n false" +
- "IsDefault>\r\n false\r\n \r\n" +
- " grid.\r\n dockpanel.dock\r\n " +
- " \r\n \r\n \r\n " +
- " Color\r\n false\r\n " +
- " false\r\n \r\n color\r\n background\r\n foregr" +
- "ound\r\n borderbrush\r\n fill\r\n stroke\r\n \r\n \r\n \r\n ItemsControl\r\n false\r\n false\r\n \r\n items\r\n " +
- "selected\r\n \r\n \r\n " +
- " ")]
- public PropertyFilterSet[] PropertyFilterSets {
+ [global::System.Configuration.DefaultSettingValueAttribute("\r\n \r\n \r\n \r\n Layout\r\n false\r\n false\r\n \r\n width\r\n height\r\n actualwidth\r\n " +
+ " actualheight\r\n margin\r\n padding\r\n canvas.left\r\n canva" +
+ "s.top\r\n \r\n \r\n \r\n Grid/Dock\r\n false\r\n false\r\n \r\n grid.\r\n dockpanel.dock\r\n \r\n \r\n \r\n Color\r\n false\r\n false\r\n \r\n " +
+ " color\r\n background\r\n fo" +
+ "reground\r\n borderbrush\r\n fill\r\n stroke\r\n \r\n \r\n \r\n ItemsControl\r\n false\r\n false" +
+ "IsEditCommand>\r\n \r\n items\r\n selected\r\n \r\n \r\n " +
+ " \r\n ")]
+ public PropertyFilterSet[] PropertyFilterSets
+ {
get {
return ((PropertyFilterSet[])(this["PropertyFilterSets"]));
}
@@ -175,5 +184,18 @@ internal sealed partial class Settings : global::System.Configuration.Applicatio
this["ShowPreviewer"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("")]
+ public SnoopSingleFilter [] SnoopDebugFilters
+ {
+ get {
+ return ((SnoopSingleFilter [])(this["SnoopDebugFilters"]));
+ }
+ set {
+ this["SnoopDebugFilters"] = value;
+ }
+ }
}
}
diff --git a/Snoop/Properties/Settings.settings b/Snoop/Properties/Settings.settings
index 591766362..19e5411b6 100644
--- a/Snoop/Properties/Settings.settings
+++ b/Snoop/Properties/Settings.settings
@@ -3,124 +3,130 @@
- <?xml version="1.0" encoding="utf-16"?>
-<WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <length>44</length>
- <flags>0</flags>
- <showCmd>1</showCmd>
- <minPosition>
- <X>-1</X>
- <Y>-1</Y>
- </minPosition>
- <maxPosition>
- <X>-1</X>
- <Y>-1</Y>
- </maxPosition>
- <normalPosition>
- <Left>10</Left>
- <Top>10</Top>
- <Right>650</Right>
- <Bottom>490</Bottom>
- </normalPosition>
-</WINDOWPLACEMENT>
+
+ <?xml version="1.0" encoding="utf-16"?>
+ <WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <length>44</length>
+ <flags>0</flags>
+ <showCmd>1</showCmd>
+ <minPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </minPosition>
+ <maxPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </maxPosition>
+ <normalPosition>
+ <Left>10</Left>
+ <Top>10</Top>
+ <Right>650</Right>
+ <Bottom>490</Bottom>
+ </normalPosition>
+ </WINDOWPLACEMENT>
+
- <?xml version="1.0" encoding="utf-16"?>
-<WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <length>44</length>
- <flags>0</flags>
- <showCmd>1</showCmd>
- <minPosition>
- <X>-1</X>
- <Y>-1</Y>
- </minPosition>
- <maxPosition>
- <X>-1</X>
- <Y>-1</Y>
- </maxPosition>
- <normalPosition>
- <Left>10</Left>
- <Top>10</Top>
- <Right>541</Right>
- <Bottom>36</Bottom>
- </normalPosition>
-</WINDOWPLACEMENT>
-
+
+ <?xml version="1.0" encoding="utf-16"?>
+ <WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <length>44</length>
+ <flags>0</flags>
+ <showCmd>1</showCmd>
+ <minPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </minPosition>
+ <maxPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </maxPosition>
+ <normalPosition>
+ <Left>10</Left>
+ <Top>10</Top>
+ <Right>541</Right>
+ <Bottom>36</Bottom>
+ </normalPosition>
+ </WINDOWPLACEMENT>
+
- <?xml version="1.0" encoding="utf-16"?>
-<WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <length>44</length>
- <flags>0</flags>
- <showCmd>1</showCmd>
- <minPosition>
- <X>-1</X>
- <Y>-1</Y>
- </minPosition>
- <maxPosition>
- <X>-1</X>
- <Y>-1</Y>
- </maxPosition>
- <normalPosition>
- <Left>10</Left>
- <Top>10</Top>
- <Right>541</Right>
- <Bottom>36</Bottom>
- </normalPosition>
-</WINDOWPLACEMENT>
-
+
+ <?xml version="1.0" encoding="utf-16"?>
+ <WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <length>44</length>
+ <flags>0</flags>
+ <showCmd>1</showCmd>
+ <minPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </minPosition>
+ <maxPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </maxPosition>
+ <normalPosition>
+ <Left>10</Left>
+ <Top>10</Top>
+ <Right>541</Right>
+ <Bottom>36</Bottom>
+ </normalPosition>
+ </WINDOWPLACEMENT>
+
- <?xml version="1.0" encoding="utf-16"?>
-<ArrayOfPropertyFilterSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <PropertyFilterSet>
+
+ <?xml version="1.0" encoding="utf-16"?>
+ <ArrayOfPropertyFilterSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <PropertyFilterSet>
<DisplayName>Layout</DisplayName>
<IsDefault>false</IsDefault>
<IsEditCommand>false</IsEditCommand>
<Properties>
- <string>width</string>
- <string>height</string>
- <string>actualwidth</string>
- <string>actualheight</string>
- <string>margin</string>
- <string>padding</string>
- <string>canvas.left</string>
- <string>canvas.top</string>
+ <string>width</string>
+ <string>height</string>
+ <string>actualwidth</string>
+ <string>actualheight</string>
+ <string>margin</string>
+ <string>padding</string>
+ <string>canvas.left</string>
+ <string>canvas.top</string>
</Properties>
- </PropertyFilterSet>
- <PropertyFilterSet>
+ </PropertyFilterSet>
+ <PropertyFilterSet>
<DisplayName>Grid/Dock</DisplayName>
<IsDefault>false</IsDefault>
<IsEditCommand>false</IsEditCommand>
<Properties>
- <string>grid.</string>
- <string>dockpanel.dock</string>
+ <string>grid.</string>
+ <string>dockpanel.dock</string>
</Properties>
- </PropertyFilterSet>
- <PropertyFilterSet>
+ </PropertyFilterSet>
+ <PropertyFilterSet>
<DisplayName>Color</DisplayName>
<IsDefault>false</IsDefault>
<IsEditCommand>false</IsEditCommand>
<Properties>
- <string>color</string>
- <string>background</string>
- <string>foreground</string>
- <string>borderbrush</string>
- <string>fill</string>
- <string>stroke</string>
+ <string>color</string>
+ <string>background</string>
+ <string>foreground</string>
+ <string>borderbrush</string>
+ <string>fill</string>
+ <string>stroke</string>
</Properties>
- </PropertyFilterSet>
- <PropertyFilterSet>
+ </PropertyFilterSet>
+ <PropertyFilterSet>
<DisplayName>ItemsControl</DisplayName>
<IsDefault>false</IsDefault>
<IsEditCommand>false</IsEditCommand>
<Properties>
- <string>items</string>
- <string>selected</string>
+ <string>items</string>
+ <string>selected</string>
</Properties>
- </PropertyFilterSet>
- </ArrayOfPropertyFilterSet>
+ </PropertyFilterSet>
+ </ArrayOfPropertyFilterSet>
+
True
@@ -128,5 +134,8 @@
False
+
+
+
\ No newline at end of file
diff --git a/Snoop/app.config b/Snoop/app.config
index bfb86e452..a40fee168 100644
--- a/Snoop/app.config
+++ b/Snoop/app.config
@@ -7,125 +7,132 @@
+
- <?xml version="1.0" encoding="utf-16"?>
-<WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <length>44</length>
- <flags>0</flags>
- <showCmd>1</showCmd>
- <minPosition>
- <X>-1</X>
- <Y>-1</Y>
- </minPosition>
- <maxPosition>
- <X>-1</X>
- <Y>-1</Y>
- </maxPosition>
- <normalPosition>
- <Left>10</Left>
- <Top>10</Top>
- <Right>650</Right>
- <Bottom>490</Bottom>
- </normalPosition>
-</WINDOWPLACEMENT>
+
+ <?xml version="1.0" encoding="utf-16"?>
+ <WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <length>44</length>
+ <flags>0</flags>
+ <showCmd>1</showCmd>
+ <minPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </minPosition>
+ <maxPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </maxPosition>
+ <normalPosition>
+ <Left>10</Left>
+ <Top>10</Top>
+ <Right>650</Right>
+ <Bottom>490</Bottom>
+ </normalPosition>
+ </WINDOWPLACEMENT>
+
- <?xml version="1.0" encoding="utf-16"?>
-<WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <length>44</length>
- <flags>0</flags>
- <showCmd>1</showCmd>
- <minPosition>
- <X>-1</X>
- <Y>-1</Y>
- </minPosition>
- <maxPosition>
- <X>-1</X>
- <Y>-1</Y>
- </maxPosition>
- <normalPosition>
- <Left>10</Left>
- <Top>10</Top>
- <Right>541</Right>
- <Bottom>36</Bottom>
- </normalPosition>
-</WINDOWPLACEMENT>
-
+
+ <?xml version="1.0" encoding="utf-16"?>
+ <WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <length>44</length>
+ <flags>0</flags>
+ <showCmd>1</showCmd>
+ <minPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </minPosition>
+ <maxPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </maxPosition>
+ <normalPosition>
+ <Left>10</Left>
+ <Top>10</Top>
+ <Right>541</Right>
+ <Bottom>36</Bottom>
+ </normalPosition>
+ </WINDOWPLACEMENT>
+
- <?xml version="1.0" encoding="utf-16"?>
-<WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <length>44</length>
- <flags>0</flags>
- <showCmd>1</showCmd>
- <minPosition>
- <X>-1</X>
- <Y>-1</Y>
- </minPosition>
- <maxPosition>
- <X>-1</X>
- <Y>-1</Y>
- </maxPosition>
- <normalPosition>
- <Left>10</Left>
- <Top>10</Top>
- <Right>541</Right>
- <Bottom>36</Bottom>
- </normalPosition>
-</WINDOWPLACEMENT>
-
+
+ <?xml version="1.0" encoding="utf-16"?>
+ <WINDOWPLACEMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <length>44</length>
+ <flags>0</flags>
+ <showCmd>1</showCmd>
+ <minPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </minPosition>
+ <maxPosition>
+ <X>-1</X>
+ <Y>-1</Y>
+ </maxPosition>
+ <normalPosition>
+ <Left>10</Left>
+ <Top>10</Top>
+ <Right>541</Right>
+ <Bottom>36</Bottom>
+ </normalPosition>
+ </WINDOWPLACEMENT>
+
- <?xml version="1.0" encoding="utf-16"?>
-<ArrayOfPropertyFilterSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <PropertyFilterSet>
+
+ <?xml version="1.0" encoding="utf-16"?>
+ <ArrayOfPropertyFilterSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <PropertyFilterSet>
<DisplayName>Layout</DisplayName>
<IsDefault>false</IsDefault>
<IsEditCommand>false</IsEditCommand>
<Properties>
- <string>width</string>
- <string>height</string>
- <string>actualwidth</string>
- <string>actualheight</string>
- <string>margin</string>
- <string>padding</string>
- <string>canvas.left</string>
- <string>canvas.top</string>
+ <string>width</string>
+ <string>height</string>
+ <string>actualwidth</string>
+ <string>actualheight</string>
+ <string>margin</string>
+ <string>padding</string>
+ <string>canvas.left</string>
+ <string>canvas.top</string>
</Properties>
- </PropertyFilterSet>
- <PropertyFilterSet>
+ </PropertyFilterSet>
+ <PropertyFilterSet>
<DisplayName>Grid/Dock</DisplayName>
<IsDefault>false</IsDefault>
<IsEditCommand>false</IsEditCommand>
<Properties>
- <string>grid.</string>
- <string>dockpanel.dock</string>
+ <string>grid.</string>
+ <string>dockpanel.dock</string>
</Properties>
- </PropertyFilterSet>
- <PropertyFilterSet>
+ </PropertyFilterSet>
+ <PropertyFilterSet>
<DisplayName>Color</DisplayName>
<IsDefault>false</IsDefault>
<IsEditCommand>false</IsEditCommand>
<Properties>
- <string>color</string>
- <string>background</string>
- <string>foreground</string>
- <string>borderbrush</string>
- <string>fill</string>
- <string>stroke</string>
+ <string>color</string>
+ <string>background</string>
+ <string>foreground</string>
+ <string>borderbrush</string>
+ <string>fill</string>
+ <string>stroke</string>
</Properties>
- </PropertyFilterSet>
- <PropertyFilterSet>
+ </PropertyFilterSet>
+ <PropertyFilterSet>
<DisplayName>ItemsControl</DisplayName>
<IsDefault>false</IsDefault>
<IsEditCommand>false</IsEditCommand>
<Properties>
- <string>items</string>
- <string>selected</string>
+ <string>items</string>
+ <string>selected</string>
</Properties>
- </PropertyFilterSet>
- </ArrayOfPropertyFilterSet>
+ </PropertyFilterSet>
+ </ArrayOfPropertyFilterSet>
+
True