Started working on Tag Explorer plugin

This commit is contained in:
MaxED 2012-06-30 12:55:47 +00:00
parent 254ffeb610
commit ea312a6e22
23 changed files with 1389 additions and 1 deletions

View file

@ -283,6 +283,10 @@
<param name="Name" value="UDMF Controls plugin">
<param name="Local" value="gz_plug_udmfcontrols.html">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Tag Explorer plugin">
<param name="Local" value="gz_plug_tagexplorer.html">
</OBJECT>
</UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Frequently asked questions">

View file

@ -33,6 +33,7 @@
<li>PNG image format support.</li>
<li><a href="gz_plug_colorpicker.html">Color Picker plugin.</a></li>
<li><a href="gz_plug_udmfcontrols.html">UDMF Controls plugin.</a></li>
<li><a href="gz_plug_tagexplorer.html">Tag Explorer plugin.</a></li>
</ul>
</p>
</div>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GZDoom Builder features</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="default.css" media="screen" title="Default" />
</head>
<body>
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="keyword" value="Template">
</object>
<div id="gz_title"><h1>Tag Explorer plugin</h1></div>
<div id="contents">
<p><img style="float:left; margin-right:10px" src="gz_colorpicker.jpg"/>Tag Explorer plugin lets you view all things, sectors and linedefs, which have tags and/or actions/effects set. If current map is in UDMF map format, it also allows you to edit things, sectors and linedefs comments and search an item by a comment.<br /><br />
<strong>Usage:</strong><br />
Right-click an item to open appropriate Edit menu.<br />
Double-click an item to edit comment (UDMF-only). Remove comment text to clear comment.
</p>
</div>
</body>

View file

@ -21,6 +21,7 @@
</br>
<a href="gz_plug_colorpicker.html">Color Picker plugin.</a></br>
<a href="gz_plug_udmfcontrols.html">UDMF Controls plugin.</a></br>
<a href="gz_plug_tagexplorer.html">Tag Explorer plugin.</a>
</p>
</div>
</body>

View file

