diff --git a/src/XstReader.Api/XstMessage.cs b/src/XstReader.Api/XstMessage.cs index daed01a..73e3346 100644 --- a/src/XstReader.Api/XstMessage.cs +++ b/src/XstReader.Api/XstMessage.cs @@ -92,6 +92,14 @@ public override string DisplayName [Description(@"Contains a list of carbon copy (Cc) recipient display names.")] public virtual string Cc => Properties[PropertyCanonicalName.PidTagDisplayCc]?.ValueAsStringSanitized; + /// + /// The Cc Summary of the Message + /// + [DisplayName("Display Bcc")] + [Category(@"Message Properties")] + [Description(@"Contains a list of clind carbon copy (Bcc) recipient display names.")] + public virtual string Bcc => Properties[PropertyCanonicalName.PidTagDisplayBcc]?.ValueAsStringSanitized; + /// /// The To Summary of the Message /// diff --git a/src/XstReader.Api/XstReader.Api.csproj b/src/XstReader.Api/XstReader.Api.csproj index f525b46..1e8a863 100644 --- a/src/XstReader.Api/XstReader.Api.csproj +++ b/src/XstReader.Api/XstReader.Api.csproj @@ -3,9 +3,9 @@ netstandard2.0 XstReader - 1.0.5 - 1.0.5 - 1.0.5 + 1.0.6 + 1.0.6 + 1.0.6 Properties True iluvadev diff --git a/src/XstReader/Controls/XstMessageListControl.Designer.cs b/src/XstReader/Controls/XstMessageListControl.Designer.cs index 3c766ca..2fdfc6f 100644 --- a/src/XstReader/Controls/XstMessageListControl.Designer.cs +++ b/src/XstReader/Controls/XstMessageListControl.Designer.cs @@ -28,8 +28,16 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); this.ObjectListView = new BrightIdeasSoftware.ObjectListView(); + this.HeaderPanel = new Krypton.Toolkit.KryptonPanel(); + this.SearchTextBox = new Krypton.Toolkit.KryptonTextBox(); + this.SearchTextButton = new Krypton.Toolkit.ButtonSpecAny(); + this.SearchTextCancelButton = new Krypton.Toolkit.ButtonSpecAny(); + this.TimerSearchText = new System.Windows.Forms.Timer(this.components); ((System.ComponentModel.ISupportInitialize)(this.ObjectListView)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HeaderPanel)).BeginInit(); + this.HeaderPanel.SuspendLayout(); this.SuspendLayout(); // // ObjectListView @@ -40,26 +48,65 @@ private void InitializeComponent() this.ObjectListView.FullRowSelect = true; this.ObjectListView.GridLines = true; this.ObjectListView.IncludeColumnHeadersInCopy = true; - this.ObjectListView.Location = new System.Drawing.Point(0, 0); + this.ObjectListView.Location = new System.Drawing.Point(0, 32); this.ObjectListView.MultiSelect = false; this.ObjectListView.Name = "ObjectListView"; this.ObjectListView.ShowGroups = false; this.ObjectListView.ShowItemToolTips = true; - this.ObjectListView.Size = new System.Drawing.Size(633, 404); + this.ObjectListView.Size = new System.Drawing.Size(633, 372); this.ObjectListView.TabIndex = 0; this.ObjectListView.UseFilterIndicator = true; this.ObjectListView.UseFiltering = true; this.ObjectListView.View = System.Windows.Forms.View.Details; // + // HeaderPanel + // + this.HeaderPanel.Controls.Add(this.SearchTextBox); + this.HeaderPanel.Dock = System.Windows.Forms.DockStyle.Top; + this.HeaderPanel.Location = new System.Drawing.Point(0, 0); + this.HeaderPanel.Name = "HeaderPanel"; + this.HeaderPanel.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.ControlGroupBox; + this.HeaderPanel.Size = new System.Drawing.Size(633, 32); + this.HeaderPanel.TabIndex = 1; + // + // SearchTextBox + // + this.SearchTextBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.SearchTextBox.ButtonSpecs.AddRange(new Krypton.Toolkit.ButtonSpecAny[] { + this.SearchTextButton, + this.SearchTextCancelButton}); + this.SearchTextBox.Location = new System.Drawing.Point(5, 5); + this.SearchTextBox.Name = "SearchTextBox"; + this.SearchTextBox.Size = new System.Drawing.Size(300, 23); + this.SearchTextBox.TabIndex = 0; + // + // SearchTextButton + // + this.SearchTextButton.Image = global::XstReader.App.Properties.Resources.magnify_18; + this.SearchTextButton.UniqueName = "1a634cb36357467a847069f7b81a5559"; + // + // SearchTextCancelButton + // + this.SearchTextCancelButton.Image = global::XstReader.App.Properties.Resources.close_circle_outline_16; + this.SearchTextCancelButton.UniqueName = "af041d7b1aac4bada07043a284a2bc48"; + // + // TimerSearchText + // + this.TimerSearchText.Interval = 500; + // // XstMessageListControl // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.ObjectListView); + this.Controls.Add(this.HeaderPanel); this.MinimumSize = new System.Drawing.Size(200, 100); this.Name = "XstMessageListControl"; this.Size = new System.Drawing.Size(633, 404); ((System.ComponentModel.ISupportInitialize)(this.ObjectListView)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HeaderPanel)).EndInit(); + this.HeaderPanel.ResumeLayout(false); + this.HeaderPanel.PerformLayout(); this.ResumeLayout(false); } @@ -67,5 +114,10 @@ private void InitializeComponent() #endregion private BrightIdeasSoftware.ObjectListView ObjectListView; + private Krypton.Toolkit.KryptonPanel HeaderPanel; + private Krypton.Toolkit.KryptonTextBox SearchTextBox; + private Krypton.Toolkit.ButtonSpecAny SearchTextButton; + private System.Windows.Forms.Timer TimerSearchText; + private Krypton.Toolkit.ButtonSpecAny SearchTextCancelButton; } } diff --git a/src/XstReader/Controls/XstMessageListControl.cs b/src/XstReader/Controls/XstMessageListControl.cs index 5e05e88..17c6b55 100644 --- a/src/XstReader/Controls/XstMessageListControl.cs +++ b/src/XstReader/Controls/XstMessageListControl.cs @@ -18,6 +18,8 @@ public partial class XstMessageListControl : UserControl, IXstDataSourcedControl>, IXstElementSelectable { + private string _LastSearchedText = string.Empty; + public XstMessageListControl() { InitializeComponent(); @@ -31,8 +33,11 @@ private void Initialize() ObjectListView.Columns.Add(new OLVColumn("Subject", nameof(XstMessage.Subject)) { WordWrap = true, FillsFreeSpace = true }); ObjectListView.Columns.Add(new OLVColumn("From", nameof(XstMessage.From)) { Width = 150 }); ObjectListView.Columns.Add(new OLVColumn("To", nameof(XstMessage.To)) { Width = 150 }); + ObjectListView.Columns.Add(new OLVColumn("Cc", nameof(XstMessage.Cc)) { Width = 150 }); + //ObjectListView.Columns.Add(new OLVColumn("Bcc", nameof(XstMessage.Bcc)) { Width = 150 }); ObjectListView.Columns.Add(new OLVColumn("Date", nameof(XstMessage.Date)) { Width = 150 }); + ObjectListView.FormatRow += (s, e) => { if (e.Item.RowObject is XstMessage message) @@ -48,6 +53,30 @@ private void Initialize() ObjectListView.ItemSelectionChanged += (s, e) => RaiseSelectedItemChanged(); SetDataSource(null); + + SearchTextButton.Click += (s, e) => + { + TimerSearchText.Stop(); + _LastSearchedText = SearchTextBox.Text; + ObjectListView.ModelFilter = TextMatchFilter.Contains(ObjectListView, _LastSearchedText); + }; + SearchTextCancelButton.Click += (s, e) => + { + SearchTextBox.Clear(); + SearchTextButton.PerformClick(); + }; + SearchTextBox.TextChanged += (s, e) => + { + TimerSearchText.Start(); + SearchTextCancelButton.Enabled = string.IsNullOrEmpty(SearchTextBox.Text) ? ButtonEnabled.False : ButtonEnabled.Container; + }; + + TimerSearchText.Tick += (s, e) => + { + TimerSearchText.Stop(); + if (SearchTextBox.Text != _LastSearchedText) + SearchTextButton.PerformClick(); + }; } protected override void OnLoad(EventArgs e) @@ -68,6 +97,7 @@ protected override void OnLoad(EventArgs e) public void SetDataSource(IEnumerable? dataSource) { + SearchTextBox.Clear(); _DataSource = dataSource; ObjectListView.Objects = dataSource; RaiseSelectedItemChanged(); diff --git a/src/XstReader/Controls/XstMessageListControl.resx b/src/XstReader/Controls/XstMessageListControl.resx index f298a7b..586cc23 100644 --- a/src/XstReader/Controls/XstMessageListControl.resx +++ b/src/XstReader/Controls/XstMessageListControl.resx @@ -57,4 +57,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file diff --git a/src/XstReader/Properties/Resources.Designer.cs b/src/XstReader/Properties/Resources.Designer.cs index 6f058fa..e6af95b 100644 --- a/src/XstReader/Properties/Resources.Designer.cs +++ b/src/XstReader/Properties/Resources.Designer.cs @@ -130,6 +130,16 @@ internal static System.Drawing.Bitmap application_export { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap close_circle_outline_16 { + get { + object obj = ResourceManager.GetObject("close_circle_outline_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -440,6 +450,26 @@ internal static System.Drawing.Bitmap link { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap magnify { + get { + object obj = ResourceManager.GetObject("magnify", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap magnify_18 { + get { + object obj = ResourceManager.GetObject("magnify_18", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/src/XstReader/Properties/Resources.resx b/src/XstReader/Properties/Resources.resx index 66eb4d6..fcbc063 100644 --- a/src/XstReader/Properties/Resources.resx +++ b/src/XstReader/Properties/Resources.resx @@ -139,6 +139,9 @@ ..\Resources\application-export.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\close-circle-outline_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\cog.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -232,6 +235,12 @@ ..\Resources\link.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\magnify.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\magnify_18.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\microsoft-outlook.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/src/XstReader/Resources/close-circle-outline_16.png b/src/XstReader/Resources/close-circle-outline_16.png new file mode 100644 index 0000000..ab23453 Binary files /dev/null and b/src/XstReader/Resources/close-circle-outline_16.png differ diff --git a/src/XstReader/Resources/magnify.png b/src/XstReader/Resources/magnify.png new file mode 100644 index 0000000..77e5cec Binary files /dev/null and b/src/XstReader/Resources/magnify.png differ diff --git a/src/XstReader/Resources/magnify_18.png b/src/XstReader/Resources/magnify_18.png new file mode 100644 index 0000000..5b8c470 Binary files /dev/null and b/src/XstReader/Resources/magnify_18.png differ diff --git a/src/XstReader/XstReader.App.csproj b/src/XstReader/XstReader.App.csproj index 3a4dd9e..38f5308 100644 --- a/src/XstReader/XstReader.App.csproj +++ b/src/XstReader/XstReader.App.csproj @@ -13,8 +13,8 @@ https://github.com/iluvadev/XstReader git pst-file-viewer;outlook - 2.0.0 - 2.0.0 + 2.1.0 + 2.1.0 MS-PL XstReader 2.2.0