From 507cabadcbddafb012d476fce12035d2a075e7a4 Mon Sep 17 00:00:00 2001 From: Jeremy Powell Date: Tue, 1 Oct 2024 15:05:02 +1300 Subject: [PATCH 1/4] Update WinForms designer files Non-functional changes, just updates from opening with VS 17.11, probably mostly due to Segoe, etc. --- .../MainForm.Designer.cs | 105 ++++++++---------- 1 file changed, 45 insertions(+), 60 deletions(-) diff --git a/sources/Structured Storage Explorer/MainForm.Designer.cs b/sources/Structured Storage Explorer/MainForm.Designer.cs index 07e1bd73..af129b9a 100644 --- a/sources/Structured Storage Explorer/MainForm.Designer.cs +++ b/sources/Structured Storage Explorer/MainForm.Designer.cs @@ -96,9 +96,8 @@ private void InitializeComponent() this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill; this.treeView1.HideSelection = false; this.treeView1.Location = new System.Drawing.Point(0, 0); - this.treeView1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.treeView1.Name = "treeView1"; - this.treeView1.Size = new System.Drawing.Size(423, 319); + this.treeView1.Size = new System.Drawing.Size(281, 201); this.treeView1.TabIndex = 4; this.treeView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.treeView1_MouseUp); // @@ -112,41 +111,41 @@ private void InitializeComponent() this.addStreamToolStripMenuItem, this.removeToolStripMenuItem}); this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(196, 164); + this.contextMenuStrip1.Size = new System.Drawing.Size(148, 114); this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening); // // importDataStripMenuItem1 // this.importDataStripMenuItem1.Name = "importDataStripMenuItem1"; - this.importDataStripMenuItem1.Size = new System.Drawing.Size(195, 32); + this.importDataStripMenuItem1.Size = new System.Drawing.Size(147, 22); this.importDataStripMenuItem1.Text = "Import data..."; this.importDataStripMenuItem1.Click += new System.EventHandler(this.importDataStripMenuItem1_Click); // // exportDataToolStripMenuItem // this.exportDataToolStripMenuItem.Name = "exportDataToolStripMenuItem"; - this.exportDataToolStripMenuItem.Size = new System.Drawing.Size(195, 32); + this.exportDataToolStripMenuItem.Size = new System.Drawing.Size(147, 22); this.exportDataToolStripMenuItem.Text = "Export data..."; this.exportDataToolStripMenuItem.Click += new System.EventHandler(this.exportDataToolStripMenuItem_Click); // // addStorageStripMenuItem1 // this.addStorageStripMenuItem1.Name = "addStorageStripMenuItem1"; - this.addStorageStripMenuItem1.Size = new System.Drawing.Size(195, 32); + this.addStorageStripMenuItem1.Size = new System.Drawing.Size(147, 22); this.addStorageStripMenuItem1.Text = "Add storage..."; this.addStorageStripMenuItem1.Click += new System.EventHandler(this.addStorageStripMenuItem1_Click); // // addStreamToolStripMenuItem // this.addStreamToolStripMenuItem.Name = "addStreamToolStripMenuItem"; - this.addStreamToolStripMenuItem.Size = new System.Drawing.Size(195, 32); + this.addStreamToolStripMenuItem.Size = new System.Drawing.Size(147, 22); this.addStreamToolStripMenuItem.Text = "Add stream..."; this.addStreamToolStripMenuItem.Click += new System.EventHandler(this.addStreamToolStripMenuItem_Click); // // removeToolStripMenuItem // this.removeToolStripMenuItem.Name = "removeToolStripMenuItem"; - this.removeToolStripMenuItem.Size = new System.Drawing.Size(195, 32); + this.removeToolStripMenuItem.Size = new System.Drawing.Size(147, 22); this.removeToolStripMenuItem.Text = "Remove"; this.removeToolStripMenuItem.Click += new System.EventHandler(this.removeToolStripMenuItem_Click); // @@ -157,15 +156,14 @@ private void InitializeComponent() // // menuStrip1 // - this.menuStrip1.GripMargin = new System.Windows.Forms.Padding(2, 2, 0, 2); this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileToolStripMenuItem, this.editToolStripMenuItem}); this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Padding = new System.Windows.Forms.Padding(9, 2, 0, 2); - this.menuStrip1.Size = new System.Drawing.Size(1280, 33); + this.menuStrip1.Padding = new System.Windows.Forms.Padding(6, 1, 0, 1); + this.menuStrip1.Size = new System.Drawing.Size(853, 24); this.menuStrip1.TabIndex = 5; this.menuStrip1.Text = "menuStrip1"; // @@ -179,14 +177,14 @@ private void InitializeComponent() this.updateCurrentFileToolStripMenuItem, this.saveAsToolStripMenuItem}); this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - this.fileToolStripMenuItem.Size = new System.Drawing.Size(54, 29); + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 22); this.fileToolStripMenuItem.Text = "File"; // // openFileMenuItem // this.openFileMenuItem.Image = global::StructuredStorageExplorer.Properties.Resources.folder; this.openFileMenuItem.Name = "openFileMenuItem"; - this.openFileMenuItem.Size = new System.Drawing.Size(276, 34); + this.openFileMenuItem.Size = new System.Drawing.Size(187, 26); this.openFileMenuItem.Text = "Open..."; this.openFileMenuItem.Click += new System.EventHandler(this.openFileMenuItem_Click); // @@ -194,34 +192,34 @@ private void InitializeComponent() // this.newStripMenuItem1.Image = global::StructuredStorageExplorer.Properties.Resources.page_white; this.newStripMenuItem1.Name = "newStripMenuItem1"; - this.newStripMenuItem1.Size = new System.Drawing.Size(276, 34); + this.newStripMenuItem1.Size = new System.Drawing.Size(187, 26); this.newStripMenuItem1.Text = "New Compound File"; this.newStripMenuItem1.Click += new System.EventHandler(this.newStripMenuItem1_Click); // // closeStripMenuItem1 // this.closeStripMenuItem1.Name = "closeStripMenuItem1"; - this.closeStripMenuItem1.Size = new System.Drawing.Size(276, 34); + this.closeStripMenuItem1.Size = new System.Drawing.Size(187, 26); this.closeStripMenuItem1.Text = "Close file"; this.closeStripMenuItem1.Click += new System.EventHandler(this.closeStripMenuItem1_Click); // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(273, 6); + this.toolStripSeparator2.Size = new System.Drawing.Size(184, 6); // // updateCurrentFileToolStripMenuItem // this.updateCurrentFileToolStripMenuItem.Image = global::StructuredStorageExplorer.Properties.Resources.disk; this.updateCurrentFileToolStripMenuItem.Name = "updateCurrentFileToolStripMenuItem"; - this.updateCurrentFileToolStripMenuItem.Size = new System.Drawing.Size(276, 34); + this.updateCurrentFileToolStripMenuItem.Size = new System.Drawing.Size(187, 26); this.updateCurrentFileToolStripMenuItem.Text = "Save"; this.updateCurrentFileToolStripMenuItem.Click += new System.EventHandler(this.updateCurrentFileToolStripMenuItem_Click); // // saveAsToolStripMenuItem // this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; - this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(276, 34); + this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(187, 26); this.saveAsToolStripMenuItem.Text = "Save As..."; this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click); // @@ -230,13 +228,13 @@ private void InitializeComponent() this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.preferencesToolStripMenuItem}); this.editToolStripMenuItem.Name = "editToolStripMenuItem"; - this.editToolStripMenuItem.Size = new System.Drawing.Size(58, 29); + this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 22); this.editToolStripMenuItem.Text = "Edit"; // // preferencesToolStripMenuItem // this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem"; - this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(204, 34); + this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(135, 22); this.preferencesToolStripMenuItem.Text = "Preferences"; this.preferencesToolStripMenuItem.Click += new System.EventHandler(this.preferencesToolStripMenuItem_Click); // @@ -245,24 +243,22 @@ private void InitializeComponent() this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileNameLabel}); - this.statusStrip1.Location = new System.Drawing.Point(0, 682); + this.statusStrip1.Location = new System.Drawing.Point(0, 436); this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 21, 0); - this.statusStrip1.Size = new System.Drawing.Size(1280, 22); + this.statusStrip1.Size = new System.Drawing.Size(853, 22); this.statusStrip1.TabIndex = 6; this.statusStrip1.Text = "statusStrip1"; // // fileNameLabel // this.fileNameLabel.Name = "fileNameLabel"; - this.fileNameLabel.Size = new System.Drawing.Size(0, 15); + this.fileNameLabel.Size = new System.Drawing.Size(0, 17); // // splitContainer1 // this.splitContainer1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer1.Location = new System.Drawing.Point(0, 0); - this.splitContainer1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.splitContainer1.Name = "splitContainer1"; this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; // @@ -273,26 +269,23 @@ private void InitializeComponent() // splitContainer1.Panel2 // this.splitContainer1.Panel2.Controls.Add(this.propertyGrid1); - this.splitContainer1.Size = new System.Drawing.Size(425, 649); - this.splitContainer1.SplitterDistance = 321; - this.splitContainer1.SplitterWidth = 6; + this.splitContainer1.Size = new System.Drawing.Size(283, 412); + this.splitContainer1.SplitterDistance = 203; this.splitContainer1.TabIndex = 5; // // propertyGrid1 // this.propertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill; this.propertyGrid1.Location = new System.Drawing.Point(0, 0); - this.propertyGrid1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.propertyGrid1.Name = "propertyGrid1"; - this.propertyGrid1.Size = new System.Drawing.Size(423, 320); + this.propertyGrid1.Size = new System.Drawing.Size(281, 203); this.propertyGrid1.TabIndex = 0; this.propertyGrid1.ToolbarVisible = false; // // splitContainer2 // this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer2.Location = new System.Drawing.Point(0, 33); - this.splitContainer2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.splitContainer2.Location = new System.Drawing.Point(0, 24); this.splitContainer2.Name = "splitContainer2"; // // splitContainer2.Panel1 @@ -302,9 +295,8 @@ private void InitializeComponent() // splitContainer2.Panel2 // this.splitContainer2.Panel2.Controls.Add(this.tabControl1); - this.splitContainer2.Size = new System.Drawing.Size(1280, 649); - this.splitContainer2.SplitterDistance = 425; - this.splitContainer2.SplitterWidth = 6; + this.splitContainer2.Size = new System.Drawing.Size(853, 412); + this.splitContainer2.SplitterDistance = 283; this.splitContainer2.TabIndex = 7; // // tabControl1 @@ -313,20 +305,18 @@ private void InitializeComponent() this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControl1.Location = new System.Drawing.Point(0, 0); - this.tabControl1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(849, 649); + this.tabControl1.Size = new System.Drawing.Size(566, 412); this.tabControl1.TabIndex = 1; // // tabPage1 // this.tabPage1.Controls.Add(this.hexEditor); - this.tabPage1.Location = new System.Drawing.Point(4, 29); - this.tabPage1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tabPage1.Location = new System.Drawing.Point(4, 22); this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.tabPage1.Size = new System.Drawing.Size(841, 616); + this.tabPage1.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3); + this.tabPage1.Size = new System.Drawing.Size(558, 386); this.tabPage1.TabIndex = 0; this.tabPage1.Text = "Raw Data"; this.tabPage1.UseVisualStyleBackColor = true; @@ -338,11 +328,10 @@ private void InitializeComponent() this.hexEditor.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.hexEditor.LineInfoForeColor = System.Drawing.Color.Empty; this.hexEditor.LineInfoVisible = true; - this.hexEditor.Location = new System.Drawing.Point(4, 5); - this.hexEditor.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.hexEditor.Location = new System.Drawing.Point(3, 3); this.hexEditor.Name = "hexEditor"; this.hexEditor.ShadowSelectionColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(60)))), ((int)(((byte)(188)))), ((int)(((byte)(255))))); - this.hexEditor.Size = new System.Drawing.Size(833, 606); + this.hexEditor.Size = new System.Drawing.Size(552, 380); this.hexEditor.StringViewVisible = true; this.hexEditor.TabIndex = 0; this.hexEditor.UseFixedBytesPerLine = true; @@ -351,11 +340,10 @@ private void InitializeComponent() // tabPage2 // this.tabPage2.Controls.Add(this.splitContainer3); - this.tabPage2.Location = new System.Drawing.Point(4, 29); - this.tabPage2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tabPage2.Location = new System.Drawing.Point(4, 22); this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.tabPage2.Size = new System.Drawing.Size(841, 616); + this.tabPage2.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3); + this.tabPage2.Size = new System.Drawing.Size(558, 396); this.tabPage2.TabIndex = 1; this.tabPage2.Text = "OLE Properties"; this.tabPage2.UseVisualStyleBackColor = true; @@ -363,8 +351,8 @@ private void InitializeComponent() // splitContainer3 // this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer3.Location = new System.Drawing.Point(4, 5); - this.splitContainer3.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.splitContainer3.Location = new System.Drawing.Point(3, 3); + this.splitContainer3.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.splitContainer3.Name = "splitContainer3"; this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; // @@ -375,9 +363,9 @@ private void InitializeComponent() // splitContainer3.Panel2 // this.splitContainer3.Panel2.Controls.Add(this.dgvUserDefinedProperties); - this.splitContainer3.Size = new System.Drawing.Size(833, 606); - this.splitContainer3.SplitterDistance = 303; - this.splitContainer3.SplitterWidth = 5; + this.splitContainer3.Size = new System.Drawing.Size(552, 390); + this.splitContainer3.SplitterDistance = 195; + this.splitContainer3.SplitterWidth = 3; this.splitContainer3.TabIndex = 2; // // dgvOLEProps @@ -385,10 +373,9 @@ private void InitializeComponent() this.dgvOLEProps.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgvOLEProps.Dock = System.Windows.Forms.DockStyle.Fill; this.dgvOLEProps.Location = new System.Drawing.Point(0, 0); - this.dgvOLEProps.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.dgvOLEProps.Name = "dgvOLEProps"; this.dgvOLEProps.RowHeadersWidth = 62; - this.dgvOLEProps.Size = new System.Drawing.Size(833, 303); + this.dgvOLEProps.Size = new System.Drawing.Size(552, 195); this.dgvOLEProps.TabIndex = 0; // // dgvUserDefinedProperties @@ -396,22 +383,20 @@ private void InitializeComponent() this.dgvUserDefinedProperties.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgvUserDefinedProperties.Dock = System.Windows.Forms.DockStyle.Fill; this.dgvUserDefinedProperties.Location = new System.Drawing.Point(0, 0); - this.dgvUserDefinedProperties.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.dgvUserDefinedProperties.Name = "dgvUserDefinedProperties"; this.dgvUserDefinedProperties.RowHeadersWidth = 62; - this.dgvUserDefinedProperties.Size = new System.Drawing.Size(833, 298); + this.dgvUserDefinedProperties.Size = new System.Drawing.Size(552, 192); this.dgvUserDefinedProperties.TabIndex = 1; // // MainForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1280, 704); + this.ClientSize = new System.Drawing.Size(853, 458); this.Controls.Add(this.splitContainer2); this.Controls.Add(this.statusStrip1); this.Controls.Add(this.menuStrip1); this.MainMenuStrip = this.menuStrip1; - this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.Name = "MainForm"; this.Text = "Structured Storage eXplorer"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); From be338a9461edc649435bc928ba519a15041dfce5 Mon Sep 17 00:00:00 2001 From: Jeremy Powell Date: Thu, 5 Sep 2024 14:32:32 +1200 Subject: [PATCH 2/4] Update Be.Windows.Forms.HexBox to v1.6.1 And consume from NuGet --- .../MainForm.Designer.cs | 2 +- .../StructuredStorageExplorer.csproj | 13 +++---------- .../lib/Be.Windows.Forms.HexBox.dll | Bin 81920 -> 0 bytes 3 files changed, 4 insertions(+), 11 deletions(-) delete mode 100644 sources/Structured Storage Explorer/lib/Be.Windows.Forms.HexBox.dll diff --git a/sources/Structured Storage Explorer/MainForm.Designer.cs b/sources/Structured Storage Explorer/MainForm.Designer.cs index af129b9a..a20ed86b 100644 --- a/sources/Structured Storage Explorer/MainForm.Designer.cs +++ b/sources/Structured Storage Explorer/MainForm.Designer.cs @@ -326,7 +326,7 @@ private void InitializeComponent() this.hexEditor.BackColor = System.Drawing.Color.WhiteSmoke; this.hexEditor.Dock = System.Windows.Forms.DockStyle.Fill; this.hexEditor.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.hexEditor.LineInfoForeColor = System.Drawing.Color.Empty; + this.hexEditor.InfoForeColor = System.Drawing.Color.Empty; this.hexEditor.LineInfoVisible = true; this.hexEditor.Location = new System.Drawing.Point(3, 3); this.hexEditor.Name = "hexEditor"; diff --git a/sources/Structured Storage Explorer/StructuredStorageExplorer.csproj b/sources/Structured Storage Explorer/StructuredStorageExplorer.csproj index d75bc1f3..ad7cf6b6 100644 --- a/sources/Structured Storage Explorer/StructuredStorageExplorer.csproj +++ b/sources/Structured Storage Explorer/StructuredStorageExplorer.csproj @@ -37,19 +37,12 @@ - - - False - lib\Be.Windows.Forms.HexBox.dll - - - @@ -68,9 +61,6 @@ true - - - @@ -78,4 +68,7 @@ + + + \ No newline at end of file diff --git a/sources/Structured Storage Explorer/lib/Be.Windows.Forms.HexBox.dll b/sources/Structured Storage Explorer/lib/Be.Windows.Forms.HexBox.dll deleted file mode 100644 index 1d4afbf9d49803ec3b2b0abdd5079920ed0dd1dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81920 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 From 24464058b8e817e7d483e3aab2ebf95bbd11e3ac Mon Sep 17 00:00:00 2001 From: Jeremy Powell Date: Tue, 1 Oct 2024 15:09:14 +1300 Subject: [PATCH 3/4] Show error messages in Structured Storage Explorer --- sources/Structured Storage Explorer/MainForm.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sources/Structured Storage Explorer/MainForm.cs b/sources/Structured Storage Explorer/MainForm.cs index 26c128fd..b3e7bd48 100644 --- a/sources/Structured Storage Explorer/MainForm.cs +++ b/sources/Structured Storage Explorer/MainForm.cs @@ -372,8 +372,9 @@ private void openFileMenuItem_Click(object sender, EventArgs e) { OpenFile(); } - catch + catch (Exception ex) when (ex is IOException || ex is UnauthorizedAccessException || ex is CFException) { + MessageBox.Show($"Cannot open file: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } From f3466cd58f07997315dfc145ef2b8c083e5ecfd5 Mon Sep 17 00:00:00 2001 From: Jeremy Powell Date: Tue, 8 Oct 2024 09:45:14 +1300 Subject: [PATCH 4/4] Refactor Storage Explorer Simplify the code and fix various errors, warnings, etc. --- .../Structured Storage Explorer/MainForm.cs | 356 ++++++++---------- 1 file changed, 156 insertions(+), 200 deletions(-) diff --git a/sources/Structured Storage Explorer/MainForm.cs b/sources/Structured Storage Explorer/MainForm.cs index b3e7bd48..83776c17 100644 --- a/sources/Structured Storage Explorer/MainForm.cs +++ b/sources/Structured Storage Explorer/MainForm.cs @@ -66,11 +66,11 @@ private void OpenFile() private void CloseCurrentFile() { - if (cf != null) - cf.Close(); + cf?.Close(); + cf = null; - if (fs != null) - fs.Close(); + fs?.Close(); + fs = null; treeView1.Nodes.Clear(); fileNameLabel.Text = string.Empty; @@ -108,7 +108,7 @@ private void RefreshTree() root.ImageIndex = 0; root.Tag = cf.RootStorage; - //Recursive function to get all storage and streams + // Recursive function to get all storage and streams AddNodes(root, cf.RootStorage); } @@ -123,33 +123,26 @@ private void LoadFile(string fileName, bool enableCommit) try { - if (cf != null) - { - cf.Close(); - cf = null; - } + cf?.Close(); + cf = null; CFSConfiguration cfg = CFSConfiguration.SectorRecycle | CFSConfiguration.EraseFreeSectors; if (!Settings.Default.EnableValidation) cfg |= CFSConfiguration.NoValidationException; - //Load file - if (enableCommit) - { - cf = new CompoundFile(fs, CFSUpdateMode.Update, cfg); - } - else - { - cf = new CompoundFile(fs); - } + // Load file + cf = enableCommit ? new CompoundFile(fs, CFSUpdateMode.Update, cfg) : new CompoundFile(fs); RefreshTree(); } catch (Exception ex) { cf?.Close(); + cf = null; + fs?.Close(); + fs = null; treeView1.Nodes.Clear(); fileNameLabel.Text = string.Empty; @@ -161,62 +154,57 @@ private void LoadFile(string fileName, bool enableCommit) /// Recursive addition of tree nodes foreach child of current item in the storage /// /// Current TreeNode - /// Current storage associated with node - private static void AddNodes(TreeNode node, CFStorage cfs) + /// Current storage associated with node + private static void AddNodes(TreeNode node, CFStorage storage) { - Action va = delegate (CFItem target) + void va(CFItem item) { - TreeNode temp = node.Nodes.Add( - target.Name, - target.Name + (target.IsStream ? " (" + target.Size + " bytes )" : "")); + TreeNode childNode = node.Nodes.Add( + item.Name, + item.Name + (item.IsStream ? " (" + item.Size + " bytes )" : "")); - temp.Tag = target; + childNode.Tag = item; - if (target.IsStream) + if (item is CFStorage subStorage) { - //Stream - temp.ImageIndex = 1; - temp.SelectedImageIndex = 1; + // Storage + childNode.ImageIndex = 0; + childNode.SelectedImageIndex = 0; + + // Recursion into the storage + AddNodes(childNode, subStorage); } else { - //Storage - temp.ImageIndex = 0; - temp.SelectedImageIndex = 0; - - //Recursion into the storage - AddNodes(temp, (CFStorage)target); + // Stream + childNode.ImageIndex = 1; + childNode.SelectedImageIndex = 1; } - }; + } - //Visit NON-recursively (first level only) - cfs.VisitEntries(va, false); + // Visit NON-recursively (first level only) + storage.VisitEntries(va, false); } private void exportDataToolStripMenuItem_Click(object sender, EventArgs e) { - //No export if storage - if (treeView1.SelectedNode == null || !((CFItem)treeView1.SelectedNode.Tag).IsStream) + // No export if storage + if (treeView1.SelectedNode == null + || treeView1.SelectedNode.Tag is not CFStream stream) { MessageBox.Show("Only stream data can be exported", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - return; } - CFStream target = (CFStream)treeView1.SelectedNode.Tag; - // A lot of stream and storage have only non-printable characters. // We need to sanitize filename. string sanitizedFileName = string.Empty; - foreach (char c in target.Name) + foreach (char c in stream.Name) { - if ( - char.GetUnicodeCategory(c) == UnicodeCategory.LetterNumber - || char.GetUnicodeCategory(c) == UnicodeCategory.LowercaseLetter - || char.GetUnicodeCategory(c) == UnicodeCategory.UppercaseLetter) - + UnicodeCategory category = char.GetUnicodeCategory(c); + if (category is UnicodeCategory.LetterNumber or UnicodeCategory.LowercaseLetter or UnicodeCategory.UppercaseLetter) sanitizedFileName += c; } @@ -225,29 +213,19 @@ private void exportDataToolStripMenuItem_Click(object sender, EventArgs e) sanitizedFileName = "tempFileName"; } - saveFileDialog1.FileName = sanitizedFileName + ".bin"; + saveFileDialog1.FileName = $"{sanitizedFileName}.bin"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { - FileStream fs = null; - try { - fs = new FileStream(saveFileDialog1.FileName, FileMode.CreateNew, FileAccess.ReadWrite); - fs.Write(target.GetData(), 0, (int)target.Size); + using FileStream fs = new(saveFileDialog1.FileName, FileMode.CreateNew, FileAccess.ReadWrite); + fs.Write(stream.GetData(), 0, (int)stream.Size); } catch (Exception ex) { treeView1.Nodes.Clear(); - MessageBox.Show("Internal error: " + ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - finally - { - if (fs != null) - { - fs.Flush(); - fs.Close(); - } + MessageBox.Show($"Internal error: {ex.Message}", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } @@ -255,7 +233,8 @@ private void exportDataToolStripMenuItem_Click(object sender, EventArgs e) private void removeToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode n = treeView1.SelectedNode; - ((CFStorage)n.Parent.Tag).Delete(n.Name); + if (n?.Parent?.Tag is CFStorage storage) + storage.Delete(n.Name); RefreshTree(); } @@ -278,27 +257,25 @@ private void updateCurrentFileToolStripMenuItem_Click(object sender, EventArgs e cf.Commit(); } else + { MessageBox.Show("Cannot update a compound document that is not based on a stream or on a file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } } private void addStreamToolStripMenuItem_Click(object sender, EventArgs e) { string streamName = string.Empty; - if (Utils.InputBox("Add stream", "Insert stream name", ref streamName) == DialogResult.OK) + if (Utils.InputBox("Add stream", "Insert stream name", ref streamName) == DialogResult.OK + && treeView1.SelectedNode.Tag is CFStorage storage) { - CFItem cfs = treeView1.SelectedNode.Tag as CFItem; - - if (cfs != null && (cfs.IsStorage || cfs.IsRoot)) + try { - try - { - ((CFStorage)cfs).AddStream(streamName); - } - catch (CFDuplicatedItemException) - { - MessageBox.Show("Cannot insert a duplicated item", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } + storage.AddStream(streamName); + } + catch (CFDuplicatedItemException) + { + MessageBox.Show("Cannot insert a duplicated item", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } RefreshTree(); @@ -307,22 +284,18 @@ private void addStreamToolStripMenuItem_Click(object sender, EventArgs e) private void addStorageStripMenuItem1_Click(object sender, EventArgs e) { - string storage = string.Empty; + string storageName = string.Empty; - if (Utils.InputBox("Add storage", "Insert storage name", ref storage) == DialogResult.OK) + if (Utils.InputBox("Add storage", "Insert storage name", ref storageName) == DialogResult.OK + && treeView1.SelectedNode.Tag is CFStorage storage) { - CFItem cfs = treeView1.SelectedNode.Tag as CFItem; - - if (cfs != null && (cfs.IsStorage || cfs.IsRoot)) + try { - try - { - ((CFStorage)cfs).AddStorage(storage); - } - catch (CFDuplicatedItemException) - { - MessageBox.Show("Cannot insert a duplicated item", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } + storage.AddStorage(storageName); + } + catch (CFDuplicatedItemException) + { + MessageBox.Show("Cannot insert a duplicated item", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } RefreshTree(); @@ -331,28 +304,24 @@ private void addStorageStripMenuItem1_Click(object sender, EventArgs e) private void importDataStripMenuItem1_Click(object sender, EventArgs e) { - if (openDataFileDialog.ShowDialog() == DialogResult.OK) + if (openDataFileDialog.ShowDialog() == DialogResult.OK + && treeView1.SelectedNode.Tag is CFStream stream) { - CFStream s = treeView1.SelectedNode.Tag as CFStream; + using FileStream f = new(openDataFileDialog.FileName, FileMode.Open, FileAccess.Read, FileShare.Read); + byte[] data = new byte[f.Length]; + f.Read(data, 0, (int)f.Length); + f.Flush(); + f.Close(); + stream.SetData(data); - if (s != null) - { - FileStream f = new FileStream(openDataFileDialog.FileName, FileMode.Open, FileAccess.Read, FileShare.Read); - byte[] data = new byte[f.Length]; - f.Read(data, 0, (int)f.Length); - f.Flush(); - f.Close(); - s.SetData(data); - - RefreshTree(); - } + RefreshTree(); } } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { - if (cf != null) - cf.Close(); + cf?.Close(); + cf = null; } private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) @@ -381,141 +350,131 @@ private void openFileMenuItem_Click(object sender, EventArgs e) private void treeView1_MouseUp(object sender, MouseEventArgs e) { + TreeNode n = treeView1.GetNodeAt(e.X, e.Y); + if (n is null) + { + addStorageStripMenuItem1.Enabled = true; + addStreamToolStripMenuItem.Enabled = true; + importDataStripMenuItem1.Enabled = false; + exportDataToolStripMenuItem.Enabled = false; + removeToolStripMenuItem.Enabled = false; + propertyGrid1.SelectedObject = null; + return; + } + // Get the node under the mouse cursor. // We intercept both left and right mouse clicks // and set the selected TreeNode according. try { - TreeNode n = treeView1.GetNodeAt(e.X, e.Y); - - if (n != null) + if (hexEditor.ByteProvider != null && hexEditor.ByteProvider.HasChanges()) { - if (hexEditor.ByteProvider != null && hexEditor.ByteProvider.HasChanges()) + if (MessageBox.Show("Do you want to save pending changes ?", "Save changes", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { - if (MessageBox.Show("Do you want to save pending changes ?", "Save changes", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) - { - hexEditor.ByteProvider.ApplyChanges(); - } + hexEditor.ByteProvider.ApplyChanges(); } + } - treeView1.SelectedNode = n; + treeView1.SelectedNode = n; - // The tag property contains the underlying CFItem. - CFItem target = (CFItem)n.Tag; + // The tag property contains the underlying CFItem. + //CFItem target = (CFItem)n.Tag; - if (target.IsStream) - { - addStorageStripMenuItem1.Enabled = false; - addStreamToolStripMenuItem.Enabled = false; - importDataStripMenuItem1.Enabled = true; - exportDataToolStripMenuItem.Enabled = true; + if (n.Tag is CFStream stream) + { + addStorageStripMenuItem1.Enabled = false; + addStreamToolStripMenuItem.Enabled = false; + importDataStripMenuItem1.Enabled = true; + exportDataToolStripMenuItem.Enabled = true; #if OLE_PROPERTY - dgvUserDefinedProperties.DataSource = null; - dgvOLEProps.DataSource = null; - - if (target.Name == "\u0005SummaryInformation" || target.Name == "\u0005DocumentSummaryInformation") - { - OLEPropertiesContainer c = ((CFStream)target).AsOLEPropertiesContainer(); + dgvUserDefinedProperties.DataSource = null; + dgvOLEProps.DataSource = null; - DataTable ds = new DataTable(); + if (stream.Name == "\u0005SummaryInformation" || stream.Name == "\u0005DocumentSummaryInformation") + { + OLEPropertiesContainer c = stream.AsOLEPropertiesContainer(); - ds.Columns.Add("Name", typeof(string)); - ds.Columns.Add("Type", typeof(string)); - ds.Columns.Add("Value", typeof(string)); + DataTable ds = new DataTable(); + ds.Columns.Add("Name", typeof(string)); + ds.Columns.Add("Type", typeof(string)); + ds.Columns.Add("Value", typeof(string)); - foreach (var p in c.Properties) + foreach (OLEProperty p in c.Properties) + { + if (p.Value is not byte[] && p.Value is IList list) { - if (p.Value.GetType() != typeof(byte[]) && p.Value.GetType().GetInterfaces().Any(t => t == typeof(IList))) - { - for (int h = 0; h < ((IList)p.Value).Count; h++) - { - DataRow dr = ds.NewRow(); - dr.ItemArray = new object[] { p.PropertyName, p.VTType, ((IList)p.Value)[h] }; - ds.Rows.Add(dr); - } - } - else + for (int h = 0; h < list.Count; h++) { DataRow dr = ds.NewRow(); - dr.ItemArray = new object[] { p.PropertyName, p.VTType, p.Value }; + dr.ItemArray = new object[] { p.PropertyName, p.VTType, list[h] }; ds.Rows.Add(dr); } } - - ds.AcceptChanges(); - dgvOLEProps.DataSource = ds; - - if (c.HasUserDefinedProperties) + else { - DataTable ds2 = new DataTable(); + DataRow dr = ds.NewRow(); + dr.ItemArray = new object[] { p.PropertyName, p.VTType, p.Value }; + ds.Rows.Add(dr); + } + } - ds2.Columns.Add("Name", typeof(string)); - ds2.Columns.Add("Type", typeof(string)); - ds2.Columns.Add("Value", typeof(string)); + ds.AcceptChanges(); + dgvOLEProps.DataSource = ds; - foreach (var p in c.UserDefinedProperties.Properties) + if (c.HasUserDefinedProperties) + { + DataTable ds2 = new(); + ds2.Columns.Add("Name", typeof(string)); + ds2.Columns.Add("Type", typeof(string)); + ds2.Columns.Add("Value", typeof(string)); + + foreach (OLEProperty p in c.UserDefinedProperties.Properties) + { + if (p.Value is not byte[] && p.Value is IList list) { - if (p.Value.GetType() != typeof(byte[]) && p.Value.GetType().GetInterfaces().Any(t => t == typeof(IList))) - { - for (int h = 0; h < ((IList)p.Value).Count; h++) - { - DataRow dr = ds2.NewRow(); - dr.ItemArray = new object[] { p.PropertyName, p.VTType, ((IList)p.Value)[h] }; - ds2.Rows.Add(dr); - } - } - else + for (int h = 0; h < list.Count; h++) { DataRow dr = ds2.NewRow(); - dr.ItemArray = new object[] { p.PropertyName, p.VTType, p.Value }; + dr.ItemArray = new object[] { p.PropertyName, p.VTType, list[h] }; ds2.Rows.Add(dr); } } - - ds2.AcceptChanges(); - dgvUserDefinedProperties.DataSource = ds2; + else + { + DataRow dr = ds2.NewRow(); + dr.ItemArray = new object[] { p.PropertyName, p.VTType, p.Value }; + ds2.Rows.Add(dr); + } } + + ds2.AcceptChanges(); + dgvUserDefinedProperties.DataSource = ds2; } -#endif } + + hexEditor.ByteProvider = new StreamDataProvider(stream); +#endif } else { - addStorageStripMenuItem1.Enabled = true; - addStreamToolStripMenuItem.Enabled = true; - importDataStripMenuItem1.Enabled = false; - exportDataToolStripMenuItem.Enabled = false; + hexEditor.ByteProvider = null; } - if (n != null) - propertyGrid1.SelectedObject = n.Tag; - - if (n != null) - { - CFStream targetStream = n.Tag as CFStream; - if (targetStream != null) - { - hexEditor.ByteProvider = new StreamDataProvider(targetStream); - } - else - { - hexEditor.ByteProvider = null; - } - } + propertyGrid1.SelectedObject = n.Tag; } catch (Exception ex) { cf?.Close(); - fs?.Close(); - cf = null; + + fs?.Close(); fs = null; treeView1.Nodes.Clear(); fileNameLabel.Text = string.Empty; - MessageBox.Show("Internal error: " + ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show($"Internal error: {ex.Message}", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); } } @@ -525,12 +484,11 @@ void hexEditor_ByteProviderChanged(object sender, EventArgs e) private void closeStripMenuItem1_Click(object sender, EventArgs e) { - if (hexEditor.ByteProvider != null && hexEditor.ByteProvider.HasChanges()) + if (hexEditor.ByteProvider != null + && hexEditor.ByteProvider.HasChanges() + && MessageBox.Show("Do you want to save pending changes?", "Save changes", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { - if (MessageBox.Show("Do you want to save pending changes ?", "Save changes", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) - { - hexEditor.ByteProvider.ApplyChanges(); - } + hexEditor.ByteProvider.ApplyChanges(); } CloseCurrentFile(); @@ -538,10 +496,8 @@ private void closeStripMenuItem1_Click(object sender, EventArgs e) private void preferencesToolStripMenuItem_Click(object sender, EventArgs e) { - using (var pref = new PreferencesForm()) - { - pref.ShowDialog(); - } + using PreferencesForm pref = new(); + pref.ShowDialog(); } } }