@ -7,6 +7,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuilderModes", "..\Plugins\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GZDoomEditing", "..\Plugins\GZDoomEditing\GZDoomEditing.csproj", "{760A9BC7-CB73-4C36-858B-994C14996FCD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommentsPanel", "..\Plugins\CommentsPanel\CommentsPanel.csproj", "{58BD8A5B-1B48-435D-8473-A92F27D06C49}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TagExplorer", "..\Plugins\TagExplorer\TagExplorer.csproj", "{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -47,6 +51,26 @@ Global
{760A9BC7-CB73-4C36-858B-994C14996FCD}.Release|Mixed Platforms.Build.0 = Release|x86
{760A9BC7-CB73-4C36-858B-994C14996FCD}.Release|x86.ActiveCfg = Release|x86
{760A9BC7-CB73-4C36-858B-994C14996FCD}.Release|x86.Build.0 = Release|x86
{58BD8A5B-1B48-435D-8473-A92F27D06C49}.Debug|Any CPU.ActiveCfg = Debug|x86
{58BD8A5B-1B48-435D-8473-A92F27D06C49}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{58BD8A5B-1B48-435D-8473-A92F27D06C49}.Debug|Mixed Platforms.Build.0 = Debug|x86
{58BD8A5B-1B48-435D-8473-A92F27D06C49}.Debug|x86.ActiveCfg = Debug|x86
{58BD8A5B-1B48-435D-8473-A92F27D06C49}.Debug|x86.Build.0 = Debug|x86
{58BD8A5B-1B48-435D-8473-A92F27D06C49}.Release|Any CPU.ActiveCfg = Release|x86
{58BD8A5B-1B48-435D-8473-A92F27D06C49}.Release|Mixed Platforms.ActiveCfg = Release|x86
{58BD8A5B-1B48-435D-8473-A92F27D06C49}.Release|Mixed Platforms.Build.0 = Release|x86
{58BD8A5B-1B48-435D-8473-A92F27D06C49}.Release|x86.ActiveCfg = Release|x86
{58BD8A5B-1B48-435D-8473-A92F27D06C49}.Release|x86.Build.0 = Release|x86
{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}.Debug|x86.ActiveCfg = Debug|Any CPU
{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}.Release|Any CPU.Build.0 = Release|Any CPU
{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View file

@ -30,7 +30,7 @@ namespace CodeImp.DoomBuilder.GZBuilder
public static bool UDMF;
//version
public const float Version = 1.09f;
public const float Version = 1.10f;
//debug console
#if DEBUG

View file

@ -85,5 +85,8 @@ namespace CodeImp.DoomBuilder.Rendering
void RenderText(TextLabel text);
void RenderGeometry(FlatVertex[] vertices, ImageData texture, bool transformcoords);
void RedrawSurface();
//mxd. Center camera on given coordinates
void PositionView(float x, float y);
}
}

View file

@ -77,6 +77,7 @@
<ProjectReference Include="..\..\Core\Builder.csproj">
<Project>{818B3D10-F791-4C3F-9AF5-BB2D0079B63C}</Project>
<Name>Builder</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>

View file

@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Text;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Controls;
using CodeImp.DoomBuilder.Editing;
using CodeImp.DoomBuilder.Plugins;
namespace CodeImp.DoomBuilder.TagExplorer
{
public class BuilderPlug : Plug
{
private static BuilderPlug me;
// Docker
private TagExplorer tagExplorer;
private Docker docker;
// Static property to access the BuilderPlug
public static BuilderPlug Me { get { return me; } }
// This event is called when the plugin is initialized
public override void OnInitialize() {
if (GZBuilder.GZGeneral.Version < 1.10f) {
General.ErrorLogger.Add(ErrorType.Error, "Tag Explorer plugin: GZDoom Builder 1.10 or later required!");
return;
}
base.OnInitialize();
// Keep a static reference
me = this;
}
// When a map is created
public override void OnMapNewEnd() {
OnMapOpenEnd();
}
// This is called after a map has been successfully opened
public override void OnMapOpenEnd() {
// If we just opened a UDMF format map, we want to create the Tag Explorer panel
if (General.Map.Config.FormatInterface == "UniversalMapSetIO") {
tagExplorer = new TagExplorer();
docker = new Docker("tagexplorerdockerpanel", "Tag Explorer", tagExplorer);
General.Interface.AddDocker(docker);
tagExplorer.Setup();
}
}
// This is called after a map has been closed
public override void OnMapCloseEnd() {
// If we have a Comments panel, remove it
if (tagExplorer != null) {
General.Interface.RemoveDocker(docker);
docker = null;
tagExplorer.Dispose();
tagExplorer = null;
}
}
// Geometry pasted
public override void OnPasteEnd(PasteOptions options) {
if (tagExplorer != null) {
tagExplorer.UpdateTree();
}
}
// Undo performed
public override void OnUndoEnd() {
if (tagExplorer != null) {
tagExplorer.UpdateTree();
}
}
// Redo performed
public override void OnRedoEnd() {
if (tagExplorer != null) {
tagExplorer.UpdateTree();
}
}
// Mode changes
/*public override bool OnModeChange(EditMode oldmode, EditMode newmode) {
if (tagExplorer != null) {
tagExplorer.UpdateTree();
}
return base.OnModeChange(oldmode, newmode);
}*/
}
}

View file

@ -0,0 +1,198 @@
namespace CodeImp.DoomBuilder.TagExplorer
{
partial class TagExplorer
{
/// <summary>
/// Требуется переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
#region Код, автоматически созданный конструктором компонентов
/// <summary>
/// Обязательный метод для поддержки конструктора - не изменяйте
/// содержимое данного метода при помощи редактора кода.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TagExplorer));
this.treeView = new System.Windows.Forms.TreeView();
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.cbDisplayMode = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.cbSortMode = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.cbCenterOnSelected = new System.Windows.Forms.CheckBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.label3 = new System.Windows.Forms.Label();
this.btnClearSearch = new System.Windows.Forms.Button();
this.tbSearch = new System.Windows.Forms.TextBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// treeView
//
this.treeView.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.treeView.ImageIndex = 0;
this.treeView.ImageList = this.imageList1;
this.treeView.Location = new System.Drawing.Point(3, 125);
this.treeView.Name = "treeView";
this.treeView.SelectedImageIndex = 0;
this.treeView.Size = new System.Drawing.Size(266, 415);
this.treeView.TabIndex = 0;
this.toolTip1.SetToolTip(this.treeView, "Double-click item to edit item\'s comment\r\nRight-click item to open item\'s Propert" +
"ies");
this.treeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView_NodeMouseDoubleClick);
this.treeView.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.treeView_AfterLabelEdit);
this.treeView.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView_NodeMouseClick);
//
// imageList1
//
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
this.imageList1.Images.SetKeyName(0, "ThingsGroup.png");
this.imageList1.Images.SetKeyName(1, "Things.png");
this.imageList1.Images.SetKeyName(2, "SectorsGroup.png");
this.imageList1.Images.SetKeyName(3, "Sectors.png");
this.imageList1.Images.SetKeyName(4, "LinesGroup.png");
this.imageList1.Images.SetKeyName(5, "Lines.png");
//
// cbDisplayMode
//
this.cbDisplayMode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.cbDisplayMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbDisplayMode.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.cbDisplayMode.Location = new System.Drawing.Point(88, 13);
this.cbDisplayMode.Name = "cbDisplayMode";
this.cbDisplayMode.Size = new System.Drawing.Size(172, 22);
this.cbDisplayMode.TabIndex = 2;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label1.Location = new System.Drawing.Point(43, 16);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(39, 14);
this.label1.TabIndex = 3;
this.label1.Text = "Show:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// cbSortMode
//
this.cbSortMode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.cbSortMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbSortMode.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.cbSortMode.Location = new System.Drawing.Point(88, 40);
this.cbSortMode.Name = "cbSortMode";
this.cbSortMode.Size = new System.Drawing.Size(172, 22);
this.cbSortMode.TabIndex = 4;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label2.Location = new System.Drawing.Point(52, 43);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(30, 14);
this.label2.TabIndex = 5;
this.label2.Text = "Sort:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// cbCenterOnSelected
//
this.cbCenterOnSelected.AutoSize = true;
this.cbCenterOnSelected.Location = new System.Drawing.Point(12, 94);
this.cbCenterOnSelected.Name = "cbCenterOnSelected";
this.cbCenterOnSelected.Size = new System.Drawing.Size(203, 17);
this.cbCenterOnSelected.TabIndex = 6;
this.cbCenterOnSelected.Text = "Center view on selected map element";
this.cbCenterOnSelected.UseVisualStyleBackColor = true;
//
// groupBox1
//
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.btnClearSearch);
this.groupBox1.Controls.Add(this.tbSearch);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.cbCenterOnSelected);
this.groupBox1.Controls.Add(this.cbDisplayMode);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.cbSortMode);
this.groupBox1.Location = new System.Drawing.Point(3, 3);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(266, 116);
this.groupBox1.TabIndex = 7;
this.groupBox1.TabStop = false;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label3.Location = new System.Drawing.Point(9, 71);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(76, 14);
this.label3.TabIndex = 9;
this.label3.Text = "Find comment:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// btnClearSearch
//
this.btnClearSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnClearSearch.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnClearSearch.Image = global::CodeImp.DoomBuilder.TagExplorer.Properties.Resources.SearchClear;
this.btnClearSearch.Location = new System.Drawing.Point(236, 66);
this.btnClearSearch.Name = "btnClearSearch";
this.btnClearSearch.Size = new System.Drawing.Size(24, 24);
this.btnClearSearch.TabIndex = 8;
this.toolTip1.SetToolTip(this.btnClearSearch, "Clear Search");
this.btnClearSearch.UseVisualStyleBackColor = true;
this.btnClearSearch.Click += new System.EventHandler(this.btnClearSearch_Click);
//
// tbSearch
//
this.tbSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tbSearch.Location = new System.Drawing.Point(88, 68);
this.tbSearch.Name = "tbSearch";
this.tbSearch.Size = new System.Drawing.Size(144, 20);
this.tbSearch.TabIndex = 7;
this.tbSearch.TextChanged += new System.EventHandler(this.tbSearch_TextChanged);
//
// TagExplorer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.treeView);
this.Name = "TagExplorer";
this.Size = new System.Drawing.Size(272, 543);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TreeView treeView;
private System.Windows.Forms.ComboBox cbDisplayMode;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox cbSortMode;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ImageList imageList1;
private System.Windows.Forms.CheckBox cbCenterOnSelected;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Button btnClearSearch;
private System.Windows.Forms.TextBox tbSearch;
}
}

View file

