diff options
author | Carlos Alberto Cortez <calberto.cortez@gmail.com> | 2011-07-30 20:48:17 +0400 |
---|---|---|
committer | Carlos Alberto Cortez <calberto.cortez@gmail.com> | 2011-07-30 20:50:30 +0400 |
commit | d6b382f993fea445db132a5a4e7ec57bd9214f49 (patch) | |
tree | 2b9b71c2e54807f1420b75a84bc868263c1573e6 /main | |
parent | 54c3dd01aa3c35130be64848f950a191b641b5c1 (diff) |
[Windows] Implement encoding selection in the open dialog.
Diffstat (limited to 'main')
5 files changed, 455 insertions, 14 deletions
diff --git a/main/src/addins/WindowsPlatform/Dialogs/EncodingComboBox.cs b/main/src/addins/WindowsPlatform/Dialogs/EncodingComboBox.cs index b90882d816..3966ec20bb 100644 --- a/main/src/addins/WindowsPlatform/Dialogs/EncodingComboBox.cs +++ b/main/src/addins/WindowsPlatform/Dialogs/EncodingComboBox.cs @@ -98,10 +98,17 @@ namespace MonoDevelop.Platform protected override void OnSelectedIndexChanged (EventArgs e)
{
base.OnSelectedIndexChanged (e);
-
- // TODO - Implement support for the add/remove encodings panel
- if (Items.Count > 0 && SelectedIndex == Items.Count -1)
+
+ // 'Add or Remove...' option
+ if (Items.Count > 0 && SelectedIndex == Items.Count -1) {
+ var encodingsForm = new EncodingSelectionForm ();
+ if (encodingsForm.ShowDialog (Parent) == DialogResult.OK) {
+ TextEncoding.ConversionEncodings = encodingsForm.SelectedEncodings;
+ Populate (true);
+ }
+
SelectedIndex = 0;
+ }
}
}
}
diff --git a/main/src/addins/WindowsPlatform/Dialogs/EncodingSelectionForm.Designer.cs b/main/src/addins/WindowsPlatform/Dialogs/EncodingSelectionForm.Designer.cs new file mode 100644 index 0000000000..a1db538dee --- /dev/null +++ b/main/src/addins/WindowsPlatform/Dialogs/EncodingSelectionForm.Designer.cs @@ -0,0 +1,164 @@ +namespace MonoDevelop.Platform
+{
+ partial class EncodingSelectionForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose (bool disposing)
+ {
+ if (disposing && (components != null)) {
+ components.Dispose ();
+ }
+ base.Dispose (disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent ()
+ {
+ this.label1 = new System.Windows.Forms.Label ();
+ this.addButton = new System.Windows.Forms.Button ();
+ this.removeButton = new System.Windows.Forms.Button ();
+ this.okButton = new System.Windows.Forms.Button ();
+ this.cancelButton = new System.Windows.Forms.Button ();
+ this.label2 = new System.Windows.Forms.Label ();
+ this.shownListView = new MonoDevelop.Platform.EncodingListView ();
+ this.availableListView = new MonoDevelop.Platform.EncodingListView ();
+ this.SuspendLayout ();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point (10, 12);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size (105, 15);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Available encodings:";
+ //
+ // addButton
+ //
+ this.addButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.addButton.Location = new System.Drawing.Point (291, 169);
+ this.addButton.Name = "addButton";
+ this.addButton.Size = new System.Drawing.Size (50, 30);
+ this.addButton.TabIndex = 2;
+ this.addButton.Text = ">";
+ this.addButton.UseVisualStyleBackColor = true;
+ this.addButton.Click += new System.EventHandler (this.addButtonClick);
+ //
+ // removeButton
+ //
+ this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.removeButton.Location = new System.Drawing.Point (291, 205);
+ this.removeButton.Name = "removeButton";
+ this.removeButton.Size = new System.Drawing.Size (50, 30);
+ this.removeButton.TabIndex = 3;
+ this.removeButton.Text = "<";
+ this.removeButton.UseVisualStyleBackColor = true;
+ this.removeButton.Click += new System.EventHandler (this.removeButtonClick);
+ //
+ // okButton
+ //
+ this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.okButton.Location = new System.Drawing.Point (474, 395);
+ this.okButton.Name = "okButton";
+ this.okButton.Size = new System.Drawing.Size (75, 23);
+ this.okButton.TabIndex = 5;
+ this.okButton.Text = "OK";
+ this.okButton.UseVisualStyleBackColor = true;
+ this.okButton.Click += new System.EventHandler (this.okButtonClick);
+ //
+ // cancelButton
+ //
+ this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.cancelButton.Location = new System.Drawing.Point (555, 395);
+ this.cancelButton.Name = "cancelButton";
+ this.cancelButton.Size = new System.Drawing.Size (75, 23);
+ this.cancelButton.TabIndex = 6;
+ this.cancelButton.Text = "Cancel";
+ this.cancelButton.UseVisualStyleBackColor = true;
+ this.cancelButton.Click += new System.EventHandler (this.cancelButtonClick);
+ //
+ // label2
+ //
+ this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point (350, 12);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size (132, 15);
+ this.label2.TabIndex = 7;
+ this.label2.Text = "Encodings shown in menu:";
+ //
+ // shownListView
+ //
+ this.shownListView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.shownListView.FullRowSelect = true;
+ this.shownListView.Location = new System.Drawing.Point (350, 39);
+ this.shownListView.MultiSelect = false;
+ this.shownListView.Name = "shownListView";
+ this.shownListView.Size = new System.Drawing.Size (280, 343);
+ this.shownListView.TabIndex = 4;
+ this.shownListView.UseCompatibleStateImageBehavior = false;
+ this.shownListView.View = System.Windows.Forms.View.Details;
+ //
+ // availableListView
+ //
+ this.availableListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.availableListView.FullRowSelect = true;
+ this.availableListView.Location = new System.Drawing.Point (10, 40);
+ this.availableListView.MultiSelect = false;
+ this.availableListView.Name = "availableListView";
+ this.availableListView.Size = new System.Drawing.Size (270, 342);
+ this.availableListView.TabIndex = 1;
+ this.availableListView.UseCompatibleStateImageBehavior = false;
+ this.availableListView.View = System.Windows.Forms.View.Details;
+ //
+ // EncodingSelectionForm
+ //
+ this.AcceptButton = this.okButton;
+ this.AutoScaleDimensions = new System.Drawing.SizeF (6F, 15F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CancelButton = this.cancelButton;
+ this.ClientSize = new System.Drawing.Size (643, 431);
+ this.Controls.Add (this.label2);
+ this.Controls.Add (this.shownListView);
+ this.Controls.Add (this.cancelButton);
+ this.Controls.Add (this.okButton);
+ this.Controls.Add (this.removeButton);
+ this.Controls.Add (this.addButton);
+ this.Controls.Add (this.availableListView);
+ this.Controls.Add (this.label1);
+ this.Name = "EncodingSelectionForm";
+ this.Text = "Select Text Encodings";
+ this.ResumeLayout (false);
+ this.PerformLayout ();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ private EncodingListView availableListView;
+ private System.Windows.Forms.Button addButton;
+ private System.Windows.Forms.Button removeButton;
+ private System.Windows.Forms.Button okButton;
+ private System.Windows.Forms.Button cancelButton;
+ private EncodingListView shownListView;
+ private System.Windows.Forms.Label label2;
+ }
+}
\ No newline at end of file diff --git a/main/src/addins/WindowsPlatform/Dialogs/EncodingSelectionForm.cs b/main/src/addins/WindowsPlatform/Dialogs/EncodingSelectionForm.cs new file mode 100644 index 0000000000..315284eeb1 --- /dev/null +++ b/main/src/addins/WindowsPlatform/Dialogs/EncodingSelectionForm.cs @@ -0,0 +1,139 @@ +//
+// EncodingSelectionForm.cs
+//
+// Author:
+// Carlos Alberto Cortez <calberto.cortez@gmail.com>
+//
+// Copyright (c) 2011 Carlos Alberto Cortez
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+using MonoDevelop.Core;
+using MonoDevelop.Projects.Text;
+
+namespace MonoDevelop.Platform
+{
+ public partial class EncodingSelectionForm : Form
+ {
+ public EncodingSelectionForm ()
+ {
+ InitializeComponent ();
+ Populate ();
+ }
+
+ void Populate ()
+ {
+ var availableEncodings = new Dictionary<string,TextEncoding> ();
+ foreach (var encoding in TextEncoding.SupportedEncodings)
+ availableEncodings [encoding.Id] = encoding;
+
+ var shownEncodings = TextEncoding.ConversionEncodings;
+
+ shownListView.BeginUpdate ();
+ foreach (var encoding in shownEncodings) {
+ var item = new ListViewItem (new string [] { encoding.Id, encoding.Name }) {
+ Tag = encoding
+ };
+ shownListView.Items.Add (item);
+
+ // Don't show on the available list the encodings
+ // that are already being shown
+ availableEncodings.Remove (encoding.Id);
+ }
+ shownListView.AutoResizeColumns (ColumnHeaderAutoResizeStyle.HeaderSize);
+ shownListView.EndUpdate ();
+
+ availableListView.BeginUpdate ();
+ foreach (var encoding in availableEncodings) {
+ var item = new ListViewItem (new string [] { encoding.Value.Id, encoding.Value.Name }) {
+ Tag = encoding.Value
+ };
+ availableListView.Items.Add (item);
+ }
+ availableListView.AutoResizeColumns (ColumnHeaderAutoResizeStyle.HeaderSize);
+ availableListView.EndUpdate ();
+ }
+
+ public TextEncoding [] SelectedEncodings {
+ get {
+ var encodings = shownListView.Items.Cast<ListViewItem> ().Select (item => (TextEncoding)item.Tag);
+ return encodings.ToArray ();
+ }
+ }
+
+ void MoveItem (ListView srcView, ListView destView)
+ {
+ if (srcView.SelectedIndices.Count == 0)
+ return;
+
+ int selectedIndex = srcView.SelectedIndices [0];
+ var item = srcView.Items [selectedIndex];
+
+ srcView.Items.RemoveAt (selectedIndex);
+ destView.Items.Add (item);
+ destView.AutoResizeColumns (ColumnHeaderAutoResizeStyle.HeaderSize);
+ }
+
+ private void addButtonClick (object sender, EventArgs e)
+ {
+ MoveItem (availableListView, shownListView);
+ }
+
+ private void removeButtonClick (object sender, EventArgs e)
+ {
+ MoveItem (shownListView, availableListView);
+ }
+
+ private void okButtonClick (object sender, EventArgs e)
+ {
+ DialogResult = DialogResult.OK;
+ }
+
+ private void cancelButtonClick (object sender, EventArgs e)
+ {
+ DialogResult = DialogResult.Cancel;
+ }
+ }
+
+ public class EncodingListView : ListView
+ {
+ public EncodingListView ()
+ {
+ SuspendLayout ();
+
+ View = View.Details;
+ MultiSelect = false;
+ FullRowSelect = true;
+
+ Columns.Add ("Name");
+ Columns.Add ("Encoding");
+
+ ResumeLayout ();
+ }
+ }
+}
diff --git a/main/src/addins/WindowsPlatform/Dialogs/EncodingSelectionForm.resx b/main/src/addins/WindowsPlatform/Dialogs/EncodingSelectionForm.resx new file mode 100644 index 0000000000..29dcb1b3a3 --- /dev/null +++ b/main/src/addins/WindowsPlatform/Dialogs/EncodingSelectionForm.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file diff --git a/main/src/addins/WindowsPlatform/WindowsPlatform.csproj b/main/src/addins/WindowsPlatform/WindowsPlatform.csproj index f2f95f80cb..fabb3cd325 100644 --- a/main/src/addins/WindowsPlatform/WindowsPlatform.csproj +++ b/main/src/addins/WindowsPlatform/WindowsPlatform.csproj @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> @@ -65,21 +65,31 @@ <SubType>UserControl</SubType> </Compile> <Compile Include="Dialogs\CustomAddFilesDialog.Designer.cs"> - <DependentUpon>Dialogs\CustomAddFilesDialog.cs</DependentUpon> + <DependentUpon>CustomAddFilesDialog.cs</DependentUpon> + </Compile> + <Compile Include="Dialogs\EncodingSelectionForm.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Dialogs\EncodingSelectionForm.Designer.cs"> + <DependentUpon>EncodingSelectionForm.cs</DependentUpon> </Compile> <Compile Include="Dialogs\OpenFileDialogEx.cs"> <SubType>UserControl</SubType> </Compile> <Compile Include="Dialogs\OpenFileDialogEx.Designer.cs"> - <DependentUpon>Dialogs\OpenFileDialogEx.cs</DependentUpon> + <DependentUpon>OpenFileDialogEx.cs</DependentUpon> </Compile> <Compile Include="Dialogs\AddFileDialogHandler.cs" /> <Compile Include="Dialogs\SelectFileDialogHandler.cs" /> - <Compile Include="Dialogs\WinFormsRoot.cs" /> + <Compile Include="Dialogs\WinFormsRoot.cs"> + <SubType>Form</SubType> + </Compile> <Compile Include="Dialogs\OpenFileDialogHandler.cs" /> - <Compile Include="Dialogs\CustomOpenFileDialog.cs" /> + <Compile Include="Dialogs\CustomOpenFileDialog.cs"> + <SubType>UserControl</SubType> + </Compile> <Compile Include="Dialogs\EncodingComboBox.cs"> - <SubType>Form</SubType> + <SubType>Component</SubType> </Compile> <Compile Include="AssemblyInfo.cs" /> <Compile Include="Enums.cs" /> @@ -94,11 +104,14 @@ </ItemGroup> <ItemGroup> <EmbeddedResource Include="Dialogs\CustomAddFilesDialog.resx"> - <DependentUpon>Dialogs\CustomAddFilesDialog.cs</DependentUpon> + <DependentUpon>CustomAddFilesDialog.cs</DependentUpon> <SubType>Designer</SubType> </EmbeddedResource> + <EmbeddedResource Include="Dialogs\EncodingSelectionForm.resx"> + <DependentUpon>EncodingSelectionForm.cs</DependentUpon> + </EmbeddedResource> <EmbeddedResource Include="Dialogs\OpenFileDialogEx.resx"> - <DependentUpon>Dialogs\OpenFileDialogEx.cs</DependentUpon> + <DependentUpon>OpenFileDialogEx.cs</DependentUpon> <SubType>Designer</SubType> </EmbeddedResource> <EmbeddedResource Include="WindowsPlatform.addin.xml"> @@ -106,7 +119,5 @@ </EmbeddedResource> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> - <ItemGroup> - <Folder Include="Dialogs\" /> - </ItemGroup> + <ItemGroup /> </Project>
\ No newline at end of file |