@ -0,0 +1,486 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Types;
namespace CodeImp.DoomBuilder.TagExplorer
{
public partial class TagExplorer : UserControl
{
private const string DISPLAY_TAGS_AND_ACTIONS = "Tags and Actions";
private const string DISPLAY_TAGS = "Tags";
private const string DISPLAY_ACTIONS = "Actions";
private object[] DISPLAY_MODES = new object[] { DISPLAY_TAGS_AND_ACTIONS, DISPLAY_TAGS, DISPLAY_ACTIONS };
private const string SORT_BY_INDEX = "By Index";
private const string SORT_BY_TAG = "By Tag";
private const string SORT_BY_ACTION = "By Action";
private object[] SORT_MODES = new object[] { SORT_BY_INDEX, SORT_BY_TAG, SORT_BY_ACTION };
private const string CAT_THINGS = "Things:";
private const string CAT_SECTORS = "Sectors:";
private const string CAT_LINEDEFS = "Linedefs:";
private object[] CATEGORIES = new object[] { CAT_THINGS, CAT_SECTORS, CAT_LINEDEFS };
private const string defaultThingName = "Thing";
private const string defaultSectorName = "Sector";
private const string defaultLinedefName = "Linedef";
private Color commentColor = Color.DarkMagenta;
public TagExplorer() {
InitializeComponent();
treeView.LabelEdit = true;
cbDisplayMode.Items.AddRange(DISPLAY_MODES);
cbDisplayMode.SelectedIndex = General.Settings.ReadPluginSetting("displaymode", 0);
cbDisplayMode.SelectedIndexChanged += new EventHandler(cbDisplayMode_SelectedIndexChanged);
cbSortMode.Items.AddRange(SORT_MODES);
cbSortMode.SelectedIndex = General.Settings.ReadPluginSetting("sortmode", 0);
cbSortMode.SelectedIndexChanged += new EventHandler(cbSortMode_SelectedIndexChanged);
cbCenterOnSelected.Checked = General.Settings.ReadPluginSetting("centeronselected", false);
}
// Disposer
protected override void Dispose(bool disposing) {
General.Settings.WritePluginSetting("sortmode", cbSortMode.SelectedIndex);
General.Settings.WritePluginSetting("displaymode", cbDisplayMode.SelectedIndex);
General.Settings.WritePluginSetting("centeronselected", cbCenterOnSelected.Checked);
if (disposing && (components != null))
components.Dispose();
base.Dispose(disposing);
}
public void Setup() {
if (this.ParentForm != null)
this.ParentForm.Activated += ParentForm_Activated;
UpdateTree();
}
public void UpdateTree() {
treeView.Nodes.Clear();
bool showTags = (cbDisplayMode.SelectedItem.ToString() == DISPLAY_TAGS || cbDisplayMode.SelectedItem.ToString() == DISPLAY_TAGS_AND_ACTIONS);
bool showActions = (cbDisplayMode.SelectedItem.ToString() == DISPLAY_ACTIONS || cbDisplayMode.SelectedItem.ToString() == DISPLAY_TAGS_AND_ACTIONS);
bool hasComment = false;
string comment = "";
string serachStr = tbSearch.Text.ToLowerInvariant();
//add things
List<TreeNode> nodes = new List<TreeNode>();
ICollection<Thing> things = General.Map.Map.Things;
foreach (Thing t in things) {
if ((t.Tag > 0 && showTags) || (t.Action > 0 && showActions)) {
TreeNode node = new TreeNode(getThingName(t, ref hasComment, ref comment), 1, 1);
if (serachStr.Length == 0 || (hasComment && comment.ToLowerInvariant().IndexOf(serachStr) != -1)) {
node.Tag = new NodeInfo(t.Index, t.Action, t.Tag);
if (hasComment) node.ForeColor = commentColor;
nodes.Add(node);
}
}
}
//sort nodes
sort(ref nodes, cbSortMode.SelectedItem.ToString());
//add category
if (nodes.Count > 0) {
treeView.Nodes.Add(new TreeNode(CAT_THINGS, 0, 0, nodes.ToArray()));
}
//add sectors
nodes = new List<TreeNode>();
ICollection<Sector> sectors = General.Map.Map.Sectors;
foreach (Sector s in sectors) {
if ((s.Tag > 0 && showTags) || (s.Effect > 0 && showActions)) {
TreeNode node = new TreeNode(getSectorName(s, ref hasComment, ref comment), 3, 3);
if (serachStr.Length == 0 || (hasComment && comment.ToLowerInvariant().IndexOf(serachStr) != -1)) {
node.Tag = new NodeInfo(s.FixedIndex, s.Effect, s.Tag);
if (hasComment) node.ForeColor = commentColor;
nodes.Add(node);
}
}
}
//sort nodes
sort(ref nodes, cbSortMode.SelectedItem.ToString());
//add category
if (nodes.Count > 0)
treeView.Nodes.Add(new TreeNode(CAT_SECTORS, 2, 2, nodes.ToArray()));
//add linedefs
nodes = new List<TreeNode>();
ICollection<Linedef> linedefs = General.Map.Map.Linedefs;
foreach (Linedef l in linedefs) {
if ((l.Tag > 0 && showTags) || (l.Action > 0 && showActions)) {
TreeNode node = new TreeNode(getLinedefName(l, ref hasComment, ref comment), 5, 5);
if (serachStr.Length == 0 || (hasComment && comment.ToLowerInvariant().IndexOf(serachStr) != -1)) {
node.Tag = new NodeInfo(l.Index, l.Action, l.Tag);
if (hasComment) node.ForeColor = commentColor;
nodes.Add(node);
}
}
}
//sort nodes
sort(ref nodes, cbSortMode.SelectedItem.ToString());
//add category
if (nodes.Count > 0)
treeView.Nodes.Add(new TreeNode(CAT_LINEDEFS, 4, 4, nodes.ToArray()));
treeView.ExpandAll();
}
//sorting
private void sort(ref List<TreeNode> nodes, string sortMode) {
switch (sortMode) {
case SORT_BY_ACTION:
nodes.Sort(sortByAction);
break;
case SORT_BY_INDEX:
nodes.Sort(sortByIndex);
break;
case SORT_BY_TAG:
nodes.Sort(sortByTag);
break;
default://dbg
GZBuilder.GZGeneral.Trace("Got unknown sort mode: " + cbSortMode.SelectedItem.ToString());
break;
}
}
private int sortByAction(TreeNode t1, TreeNode t2) {
NodeInfo i1 = t1.Tag as NodeInfo;
NodeInfo i2 = t2.Tag as NodeInfo;
if (i1.Action > i2.Action) return 1;
else if (i1.Action == i2.Action) return 0;
else if (i1.Action == 0) return 1; //push items with no action to the end of the list
else return -1;
}
private int sortByTag(TreeNode t1, TreeNode t2) {
NodeInfo i1 = t1.Tag as NodeInfo;
NodeInfo i2 = t2.Tag as NodeInfo;
if (i1.Tag > i2.Tag) return 1;
else if (i1.Tag == i2.Tag) return 0;
else if (i1.Tag == 0) return 1; //push items with no tag to the end of the list
else return -1;
}
private int sortByIndex(TreeNode t1, TreeNode t2) {
NodeInfo i1 = t1.Tag as NodeInfo;
NodeInfo i2 = t2.Tag as NodeInfo;
if (i1.Index > i2.Index) return 1;
else if (i1.Index == i2.Index) return 0;
return -1;
}
//naming
private string getThingName(Thing t, ref bool hasComment, ref string comment) {
if(GZBuilder.GZGeneral.UDMF && t.Fields.ContainsKey("comment")){
comment = t.Fields["comment"].Value.ToString();
hasComment = true;
}else{
comment = defaultThingName;
hasComment = false;
}
return combineName(comment, t.Tag, t.Action, t.Index, cbSortMode.SelectedItem.ToString(), false, !hasComment);
}
private string getSectorName(Sector s, ref bool hasComment, ref string comment) {
if(GZBuilder.GZGeneral.UDMF && s.Fields.ContainsKey("comment")){
comment = s.Fields["comment"].Value.ToString();
hasComment = true;
}else{
comment = defaultSectorName;
hasComment = false;
}
return combineName(comment, s.Tag, s.Effect, s.FixedIndex, cbSortMode.SelectedItem.ToString(), true, !hasComment);
}
private string getLinedefName(Linedef l, ref bool hasComment, ref string comment) {
if(GZBuilder.GZGeneral.UDMF && l.Fields.ContainsKey("comment")){
comment = l.Fields["comment"].Value.ToString();
hasComment = true;
}else{
comment = defaultLinedefName;
hasComment = false;
}
return combineName(comment, l.Tag, l.Action, l.Index, cbSortMode.SelectedItem.ToString(), false, !hasComment);
}
private string combineName(string name, int tag, int action, int index, string sortMode, bool isSector, bool isDefaultName) {
string combinedName = "";
switch(sortMode){
case SORT_BY_ACTION:
combinedName = (action > 0 ? (isSector ? "Effect:" : "Action:") + action + "; " : "") + (tag > 0 ? "Tag:" + tag + "; " : "") + name + (isDefaultName ? " " + index : "");
break;
case SORT_BY_INDEX:
combinedName = index + (tag > 0 ? ": Tag:" + tag + "; " : ": ") + (action > 0 ? (isSector ? "Effect:" : "Action:") + action + "; " : "") + name;
break;
case SORT_BY_TAG:
combinedName = (tag > 0 ? "Tag:" + tag + "; " : "") + (action > 0 ? (isSector ? "Effect:" : "Action:") + action + "; " : "") + name + (isDefaultName ? " " + index : "");
break;
default:
combinedName = name;
break;
}
return combinedName;
}
private void setComment(UniFields fields, string comment) {
if (!fields.ContainsKey("comment"))
fields.Add("comment", new UniValue((int)UniversalType.String, comment));
else
fields["comment"].Value = comment;
}
private string getComment(UniFields fields) {
if (!fields.ContainsKey("comment"))
return "";
else
return fields["comment"].Value.ToString();
}
//EVENTS
private void cbDisplayMode_SelectedIndexChanged(object sender, EventArgs e) {
UpdateTree();
}
private void cbSortMode_SelectedIndexChanged(object sender, EventArgs e) {
UpdateTree();
}
private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
if (e.Node.Parent == null) return;
NodeInfo info = e.Node.Tag as NodeInfo;
if (e.Button == MouseButtons.Right) { //open element properties
switch (e.Node.Parent.Text) {
case CAT_THINGS:
Thing t = General.Map.Map.GetThingByIndex(info.Index);
if (t != null) General.Interface.ShowEditThings(new List<Thing>() { t });
break;
case CAT_SECTORS:
Sector s = General.Map.Map.GetSectorByIndex(info.Index);
if (s != null) General.Interface.ShowEditSectors(new List<Sector>() { s });
break;
case CAT_LINEDEFS:
Linedef l = General.Map.Map.GetLinedefByIndex(info.Index);
if (l != null) General.Interface.ShowEditLinedefs(new List<Linedef>() { l });
break;
default:
GZBuilder.GZGeneral.Trace("Got unknown category: " + e.Node.Parent.Text);
break;
}
General.Map.Map.Update();
UpdateTree();
} else { //focus on element
if (!cbCenterOnSelected.Checked) return;
switch (e.Node.Parent.Text) {
case CAT_THINGS:
Thing t = General.Map.Map.GetThingByIndex(info.Index);
if (t != null) General.Map.Renderer2D.PositionView(t.Position.x, t.Position.y);
break;
case CAT_SECTORS:
Sector s = General.Map.Map.GetSectorByIndex(info.Index);
if (s != null) General.Map.Renderer2D.PositionView(s.BBox.Location.X + s.BBox.Width / 2, s.BBox.Location.Y + s.BBox.Height / 2);
break;
case CAT_LINEDEFS:
Linedef l = General.Map.Map.GetLinedefByIndex(info.Index);
if (l != null) General.Map.Renderer2D.PositionView(l.Rect.Location.X + l.Rect.Width / 2, l.Rect.Location.Y + l.Rect.Height / 2);
break;
default:
GZBuilder.GZGeneral.Trace("Got unknown category: " + e.Node.Parent.Text);
break;
}
//update view
General.Interface.RedrawDisplay();
}
}
private void treeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) {
if (e.Node.Parent == null) return;
//edit comment
if (GZBuilder.GZGeneral.UDMF) {
//store current label...
NodeInfo info = e.Node.Tag as NodeInfo;
info.Label = e.Node.Text;
//if we don't have comment - clear text
switch (e.Node.Parent.Text) {
case CAT_THINGS:
Thing t = General.Map.Map.GetThingByIndex(info.Index);
if (t != null) e.Node.Text = getComment(t.Fields);
break;
case CAT_SECTORS:
Sector s = General.Map.Map.GetSectorByIndex(info.Index);
if (s != null) e.Node.Text = getComment(s.Fields);
break;
case CAT_LINEDEFS:
Linedef l = General.Map.Map.GetLinedefByIndex(info.Index);
if (l != null) e.Node.Text = getComment(l.Fields);
break;
default:
GZBuilder.GZGeneral.Trace("Got unknown category: " + e.Node.Parent.Text);
break;
}
//begin editing
e.Node.BeginEdit();
}
}
//map should be in UDMF format, or we wouldn't be here
private void treeView_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) {
NodeInfo info = e.Node.Tag as NodeInfo;
string comment = "";
e.CancelEdit = true;
e.Node.EndEdit(true);
//to set comment manually we actually have to cancel edit...
if (e.Label != null && e.Label.Length > 1) {
bool hasComment = false;
//apply comment
switch (e.Node.Parent.Text) {
case CAT_THINGS:
Thing t = General.Map.Map.GetThingByIndex(info.Index);
if (t != null) {
setComment(t.Fields, e.Label);
e.Node.Text = getThingName(t, ref hasComment, ref comment);
e.Node.ForeColor = hasComment ? commentColor : Color.Black;
}
break;
case CAT_SECTORS:
Sector s = General.Map.Map.GetSectorByIndex(info.Index);
if (s != null) {
setComment(s.Fields, e.Label);
e.Node.Text = getSectorName(s, ref hasComment, ref comment);
e.Node.ForeColor = hasComment ? commentColor : Color.Black;
}
break;
case CAT_LINEDEFS:
Linedef l = General.Map.Map.GetLinedefByIndex(info.Index);
if (l != null) {
setComment(l.Fields, e.Label);
e.Node.Text = getLinedefName(l, ref hasComment, ref comment);
e.Node.ForeColor = hasComment ? commentColor : Color.Black;
}
break;
default://dbg
GZBuilder.GZGeneral.Trace("Got unknown category: " + e.Node.Parent.Text);
break;
}
} else { //Edit cancelled. Remove comment
switch (e.Node.Parent.Text) {
case CAT_THINGS:
Thing t = General.Map.Map.GetThingByIndex(info.Index);
if (t != null) {
e.Node.Text = defaultThingName;
e.Node.ForeColor = Color.Black;
if (t.Fields.ContainsKey("comment")) t.Fields.Remove("comment");
}
break;
case CAT_SECTORS:
Sector s = General.Map.Map.GetSectorByIndex(info.Index);
if (s != null) {
e.Node.Text = defaultSectorName;
e.Node.ForeColor = Color.Black;
if (s.Fields.ContainsKey("comment")) s.Fields.Remove("comment");
}
break;
case CAT_LINEDEFS:
Linedef l = General.Map.Map.GetLinedefByIndex(info.Index);
if (l != null) {
e.Node.Text = defaultLinedefName;
e.Node.ForeColor = Color.Black;
if (l.Fields.ContainsKey("comment")) l.Fields.Remove("comment");
}
break;
}
}
}
//it is called every time a dialog window closes.
private void ParentForm_Activated(object sender, EventArgs e){
UpdateTree();
}
private void btnClearSearch_Click(object sender, EventArgs e) {
if (tbSearch.Text != "") {
tbSearch.Clear();
UpdateTree();
}
}
private void tbSearch_TextChanged(object sender, EventArgs e) {
if(tbSearch.Text.Length > 2) UpdateTree();
}
}
internal class NodeInfo
{
private int index;
private int action;
private int tag;
public int Index { get { return index; } }
public int Tag { get { return tag; } }
public int Action { get { return action; } }
public string Label; //holds TreeNode text while it's edited
public NodeInfo(int index, int action, int tag) {
this.index = index;
this.action = action;
this.tag = tag;
}
}
}

View file

@ -0,0 +1,233 @@
<?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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABo
FwAAAk1TRnQBSQFMAgEBBgEAARgBAAEYAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIBYAAxQBGQMUARkDFAEZNAADFAEZAxQBGQMUARmwAAMxAUwBBwFGAecB/wEH
ATIBoQH/AzEBTAMUARksAAMxAUwBswF0ASoB/wF+AU4BIAH/AzEBTAMUARmsAAEjAWMC/wEbAV0C/wEH
AT8BzgH/AQcBMgGhAf8DFAEZLAAB4AGHATIB/wHZAYYBMQH/AZ4BaAEnAf8BfgFOASAB/wMUARmsAAF3
AZsC/wHoAe8C/wEbAV0C/wEHAUYB5wH/AxQBGSwAAf4BtAFvAv8B/QHlAf8B2QGGATEB/wGzAXQBKgH/
AxQBGawAAzEBTAF3AZsC/wEjAWMC/wOJAf8DSwH/AyQBMygAAzEBTAH+AbQBbwH/AeABhwEyAf8BowGJ
AXQB/wNLAf8DJAEzsAADJAEzA7wB/wOBAf8DSwH/AyQBMwgAAyQBMwMkATMDJAEzGAADJAEzA7wB/wOB
Af8DSwH/AyQBMwgAAyQBMwMkATMDJAEznAADJAEzA80B/wOUAf8DSwH/AyQBMwMxAUwDSwH/A5QB/wMk
ATMcAAMkATMDzQH/A5QB/wNLAf8DJAEzAzEBTANLAf8DlAH/AyQBM6AAAyQBMwPNAf8DlAH/A0sB/wNL
Af8DlAH/AyQBMyQAAyQBMwPNAf8DlAH/A0sB/wNLAf8DlAH/AyQBM6gAAyQBMwO4Af8DlAH/A4EB/wMk
ATMsAAMkATMDuAH/A5QB/wOBAf8DJAEzsAADJAEzA88B/wOUAf8DSwH/AyQBMywAAyQBMwPPAf8DlAH/
A0sB/wMkATOwAAMkATMDwwH/A5QB/wNLAf8DJAEzLAADJAEzA8MB/wOUAf8DSwH/AyQBM7AAAyQBMwO8
Af8DlAH/A0sB/wMUARkDFAEZAxQBGSQAAyQBMwO8Af8DlAH/A0sB/wMUARkDFAEZAxQBGagAAyQBMwPZ
Af8DtwH/AQcBRgHnAf8BBwEyAaEB/wMxAUwDFAEZJAADJAEzA9kB/wHRAbcBnQH/AbMBdAEqAf8BfgFO
ASAB/wMxAUwDFAEZqAADJAEzASMBYwL/ARsBXQL/AQcBPwHOAf8BBwEyAaEB/wMUARkoAAMkATMB4AGH
ATIB/wHZAYYBMQH/AZ4BaAEnAf8BfgFOASAB/wMUARmsAAF3AZsC/wHoAe8C/wEbAV0C/wEHAUYB5wH/
AxQBGSwAAf4BtAFvAv8B/QHlAf8B2QGGATEB/wGzAXQBKgH/AxQBGawAAzEBTAF3AZsC/wEjAWMC/wMx
AUwwAAMxAUwB/gG0AW8B/wHgAYcBMgH/AzEBTJgAAwoBCwMhAS0DKAE7AygBOwMoATsDHwErAxMBGAMT
ARggAAMKAQsDIQEtAygBOwMoATsDKAE7Ax8BKwMTARgDEwEYEAADFAEZAxQBGQMUARkgAAMUARkDFAEZ
AxQBGQgAAxQBGQMUARkDFAEZIAADFAEZAxQBGQMUARkUAAM5AVwCYAFqAegBKQExAYEB/wEjASoBdwH/
ASIBKQF0Af8BIQEoAW0B/wFcAV0BYAHkAzkBXAMoATsDEwEYGAADOQFcAW4BZwFgAegBgQFcASkB/wF3
AVQBIwH/AXQBUgEiAf8BbQFNASEB/wFiAV4BXAHkAzkBXAMoATsDEwEYCAADMQFMASsBOgGyAf8BIQEu
AX0B/wMxAUwDFAEZAxQBGQMUARkDFAEZAxQBGQMUARkDFAEZAzEBTAErAToBsgH/ASEBLgF9Af8DMQFM
AxQBGQMxAUwBsgF0ASsB/wF9AU4BIQH/AzEBTAMUARkDFAEZAxQBGQMUARkDFAEZAxQBGQMUARkDMQFM
AbIBdAErAf8BfQFOASEB/wMxAUwDFAEZDAACXAFeAcUBOQFFAbsB/wE3AUMBvAH/ATYBQgG6Af8BNQFB
AbcB/wEzAT0BtAH/ATEBPAGsAf8BLAE0AZQB/wEiASoBdwH/A1sBvQMoATsDEwEYEAACXgFcAcUBuwGD
ATkB/wG8AYIBNwH/AboBgQE2Af8BtwGBATUB/wG0AYEBMwH/AawBegExAf8BlAFsASwB/wF3AVMBIgH/
A1sBvQMoATsDEwEYBAABNAFMAd8B/wEyAUYB2AH/AScBMwGdAf8BIQEuAX0B/wNEAf8DRAH/A0QB/wNE
Af8DRAH/A0QB/wNEAf8BNAFMAd8B/wEyAUYB2AH/AScBMwGdAf8BIQEuAX0B/wMUARkB3wGHATQB/wHY
AYYBMgH/AZ0BaAEnAf8BfQFOASEB/wNEAf8DRAH/A0QB/wNEAf8DRAH/A0QB/wNEAf8B3wGHATQB/wHY
AYYBMgH/AZ0BaAEnAf8BfQFOASEB/wMUARkIAANcAb4BPgFLAdMB/wFDAVIB6AH/AUcBVQHzAf8BRgFV
AfAB/wFFAVUB7wH/AUUBVQHvAf8BRAFSAe0B/wFBAVAB4gH/ATcBQwG7Af8BJwEuAYEB/wNbAb0DKAE7
AxMBGAgAAlwBWgG+AdMBkwE+Af8B6AGhAUMB/wHzAaoBRwH/AfABpwFGAf8B7wGlAUUB/wHvAaUBRQH/
Ae0BpQFEAf8B4gGcAUEB/wG7AYIBNwH/AYEBXgEnAf8DWwG9AygBOwMTARgBcAGBAf0B/wHsAeUC/wEy
AUYB2AH/ASsBOgGyAf8DuAH/A7gB/wO4Af8DuAH/A7gB/wOmAf8DmAH/AXABgQH9Af8B7AHlAv8BMgFG
AdgB/wErAToBsgH/AxQBGQH9AbQBcAL/Af0B5QH/AdgBhgEyAf8BsgF0ASsB/wO4Af8DuAH/A7gB/wO4
Af8DuAH/A6YB/wOYAf8B/QG0AXAC/wH9AeUB/wHYAYYBMgH/AbIBdAErAf8DFAEZBAADOQFcAUcBVQHj
Af8BRgFUAfEB/wE2AUEBswH/ATQBPwGrAf8BRAFSAeoB/wFJAVkB+gH/AUgBVwH2Af8BRgFUAfEB/wFG
AVUB8AH/AUMBUQHqAf8BNgFBAb4B/wEmASwBgQH/AzkBXAMTARgEAAM5AVwB4wGgAUcB/wHxAagBRgH/
AbMBgQE2Af8BqwF7ATQB/wHqAaMBRAH/AfoBrgFJAf8B9gGsAUgB/wHxAagBRgH/AfABpwFGAf8B6gGj
AUMB/wG+AYQBNgH/AYEBXQEmAf8DOQFcAxMBGAMxAUwBcAGBAf0B/wE0AUwB3wH/AzEBTAwAA7gB/wNP
AZkIAAMxAUwBcAGBAf0B/wE0AUwB3wH/AzEBTAQAAzEBTAH9AbQBcAH/Ad8BhwE0Af8DMQFMDAADuAH/
A08BmQgAAzEBTAH9AbQBcAH/Ad8BhwE0Af8DMQFMCAACYQFoAdsBVgFkAfYB/wFQAV8C/wE2AUEBsQH/
AwcB/wEPAREBKwH/ASQBKwF3Af8BOwFGAcIB/wFGAVYB8QH/AUkBWQH6Af8BRwFXAfQB/wFAAU4B5AH/
ATEBPAGsAf8CXQFlAecDHwErBAABagFmAWEB2wH2AbEBVgL/AbQBUAH/AbEBfwE2Af8DBwH/ASsBIAEP
Af8BdwFUASQB/wHCAYgBOwH/AfEBpwFGAf8B+gGuAUkB/wH0AakBRwH/AeQBngFAAf8BrAF6ATEB/wFl
AWIBXQHnAx8BKwQAA5gB/wNLAf8DFAEZDAADpQH/A08BmQwAA5gB/wNEAf8DFAEZCAADmAH/A0sB/wMU
ARkMAAOlAf8DTwGZDAADmAH/A0QB/wMUARkIAAFTAWEC/wFrAXkC/wFaAWcB+wH/AUwBWgHoAf8BDwEQ
ASEB/wMHAf8DBwH/AwcB/wETARYBOgH/ASkBMQGEAf8BPQFJAc4B/wFFAVQB7wH/ATsBRwHMAf8BKgEz
AYoB/wMoATsEAAH/AbYBUwL/Ab4BawH/AfsBtwFaAf8B6AGlAUwB/wEhARoBDwH/AwcB/wMHAf8DBwH/
AToBKgETAf8BhAFgASkB/wHOAZABPQH/Ae8BpgFFAf8BzAGOATsB/wGKAWQBKgH/AygBOwQAA6YB/wNL
Af8DFAEZIAADpgH/A0QB/wMUARkIAAOmAf8DSwH/AxQBGSAAA6YB/wNEAf8DFAEZBAADJAEzAWYBcwL/
AXwBhAL/AWQBcAH5Af8BVgFlAfwB/wEnAS8BfAH/AwcB/wMHAf8DBwH/AQ0BDgEUAf8BIAEnAWYB/wEw
ATkBnQH/AUMBUAHkAf8BQAFPAeEB/wEtATYBnAH/AygBOwMkATMB/wG9AWYC/wHGAXwB/wH5AboBZAH/
AfwBtAFWAf8BfAFYAScB/wMHAf8DBwH/AwcB/wEUAREBDQH/AWYBSAEgAf8BnQFyATAB/wHkAaABQwH/
AeEBmwFAAf8BnAFwAS0B/wMoATsEAAOwAf8DSwH/A08BmQNPAZkUAANPAZkDTwGZA7AB/wNEAf8DFAEZ
CAADsAH/A0sB/wNPAZkDTwGZFAADTwGZA08BmQOwAf8DRAH/AxQBGQQAAyQBMwFwAX0C/wGBAYwC/wFl
AXMB+AH/AVQBZAH7Af8BPAFIAcsB/wIIAQoB/wMHAf8DBwH/ARkBHQFMAf8BSQFYAfkB/wFJAVkB+gH/
AUYBVQHwAf8BQAFOAeMB/wEuATgBogH/AygBOwMkATMB/wHBAXAC/wHKAYEB/wH4AbgBZQH/AfsBsgFU
Af8BywGOATwB/wEKAQkBCAH/AwcB/wMHAf8BTAE3ARkB/wH5Aa4BSQH/AfoBrgFJAf8B8AGnAUYB/wHj
AZ0BQAH/AaIBdAEuAf8DKAE7BAADuAH/A7gB/wO4Af8DpQH/FAADpQH/A7gB/wO4Af8DRAH/AxQBGQgA
A7gB/wO4Af8DuAH/A6UB/xQAA6UB/wO4Af8DuAH/A0QB/wMUARkIAAFuAX0C/wGOAZcC/wFtAXgB/gH/
AVYBZQH1Af8BTAFaAfgB/wEYAR0BTAH/AQoBCQELAf8BJQEtAXsB/wMHAf8BHAEiAVsB/wFGAVUB8AH/
AUcBVQHzAf8BPgFMAdoB/wEwATkBnwH/AyMBMQQAAf8BvwFuAv8B0AGOAf8B/gHBAW0B/wH1AbABVgH/
AfgBrwFMAf8BTAE2ARgB/wILAQkB/wF7AVYBJQH/AwcB/wFbAUABHAH/AfABpwFGAf8B8wGqAUcB/wHa
AZcBPgH/AZ8BdAEwAf8DIwExBAADuAH/A0sB/wMUARkgAAO4Af8DRAH/AxQBGQgAA7gB/wNLAf8DFAEZ
IAADuAH/A0QB/wMUARkIAAJmAWkB2wGWAaAC/wGGAZAC/wFuAXsB+QH/AVkBZwH+Af8BMQE7AZ0B/wEX
ARwBSAH/AUsBWwL/AS8BOAGYAf8DBwH/ARwBIgFbAf8BRQFUAe0B/wE+AUsB1QH/Al0BbwHqAw0BEAQA
AWoBZgFhAdsB/wHSAZYC/wHMAYYB/wH5AbwBbgH/Af4BuAFZAf8BnQFyATEB/wFIATMBFwL/AbIBSwH/
AZgBbwEvAf8DBwH/AVsBQAEcAf8B7QGlAUUB/wHVAZQBPgH/AXABZwFbAeoDDQEQBAADuAH/A0sB/wMU
ARkgAAO4Af8DRAH/AxQBGQgAA7gB/wNLAf8DFAEZIAADuAH/A0QB/wMUARkIAAM5AVwBmAGiAv8BngGn
Av8BdwGBAv8BYwFwAfkB/wFOAVkB5AH/AT8BSgG+Af8BTwFfAfgB/wFRAV8B/QH/ATgBQAGcAf8DBwH/
ATUBPwGxAf8BQQFOAd4B/wM5AVwIAAM5AVwB/wHTAZgC/wHWAZ4C/wHFAXcB/wH5AbkBYwH/AeQBpQFO
Af8BvgGHAT8B/wH4Aa4BTwH/Af0BtAFRAf8BnAF1ATgB/wMHAf8BsQGAATUB/wHeAZsBQQH/AzkBXAgA
A7gB/wNLAf8DFAEZDAADpQH/A08BmQwAA7gB/wNEAf8DFAEZCAADuAH/A0sB/wMUARkMAAOlAf8DTwGZ
DAADuAH/A0QB/wMUARkMAANYAbIBqAGxAv8BiQGTAv8BfQGDAv8BdAGAAfwB/wFpAXUB9gH/AWMBbwH2
Af8BYgFuAfUB/wFeAWsB+wH/AUEBSwHCAf8BQgFQAeAB/wJcAV8BxhAAA1gBsgH/AdkBqAL/Ac4BiQL/
AcgBfQH/AfwBwQF0Af8B9gG5AWkB/wH2AbcBYwH/AfUBtgFiAf8B+wG4AV4B/wHCAYsBQQH/AeABnAFC
Af8CXwFcAcYIAAMxAUwBKwE6AbIB/wEhAS4BfQH/AzEBTAMUARkDFAEZAxQBGQO4Af8DTwGZAxQBGQMU
ARkDMQFMASsBOgGyAf8BIQEuAX0B/wMxAUwDFAEZAzEBTAGyAXQBKwH/AX0BTgEhAf8DMQFMAxQBGQMU
ARkDFAEZA7gB/wNPAZkDFAEZAxQBGQMxAUwBsgF0ASsB/wF9AU4BIQH/AzEBTAMUARkMAANZAbEBnwGp
Av8BlwGiAv8BiwGVAv8BeAGCAv8BZgF1Af0B/wFcAWkB+QH/AVABXwH3Af8BSQFZAfoB/wFdAVsBXQG9
GAADWQGxAf8B1QGfAv8B0QGXAv8BzwGLAv8BwwF4Af8B/QG6AWYB/wH5AbYBXAH/AfcBrwFQAf8B+gGt
AUkB/wJdAVsBvQwAATQBTAHfAf8BMgFGAdgB/wEnATMBnQH/ASEBLgF9Af8DSwH/A0sB/wNLAf8DuAH/
A0sB/wNLAf8DSwH/ATQBTAHfAf8BMgFGAdgB/wEnATMBnQH/ASEBLgF9Af8DFAEZAd8BhwE0Af8B2AGG
ATIB/wGdAWgBJwH/AX0BTgEhAf8DSwH/A0sB/wNLAf8DuAH/A0sB/wNLAf8DSwH/Ad8BhwE0Af8B2AGG
ATIB/wGdAWgBJwH/AX0BTgEhAf8DFAEZEAADOQFcA2UB2AF/AYcC/wGDAY0C/wF4AYMC/wFjAXEC/wJg
AWUB2AM5AVwgAAM5AVwBZwFlAWMB2AH/AccBfwL/AcwBgwL/AcIBeAL/AbwBYwH/AmUBYAHYAzkBXBAA
AXABgQH9Af8B7AHlAv8BMgFGAdgB/wErAToBsgH/A7gB/wO4Af8DuAH/A7gB/wO4Af8DpgH/A5gB/wFw
AYEB/QH/AewB5QL/ATIBRgHYAf8BKwE6AbIB/wMUARkB/QG0AXAC/wH9AeUB/wHYAYYBMgH/AbIBdAEr
Af8DuAH/A7gB/wO4Af8DuAH/A7gB/wOmAf8DmAH/Af0BtAFwAv8B/QHlAf8B2AGGATIB/wGyAXQBKwH/
AxQBGRwAAyQBMwMkATM4AAMkATMDJAEzHAADMQFMAXABgQH9Af8BNAFMAd8B/wMxAUwcAAMxAUwBcAGB
Af0B/wE0AUwB3wH/AzEBTAQAAzEBTAH9AbQBcAH/Ad8BhwE0Af8DMQFMHAADMQFMAf0BtAFwAf8B3wGH
ATQB/wMxAUwEAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/AQABjwH/AY8B/wQA
AQcB/wEHAf8EAAEHAf8BBwH/BAABBwH/AQcB/wQAAQMB/wEDAf8EAAHBAY8BwQGPBAAB4AEPAeABDwQA
AfABHwHwAR8EAAH4AT8B+AE/BAAB/AEfAfwBHwQAAf4BDwH+AQ8EAAH/AQEB/wEBBAAB/wGAAf8BgAQA
Af8BwAH/AcAEAAH/AeAB/wHgBAAB/wHhAf8B4QQAAfgBBwH4AQcBjwHxAY8B8QHwAQMB8AEDBAAB4AEB
AeABAQQAAcABAAHABQABgAEAAYABAAEOAWEBDgFhAYABAAGAAQABjgFxAY4BcQGAAQABgAEAAY8B8QGP
AfEEAAGHAcEBhwHBBAABhwHBAYcBwQGAAQABgAEAAY8B8QGPAfEBgAEAAYABAAGPAfEBjwHxAYABAQGA
AQEBjgFxAY4BcQHAAQMBwAEDBAAB4AEHAeABBwQAAfABDwHwAQ8EAAH+AX8B/gF/AQ8B4QEPAeEL
</value>
</data>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>122, 17</value>
</metadata>
</root>

View file

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Управление общими сведениями о сборке осуществляется с помощью
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
// связанные со сборкой.
[assembly: AssemblyTitle("TagExplorer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TagExplorer")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми
// для COM-компонентов. Если требуется обратиться к типу в этой сборке через
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
[assembly: ComVisible(false)]
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("053f5efd-fcd9-4fa4-9107-2383a7eef971")]
// Сведения о версии сборки состоят из следующих четырех значений:
//
// Основной номер версии
// Дополнительный номер версии
// Номер построения
// Редакция
//
// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View file

@ -0,0 +1,70 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:2.0.50727.3607
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace CodeImp.DoomBuilder.TagExplorer.Properties {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
// с помощью такого средства, как ResGen или Visual Studio.
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
// с параметром /str или перестройте свой проект VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CodeImp.DoomBuilder.TagExplorer.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static System.Drawing.Bitmap SearchClear {
get {
object obj = ResourceManager.GetObject("SearchClear", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View file

@ -0,0 +1,124 @@
<?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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="SearchClear" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SearchClear.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

View file

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{BE7917F3-E6FE-4D5B-8FA9-B8E7668AC731}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CodeImp.DoomBuilder.TagExplorer</RootNamespace>
<AssemblyName>TagExplorer</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\..\Build\Plugins\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\..\Build\Plugins\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="BuilderPlug.cs" />
<Compile Include="Controls\TagExplorer.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Controls\TagExplorer.Designer.cs">
<DependentUpon>TagExplorer.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Core\Builder.csproj">
<Project>{818B3D10-F791-4C3F-9AF5-BB2D0079B63C}</Project>
<Name>Builder</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Controls\TagExplorer.resx">
<DependentUpon>TagExplorer.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Content Include="Resources\Lines.png" />
<Content Include="Resources\LinesGroup.png" />
<None Include="Resources\SearchClear.png" />
<Content Include="Resources\Sectors.png" />
<Content Include="Resources\SectorsGroup.png" />
<Content Include="Resources\Things.png" />
<Content Include="Resources\ThingsGroup.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>