Commits

Kamyar Inanloo committed 944d24a

First version! Add ability.

  • Participants

Comments (0)

Files changed (24)

+ďťż
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TracVS", "TracVS\TracVS.csproj", "{F90F9D7D-C14C-439D-B968-B4E2CDE1E475}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{F90F9D7D-C14C-439D-B968-B4E2CDE1E475}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F90F9D7D-C14C-439D-B968-B4E2CDE1E475}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F90F9D7D-C14C-439D-B968-B4E2CDE1E475}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F90F9D7D-C14C-439D-B968-B4E2CDE1E475}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

TracVS/AssemblyInfo.cs

Binary file added.

TracVS/Connect.cs

Binary file added.
+ďťż#region GPL Licence
+/**********************************************************************
+ TracExplorer - Trac Integration for Visual Studio and TortoiseSvn
+ Copyright (C) 2008 Mladen Mihajlovic
+ http://tracexplorer.devjavu.com/
+ 
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ 
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 
+**********************************************************************
+ XML-RPC.NET Copyright (c) 2006 Charles Cook
+**********************************************************************/
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using CookComputing.XmlRpc;
+
+namespace TracVS
+{
+    #region MulticallItem
+    public struct MulticallItem
+    {
+        public string methodName;
+        public string[] @params;
+
+        public MulticallItem(string methodName, string[] @params)
+        {
+            this.methodName = methodName;
+            this.@params = @params;
+        }
+    }
+
+    #endregion
+
+    #region PageInfo
+    public struct PageInfo
+    {
+        public DateTime lastModified;
+        public int version;
+        public string name;
+        public string author;
+    }
+    #endregion
+
+    #region ComponentInfo
+    public struct ComponentInfo
+    {
+        public string owner;
+        public string name;
+        public string description;
+    }
+    #endregion
+
+    /// <summary>
+    /// XMLRPC Trac proxy for ver 0.2
+    /// </summary>
+    public interface ITrac : IXmlRpcProxy
+    {
+        #region Wiki
+        [XmlRpcMethod("wiki.getRecentChanges")] //TODO:Check what struct when the api starts working
+        object getRecentChanges(DateTime since);
+
+        [XmlRpcMethod("wiki.getRPCVersionSupported")]
+        int getRPCVersionSupported();
+
+        [XmlRpcMethod("wiki.getPage")]
+        string getPage(string pagename, int version);
+
+        [XmlRpcMethod("wiki.getPage")]
+        string getPage(string pagename);
+
+        [XmlRpcMethod("wiki.getPageVersion")]
+        string getPageVersion(string pagename, int version);
+
+        [XmlRpcMethod("wiki.getPageVersion")]
+        string getPageVersion(string pagename);
+
+        [XmlRpcMethod("wiki.getPageHTML")]
+        string getPageHTML(string pagename, int version);
+
+        [XmlRpcMethod("wiki.getPageHTML")]
+        string getPageHTML(string pagename);
+
+        [XmlRpcMethod("wiki.getAllPages")]
+        string[] getAllPages();
+
+        [XmlRpcMethod("wiki.getPageInfo")]
+        PageInfo getPageInfo(string pagename, int version);
+
+        [XmlRpcMethod("wiki.getPageInfo")]
+        PageInfo getPageInfo(string pagename);
+
+        [XmlRpcMethod("wiki.getPageInfoVersion")]
+        PageInfo getPageInfoVersion(string pagename, int version);
+
+        [XmlRpcMethod("wiki.getPageInfoVersion")]
+        PageInfo getPageInfoVersion(string pagename);
+
+        //[XmlRpcMethod("wiki.putPage")]
+        //bool wiki.putPage(string pagename, string content, struct attributes);
+
+        [XmlRpcMethod("wiki.listAttachments")]
+        string[] listAttachments(string pagename);
+
+        [XmlRpcMethod("wiki.getAttachment")]
+        Byte[] getAttachment(string path);
+
+        [XmlRpcMethod("wiki.putAttachment")]
+        bool putAttachment(string path, byte[] data);
+
+        [XmlRpcMethod("wiki.putAttachmentEx")]
+        bool putAttachmentEx(string pagename, string filename, string description, byte[] data, bool replace);
+
+        [XmlRpcMethod("wiki.putAttachmentEx")]
+        bool putAttachmentEx(string pagename, string filename, string description, byte[] data); // replace = true
+
+        [XmlRpcMethod("wiki.listLinks")]
+        string[] listLinks(string pagename);
+
+        [XmlRpcMethod("wiki.wikiToHtml")]
+        string wikiToHtml(string text);
+        #endregion
+
+        #region Search
+        [XmlRpcMethod("search.getSearchFilters")]
+        object[] getSearchFilters();
+
+        [XmlRpcMethod("search.performSearch")] // results: array(array(href, title, date, author, excerpt))
+        object[] performSearch(string query, string[] filters);
+
+        [XmlRpcMethod("search.performSearch")]
+        object[] performSearch(string query);
+        #endregion
+
+        #region Ticket Milestones
+        [XmlRpcMethod("ticket.milestone.getAll")]
+        string[] getAllMilestones();
+
+        [XmlRpcMethod("ticket.milestone.get")]
+        object getMilestone(string name);
+        #endregion
+
+        #region Ticket Severity
+        [XmlRpcMethod("ticket.severity.getAll")]
+        string[] getAllSeverities();
+
+        [XmlRpcMethod("ticket.severity.get")]
+        string getSeverity(string name);
+        #endregion
+
+        #region Ticket Type
+        [XmlRpcMethod("ticket.type.getAll")]
+        string[] getAllTicketTypes();
+
+        [XmlRpcMethod("ticket.type.get")]
+        string getTicketType(string name);
+        #endregion
+
+        #region Ticket Resolution
+        [XmlRpcMethod("ticket.resolution.getAll")]
+        string[] getAllResolutions();
+
+        [XmlRpcMethod("ticket.resolution.get")]
+        string getTicketResolution(string name);
+        #endregion
+
+        #region Ticket Priority
+        [XmlRpcMethod("ticket.priority.getAll")]
+        string[] getAllPriorities();
+
+        [XmlRpcMethod("ticket.priority.get")]
+        string getPriority(string name);
+        #endregion
+
+        #region Ticket Component
+        [XmlRpcMethod("ticket.component.getAll")]
+        string[] getAllComponents();
+
+        [XmlRpcMethod("ticket.component.get")]
+        ComponentInfo getComponent(string name);
+        #endregion
+
+        #region Ticket Version
+        [XmlRpcMethod("ticket.version.getAll")]
+        string[] getAllVersions();
+
+        [XmlRpcMethod("ticket.version.get")]
+        ComponentInfo getVersion(string name);
+        #endregion
+
+        #region Tickets
+        [XmlRpcMethod("ticket.query")]//array ticket.query(string qstr="status!=closed")
+        int[] queryTickets(string queryString);
+
+        [XmlRpcMethod("ticket.get")]
+        object[] getTicket(int id);
+
+        [XmlRpcMethod("ticket.create")]
+        int createTicket(string summary, string description, XmlRpcStruct attributes);
+
+        [XmlRpcMethod("ticket.update")]
+        object[] updateTicket(int id, string comment, XmlRpcStruct attributes);
+
+        #endregion
+
+        #region System
+        [XmlRpcMethod("system.multicall")]
+        object[] multicall(MulticallItem[] signatures);
+
+        [XmlRpcMethod("system.listMethods")]
+        string[] listMethods();
+
+        [XmlRpcMethod("system.methodHelp")]
+        string methodHelp(string method);
+
+        [XmlRpcMethod("system.methodSignature")]
+        object[] methodSignature(string method);
+
+        [XmlRpcMethod("system.getAPIVersion")]
+        object[] getAPIVersion();
+        #endregion
+
+        #region Async
+        [XmlRpcBegin("system.getAPIVersion")]
+        IAsyncResult BeginGetAPIVersion();
+
+        [XmlRpcEnd]
+        object[] EndGetAPIVersion(IAsyncResult iasr);
+        #endregion
+    }
+}

TracVS/Logon.Designer.cs

+ďťżnamespace TracVS
+{
+    partial class Logon
+    {
+        /// <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.lbUsername = new System.Windows.Forms.Label();
+            this.txtUsername = new System.Windows.Forms.TextBox();
+            this.lbUri = new System.Windows.Forms.Label();
+            this.txtUri = new System.Windows.Forms.TextBox();
+            this.lbPassword = new System.Windows.Forms.Label();
+            this.txtPassword = new System.Windows.Forms.TextBox();
+            this.chkAuthentication = new System.Windows.Forms.CheckBox();
+            this.btnOk = new System.Windows.Forms.Button();
+            this.btnCancel = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            // 
+            // lbUsername
+            // 
+            this.lbUsername.AutoSize = true;
+            this.lbUsername.Location = new System.Drawing.Point(44, 102);
+            this.lbUsername.Name = "lbUsername";
+            this.lbUsername.Size = new System.Drawing.Size(61, 13);
+            this.lbUsername.TabIndex = 0;
+            this.lbUsername.Text = "Username :";
+            // 
+            // txtUsername
+            // 
+            this.txtUsername.Location = new System.Drawing.Point(111, 99);
+            this.txtUsername.Name = "txtUsername";
+            this.txtUsername.Size = new System.Drawing.Size(100, 20);
+            this.txtUsername.TabIndex = 3;
+            this.txtUsername.Text = "K.Inanloo";
+            // 
+            // lbUri
+            // 
+            this.lbUri.AutoSize = true;
+            this.lbUri.Location = new System.Drawing.Point(44, 49);
+            this.lbUri.Name = "lbUri";
+            this.lbUri.Size = new System.Drawing.Size(26, 13);
+            this.lbUri.TabIndex = 0;
+            this.lbUri.Text = "Uri :";
+            // 
+            // txtUri
+            // 
+            this.txtUri.Location = new System.Drawing.Point(111, 46);
+            this.txtUri.Name = "txtUri";
+            this.txtUri.Size = new System.Drawing.Size(226, 20);
+            this.txtUri.TabIndex = 1;
+            this.txtUri.Text = "http://trac.samasoft.ir/sama90/login/rpc";
+            // 
+            // lbPassword
+            // 
+            this.lbPassword.AutoSize = true;
+            this.lbPassword.Location = new System.Drawing.Point(44, 128);
+            this.lbPassword.Name = "lbPassword";
+            this.lbPassword.Size = new System.Drawing.Size(59, 13);
+            this.lbPassword.TabIndex = 0;
+            this.lbPassword.Text = "Password :";
+            // 
+            // txtPassword
+            // 
+            this.txtPassword.Location = new System.Drawing.Point(111, 125);
+            this.txtPassword.Name = "txtPassword";
+            this.txtPassword.PasswordChar = '*';
+            this.txtPassword.Size = new System.Drawing.Size(100, 20);
+            this.txtPassword.TabIndex = 4;
+            this.txtPassword.Text = "&&Erlang&&";
+            // 
+            // chkAuthentication
+            // 
+            this.chkAuthentication.AutoSize = true;
+            this.chkAuthentication.Checked = true;
+            this.chkAuthentication.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.chkAuthentication.Location = new System.Drawing.Point(47, 72);
+            this.chkAuthentication.Name = "chkAuthentication";
+            this.chkAuthentication.Size = new System.Drawing.Size(128, 17);
+            this.chkAuthentication.TabIndex = 2;
+            this.chkAuthentication.Text = "Needs Authentication";
+            this.chkAuthentication.UseVisualStyleBackColor = true;
+            this.chkAuthentication.CheckedChanged += new System.EventHandler(this.chkAuthentication_CheckedChanged);
+            // 
+            // btnOk
+            // 
+            this.btnOk.Location = new System.Drawing.Point(78, 159);
+            this.btnOk.Name = "btnOk";
+            this.btnOk.Size = new System.Drawing.Size(75, 23);
+            this.btnOk.TabIndex = 5;
+            this.btnOk.Text = "Ok";
+            this.btnOk.UseVisualStyleBackColor = true;
+            this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
+            // 
+            // btnCancel
+            // 
+            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.btnCancel.Location = new System.Drawing.Point(216, 159);
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.Size = new System.Drawing.Size(75, 23);
+            this.btnCancel.TabIndex = 6;
+            this.btnCancel.Text = "Cancel";
+            this.btnCancel.UseVisualStyleBackColor = true;
+            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+            // 
+            // Logon
+            // 
+            this.AcceptButton = this.btnOk;
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.CancelButton = this.btnCancel;
+            this.ClientSize = new System.Drawing.Size(410, 194);
+            this.Controls.Add(this.btnCancel);
+            this.Controls.Add(this.btnOk);
+            this.Controls.Add(this.chkAuthentication);
+            this.Controls.Add(this.txtPassword);
+            this.Controls.Add(this.lbPassword);
+            this.Controls.Add(this.txtUri);
+            this.Controls.Add(this.lbUri);
+            this.Controls.Add(this.txtUsername);
+            this.Controls.Add(this.lbUsername);
+            this.Name = "Logon";
+            this.Text = "Logon";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label lbUsername;
+        private System.Windows.Forms.TextBox txtUsername;
+        private System.Windows.Forms.Label lbUri;
+        private System.Windows.Forms.TextBox txtUri;
+        private System.Windows.Forms.Label lbPassword;
+        private System.Windows.Forms.TextBox txtPassword;
+        private System.Windows.Forms.CheckBox chkAuthentication;
+        private System.Windows.Forms.Button btnOk;
+        private System.Windows.Forms.Button btnCancel;
+    }
+}
+ďťż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 System.Net;
+
+namespace TracVS
+{
+    public partial class Logon : Form
+    {
+        public NetworkCredential Credential
+        {
+            get;
+            set;
+        }
+
+        public string Uri
+        {
+            get;
+            set;
+        }
+        
+        public Logon()
+        {
+            InitializeComponent();
+        }
+
+        private void btnOk_Click(object sender, EventArgs e)
+        {
+            if (chkAuthentication.Checked)
+            {
+                this.Credential = new NetworkCredential(txtUsername.Text, txtPassword.Text);
+            }
+            this.Uri = txtUri.Text;
+            this.DialogResult = DialogResult.OK;
+            this.Close();
+        }
+
+        private void btnCancel_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = DialogResult.Cancel;
+            this.Close();
+        }
+
+        private void chkAuthentication_CheckedChanged(object sender, EventArgs e)
+        {
+            lbUsername.Enabled = lbPassword.Enabled = txtUsername.Enabled = txtPassword.Enabled = chkAuthentication.Checked;
+        }
+    }
+}

TracVS/Logon.resx

+ďťż<?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>

TracVS/NewTicket.Designer.cs

+ďťżnamespace TracVS
+{
+    partial class NewTicket
+    {
+        /// <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.lbSummary = new System.Windows.Forms.Label();
+            this.txtSummary = new System.Windows.Forms.TextBox();
+            this.lbDescription = new System.Windows.Forms.Label();
+            this.txtDescription = new System.Windows.Forms.TextBox();
+            this.lbComponent = new System.Windows.Forms.Label();
+            this.cmbComponent = new System.Windows.Forms.ComboBox();
+            this.lbVersion = new System.Windows.Forms.Label();
+            this.cmbVersion = new System.Windows.Forms.ComboBox();
+            this.lbSeverity = new System.Windows.Forms.Label();
+            this.cmbSeverity = new System.Windows.Forms.ComboBox();
+            this.lbPriority = new System.Windows.Forms.Label();
+            this.cmbPriority = new System.Windows.Forms.ComboBox();
+            this.btnOk = new System.Windows.Forms.Button();
+            this.btnCancel = new System.Windows.Forms.Button();
+            this.gbRequired = new System.Windows.Forms.GroupBox();
+            this.gbOptional = new System.Windows.Forms.GroupBox();
+            this.lbType = new System.Windows.Forms.Label();
+            this.cmbType = new System.Windows.Forms.ComboBox();
+            this.gbRequired.SuspendLayout();
+            this.gbOptional.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // lbSummary
+            // 
+            this.lbSummary.AutoSize = true;
+            this.lbSummary.Location = new System.Drawing.Point(31, 32);
+            this.lbSummary.Name = "lbSummary";
+            this.lbSummary.Size = new System.Drawing.Size(56, 13);
+            this.lbSummary.TabIndex = 0;
+            this.lbSummary.Text = "Summary :";
+            // 
+            // txtSummary
+            // 
+            this.txtSummary.Location = new System.Drawing.Point(104, 29);
+            this.txtSummary.Name = "txtSummary";
+            this.txtSummary.Size = new System.Drawing.Size(516, 20);
+            this.txtSummary.TabIndex = 1;
+            // 
+            // lbDescription
+            // 
+            this.lbDescription.AutoSize = true;
+            this.lbDescription.Location = new System.Drawing.Point(31, 69);
+            this.lbDescription.Name = "lbDescription";
+            this.lbDescription.Size = new System.Drawing.Size(66, 13);
+            this.lbDescription.TabIndex = 0;
+            this.lbDescription.Text = "Description :";
+            // 
+            // txtDescription
+            // 
+            this.txtDescription.Location = new System.Drawing.Point(104, 69);
+            this.txtDescription.Multiline = true;
+            this.txtDescription.Name = "txtDescription";
+            this.txtDescription.Size = new System.Drawing.Size(516, 158);
+            this.txtDescription.TabIndex = 2;
+            // 
+            // lbComponent
+            // 
+            this.lbComponent.AutoSize = true;
+            this.lbComponent.Location = new System.Drawing.Point(31, 31);
+            this.lbComponent.Name = "lbComponent";
+            this.lbComponent.Size = new System.Drawing.Size(67, 13);
+            this.lbComponent.TabIndex = 0;
+            this.lbComponent.Text = "Component :";
+            // 
+            // cmbComponent
+            // 
+            this.cmbComponent.FormattingEnabled = true;
+            this.cmbComponent.Location = new System.Drawing.Point(104, 28);
+            this.cmbComponent.Name = "cmbComponent";
+            this.cmbComponent.Size = new System.Drawing.Size(161, 21);
+            this.cmbComponent.TabIndex = 3;
+            // 
+            // lbVersion
+            // 
+            this.lbVersion.AutoSize = true;
+            this.lbVersion.Location = new System.Drawing.Point(33, 71);
+            this.lbVersion.Name = "lbVersion";
+            this.lbVersion.Size = new System.Drawing.Size(48, 13);
+            this.lbVersion.TabIndex = 0;
+            this.lbVersion.Text = "Version :";
+            // 
+            // cmbVersion
+            // 
+            this.cmbVersion.FormattingEnabled = true;
+            this.cmbVersion.Location = new System.Drawing.Point(104, 68);
+            this.cmbVersion.Name = "cmbVersion";
+            this.cmbVersion.Size = new System.Drawing.Size(82, 21);
+            this.cmbVersion.TabIndex = 3;
+            // 
+            // lbSeverity
+            // 
+            this.lbSeverity.AutoSize = true;
+            this.lbSeverity.Location = new System.Drawing.Point(366, 71);
+            this.lbSeverity.Name = "lbSeverity";
+            this.lbSeverity.Size = new System.Drawing.Size(51, 13);
+            this.lbSeverity.TabIndex = 0;
+            this.lbSeverity.Text = "Severity :";
+            // 
+            // cmbSeverity
+            // 
+            this.cmbSeverity.FormattingEnabled = true;
+            this.cmbSeverity.Location = new System.Drawing.Point(423, 68);
+            this.cmbSeverity.Name = "cmbSeverity";
+            this.cmbSeverity.Size = new System.Drawing.Size(82, 21);
+            this.cmbSeverity.TabIndex = 3;
+            // 
+            // lbPriority
+            // 
+            this.lbPriority.AutoSize = true;
+            this.lbPriority.Location = new System.Drawing.Point(211, 71);
+            this.lbPriority.Name = "lbPriority";
+            this.lbPriority.Size = new System.Drawing.Size(44, 13);
+            this.lbPriority.TabIndex = 0;
+            this.lbPriority.Text = "Priority :";
+            // 
+            // cmbPriority
+            // 
+            this.cmbPriority.FormattingEnabled = true;
+            this.cmbPriority.Location = new System.Drawing.Point(261, 68);
+            this.cmbPriority.Name = "cmbPriority";
+            this.cmbPriority.Size = new System.Drawing.Size(82, 21);
+            this.cmbPriority.TabIndex = 3;
+            // 
+            // btnOk
+            // 
+            this.btnOk.Location = new System.Drawing.Point(161, 418);
+            this.btnOk.Name = "btnOk";
+            this.btnOk.Size = new System.Drawing.Size(97, 28);
+            this.btnOk.TabIndex = 4;
+            this.btnOk.Text = "Ok";
+            this.btnOk.UseVisualStyleBackColor = true;
+            this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
+            // 
+            // btnCancel
+            // 
+            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.btnCancel.Location = new System.Drawing.Point(414, 418);
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.Size = new System.Drawing.Size(97, 28);
+            this.btnCancel.TabIndex = 4;
+            this.btnCancel.Text = "Cancel";
+            this.btnCancel.UseVisualStyleBackColor = true;
+            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+            // 
+            // gbRequired
+            // 
+            this.gbRequired.Controls.Add(this.txtDescription);
+            this.gbRequired.Controls.Add(this.lbSummary);
+            this.gbRequired.Controls.Add(this.lbDescription);
+            this.gbRequired.Controls.Add(this.txtSummary);
+            this.gbRequired.Location = new System.Drawing.Point(12, 12);
+            this.gbRequired.Name = "gbRequired";
+            this.gbRequired.Size = new System.Drawing.Size(645, 246);
+            this.gbRequired.TabIndex = 5;
+            this.gbRequired.TabStop = false;
+            this.gbRequired.Text = "Required";
+            // 
+            // gbOptional
+            // 
+            this.gbOptional.Controls.Add(this.lbComponent);
+            this.gbOptional.Controls.Add(this.lbVersion);
+            this.gbOptional.Controls.Add(this.lbSeverity);
+            this.gbOptional.Controls.Add(this.cmbType);
+            this.gbOptional.Controls.Add(this.lbType);
+            this.gbOptional.Controls.Add(this.cmbPriority);
+            this.gbOptional.Controls.Add(this.lbPriority);
+            this.gbOptional.Controls.Add(this.cmbSeverity);
+            this.gbOptional.Controls.Add(this.cmbComponent);
+            this.gbOptional.Controls.Add(this.cmbVersion);
+            this.gbOptional.Location = new System.Drawing.Point(12, 264);
+            this.gbOptional.Name = "gbOptional";
+            this.gbOptional.Size = new System.Drawing.Size(645, 135);
+            this.gbOptional.TabIndex = 6;
+            this.gbOptional.TabStop = false;
+            this.gbOptional.Text = "Optional";
+            // 
+            // lbType
+            // 
+            this.lbType.AutoSize = true;
+            this.lbType.Location = new System.Drawing.Point(366, 31);
+            this.lbType.Name = "lbType";
+            this.lbType.Size = new System.Drawing.Size(37, 13);
+            this.lbType.TabIndex = 0;
+            this.lbType.Text = "Type :";
+            // 
+            // cmbType
+            // 
+            this.cmbType.FormattingEnabled = true;
+            this.cmbType.Location = new System.Drawing.Point(423, 28);
+            this.cmbType.Name = "cmbType";
+            this.cmbType.Size = new System.Drawing.Size(82, 21);
+            this.cmbType.TabIndex = 3;
+            // 
+            // NewTicket
+            // 
+            this.AcceptButton = this.btnOk;
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.CancelButton = this.btnCancel;
+            this.ClientSize = new System.Drawing.Size(679, 469);
+            this.Controls.Add(this.gbOptional);
+            this.Controls.Add(this.gbRequired);
+            this.Controls.Add(this.btnCancel);
+            this.Controls.Add(this.btnOk);
+            this.Name = "NewTicket";
+            this.Text = "NewTicket";
+            this.gbRequired.ResumeLayout(false);
+            this.gbRequired.PerformLayout();
+            this.gbOptional.ResumeLayout(false);
+            this.gbOptional.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label lbSummary;
+        private System.Windows.Forms.TextBox txtSummary;
+        private System.Windows.Forms.Label lbDescription;
+        private System.Windows.Forms.TextBox txtDescription;
+        private System.Windows.Forms.Label lbComponent;
+        private System.Windows.Forms.ComboBox cmbComponent;
+        private System.Windows.Forms.Label lbVersion;
+        private System.Windows.Forms.ComboBox cmbVersion;
+        private System.Windows.Forms.Label lbSeverity;
+        private System.Windows.Forms.ComboBox cmbSeverity;
+        private System.Windows.Forms.Label lbPriority;
+        private System.Windows.Forms.ComboBox cmbPriority;
+        private System.Windows.Forms.Button btnOk;
+        private System.Windows.Forms.Button btnCancel;
+        private System.Windows.Forms.GroupBox gbRequired;
+        private System.Windows.Forms.GroupBox gbOptional;
+        private System.Windows.Forms.ComboBox cmbType;
+        private System.Windows.Forms.Label lbType;
+    }
+}

TracVS/NewTicket.cs

+ďťż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;
+
+namespace TracVS
+{
+    public partial class NewTicket : Form
+    {
+        public Ticket Ticket
+        {
+            get;
+            private set;
+        }
+
+        public NewTicket(string[] types, string[] components, string[] versions, string[] severities, string[] priorities)
+        {
+            InitializeComponent();
+            this.cmbType.DataSource = types;
+            this.cmbComponent.DataSource = components;
+            this.cmbVersion.DataSource = versions;
+            this.cmbSeverity.DataSource = severities;
+            this.cmbPriority.DataSource = priorities;
+        }
+
+        private void btnOk_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = System.Windows.Forms.DialogResult.OK;
+            this.Ticket = new Ticket
+            {
+                Summary = txtSummary.Text,
+                Description = txtDescription.Text,
+                Component = cmbComponent.Text,
+                Version = cmbVersion.Text,
+                Severity = cmbSeverity.Text,
+                Priority = cmbPriority.Text
+            };
+            this.Close();
+        }
+
+        private void btnCancel_Click(object sender, EventArgs e)
+        {
+            this.Close();
+        }
+
+
+    }
+}

TracVS/NewTicket.resx

+ďťż<?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>

TracVS/PersianDate.cs

+//-----------------------------------------------------------------------
+// <copyright file="PersianDate.cs" company="Samasoft">
+//     Copyright MyCompany. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace TracVS
+{
+    using System.Globalization;
+    using System.Text.RegularExpressions;
+    using System;
+
+    public class PersianDate
+    {
+        private DateTime _DateTime;
+
+        private PersianCalendar _Calendar;
+
+        public DateTime DateTime
+        {
+            get
+            {
+                return _DateTime;
+            }
+            set
+            {
+                _DateTime = value;
+            }
+        }
+
+        public PersianDate(DateTime christDate)
+        {
+            this._Calendar = new PersianCalendar();
+            _DateTime = christDate;
+        }
+
+        public PersianDate(string persianDate)
+        {
+            this._Calendar = new PersianCalendar();
+            _DateTime = PersianDate.Parse(persianDate).DateTime;
+        }
+
+        public PersianDate(int persianYear, int persianMonth, int persianDay)
+        {
+            this._Calendar = new PersianCalendar();
+            this._DateTime = this._Calendar.ToDateTime(persianYear, persianMonth, persianDay, 0, 0, 0, 0);
+
+        }
+
+        public PersianDate(string persianYear, string persianMonth, string persianDay)
+        {
+            this._Calendar = new PersianCalendar();
+            _DateTime = PersianDate.Parse(persianYear, persianMonth, persianDay).DateTime;
+        }
+
+        public static PersianDate Parse(string persianDate)
+        {
+            Regex re = new Regex(@"(\d{2,4})/(\d{1,2})/(\d{1,2})");
+            if (!re.IsMatch(persianDate))
+            {
+                throw new ApplicationException("Not a valid Hijri Shamsi Sate string");
+            }
+            Match m = re.Match(persianDate);
+            int Year = int.Parse(m.Groups[1].Value);
+            int Month = int.Parse(m.Groups[2].Value);
+            int Day = int.Parse(m.Groups[3].Value);
+            if (Month > 12 || Month < 1 || Day > 31 || Day < 1 || (Month > 6 && Day > 30))
+            {
+                throw new ApplicationException("Not a valid Hijri Shamsi Sate string");
+            }
+            PersianCalendar calendar = new PersianCalendar();
+            return new PersianDate(calendar.ToDateTime(Year, Month, Day, 0, 0, 0, 0));
+        }
+
+        public static PersianDate Parse(string persianYear, string persianMonth, string persianDay)
+        {
+            string persianDate = persianYear + "/" + persianMonth + "/" + persianDay;
+            return PersianDate.Parse(persianDate);
+        }
+
+        public override string ToString()
+        {
+            return this._Calendar.GetYear(_DateTime).ToString("0000") + "/" + this._Calendar.GetMonth(_DateTime).ToString("00") + "/" + this._Calendar.GetDayOfMonth(_DateTime).ToString("00");
+        }
+
+        //		public string GetDayOfWeek(PersianDate persianDate)
+        //		{
+        //
+        //		}
+
+        public int PersianYear
+        {
+            get
+            {
+                return this._Calendar.GetYear(this._DateTime);
+            }
+        }
+
+        public int PersianMonth
+        {
+            get
+            {
+                return this._Calendar.GetMonth(this._DateTime);
+            }
+        }
+
+        public int PersianDay
+        {
+            get
+            {
+                return this._Calendar.GetDayOfMonth(this._DateTime);
+            }
+        }
+    }
+
+
+
+
+
+}
+

TracVS/Properties/Resources.Designer.cs

+ďťż//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.235
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace TracVS.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.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>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </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("TracVS.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}

TracVS/Properties/Resources.resx

+ďťż<?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>
+ďťżusing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Drawing;
+
+namespace TracVS
+{
+    public class Ticket
+    {
+
+        #region Public Properties
+
+        public Bitmap Icon
+        {
+            get;
+            set;
+        }
+
+        public int Id
+        {
+            get;
+            set;
+        }
+
+        public string Created
+        {
+            get;
+            set;
+        }
+
+        public string LastModified
+        {
+            get;
+            set;
+        }
+
+        public string Status
+        {
+            get;
+            set;
+        }
+
+        public string Description
+        {
+            get;
+            set;
+        }
+
+        public string Reporter
+        {
+            get;
+            set;
+        }
+
+        public string CC
+        {
+            get;
+            set;
+        }
+
+        public string Resolution
+        {
+            get;
+            set;
+        }
+
+        public string Component
+        {
+            get;
+            set;
+        }
+
+        public string Summary
+        {
+            get;
+            set;
+        }
+
+        public string Priority
+        {
+            get;
+            set;
+        }
+
+        public string Keywords
+        {
+            get;
+            set;
+        }
+
+        public string Version
+        {
+            get;
+            set;
+        }
+
+        public string Milestone
+        {
+            get;
+            set;
+        }
+
+        public string Owner
+        {
+            get;
+            set;
+        }
+
+        public string TicketType
+        {
+            get;
+            set;
+        }
+
+        public string Severity
+        {
+            get;
+            set;
+        }
+
+        public string Selection
+        {
+            get;
+            set;
+        }
+        #endregion
+    }
+}

TracVS/TicketsView.Designer.cs

+ďťżnamespace TracVS
+{
+    partial class TicketsView
+    {
+        /// <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 Component 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.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TicketsView));
+            this.dgTickets = new System.Windows.Forms.DataGridView();
+            this.colSelection = new System.Windows.Forms.DataGridViewComboBoxColumn();
+            this.colIcon = new System.Windows.Forms.DataGridViewImageColumn();
+            this.colId = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colTicketType = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colSummary = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colStatus = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colReporter = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colResolution = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colComponent = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colPriority = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colKeywords = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colVersion = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colOwner = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colSeverity = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colDescription = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colCC = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colCreated = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.colLastModified = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.lblResults = new System.Windows.Forms.Label();
+            this.panel3 = new System.Windows.Forms.Panel();
+            this.imgTickets = new System.Windows.Forms.ImageList(this.components);
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.cmbTicketQuery = new System.Windows.Forms.ToolStripComboBox();
+            this.cmbServer = new System.Windows.Forms.ToolStripComboBox();
+            this.searchTextBox = new System.Windows.Forms.ToolStripTextBox();
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnRefresh = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.searchLabel = new System.Windows.Forms.ToolStripLabel();
+            this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
+            this.ticketMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
+            this.newTicketToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.setFixedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.btnNew = new System.Windows.Forms.ToolStripButton();
+            this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
+            ((System.ComponentModel.ISupportInitialize)(this.dgTickets)).BeginInit();
+            this.panel3.SuspendLayout();
+            this.panel2.SuspendLayout();
+            this.panel1.SuspendLayout();
+            this.toolStrip1.SuspendLayout();
+            this.toolStripContainer1.ContentPanel.SuspendLayout();
+            this.toolStripContainer1.TopToolStripPanel.SuspendLayout();
+            this.toolStripContainer1.SuspendLayout();
+            this.ticketMenu.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // dgTickets
+            // 
+            this.dgTickets.AllowUserToAddRows = false;
+            this.dgTickets.AllowUserToDeleteRows = false;
+            this.dgTickets.AllowUserToOrderColumns = true;
+            this.dgTickets.AllowUserToResizeRows = false;
+            this.dgTickets.BackgroundColor = System.Drawing.SystemColors.Window;
+            this.dgTickets.BorderStyle = System.Windows.Forms.BorderStyle.None;
+            this.dgTickets.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal;
+            this.dgTickets.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
+            this.dgTickets.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
+            this.dgTickets.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.colSelection,
+            this.colIcon,
+            this.colId,
+            this.colTicketType,
+            this.colSummary,
+            this.colStatus,
+            this.colReporter,
+            this.colResolution,
+            this.colComponent,
+            this.colPriority,
+            this.colKeywords,
+            this.colVersion,
+            this.colOwner,
+            this.colSeverity,
+            this.colDescription,
+            this.colCC,
+            this.colCreated,
+            this.colLastModified});
+            this.dgTickets.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.dgTickets.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter;
+            this.dgTickets.GridColor = System.Drawing.SystemColors.ControlLight;
+            this.dgTickets.Location = new System.Drawing.Point(0, 25);
+            this.dgTickets.Name = "dgTickets";
+            this.dgTickets.RowHeadersVisible = false;
+            this.dgTickets.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
+            this.dgTickets.ShowEditingIcon = false;
+            this.dgTickets.Size = new System.Drawing.Size(896, 188);
+            this.dgTickets.TabIndex = 2;
+            // 
+            // colSelection
+            // 
+            this.colSelection.DataPropertyName = "Selection";
+            this.colSelection.HeaderText = "Selection";
+            this.colSelection.Name = "colSelection";
+            this.colSelection.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
+            this.colSelection.Visible = false;
+            // 
+            // colIcon
+            // 
+            this.colIcon.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
+            this.colIcon.DataPropertyName = "Icon";
+            this.colIcon.HeaderText = "";
+            this.colIcon.Image = ((System.Drawing.Image)(resources.GetObject("colIcon.Image")));
+            this.colIcon.Name = "colIcon";
+            this.colIcon.ReadOnly = true;
+            this.colIcon.Resizable = System.Windows.Forms.DataGridViewTriState.False;
+            this.colIcon.Width = 16;
+            // 
+            // colId
+            // 
+            this.colId.DataPropertyName = "Id";
+            this.colId.HeaderText = "Id";
+            this.colId.Name = "colId";
+            this.colId.ReadOnly = true;
+            this.colId.Resizable = System.Windows.Forms.DataGridViewTriState.True;
+            this.colId.Width = 40;
+            // 
+            // colTicketType
+            // 
+            this.colTicketType.DataPropertyName = "TicketType";
+            this.colTicketType.HeaderText = "Type";
+            this.colTicketType.Name = "colTicketType";
+            this.colTicketType.ReadOnly = true;
+            // 
+            // colSummary
+            // 
+            this.colSummary.DataPropertyName = "Summary";
+            this.colSummary.HeaderText = "Summary";
+            this.colSummary.Name = "colSummary";
+            this.colSummary.ReadOnly = true;
+            this.colSummary.Resizable = System.Windows.Forms.DataGridViewTriState.True;
+            this.colSummary.Width = 300;
+            // 
+            // colStatus
+            // 
+            this.colStatus.DataPropertyName = "Status";
+            this.colStatus.HeaderText = "Status";
+            this.colStatus.Name = "colStatus";
+            this.colStatus.ReadOnly = true;
+            // 
+            // colReporter
+            // 
+            this.colReporter.DataPropertyName = "Reporter";
+            this.colReporter.HeaderText = "Reporter";
+            this.colReporter.Name = "colReporter";
+            this.colReporter.ReadOnly = true;
+            // 
+            // colResolution
+            // 
+            this.colResolution.DataPropertyName = "Resolution";
+            this.colResolution.HeaderText = "Resolution";
+            this.colResolution.Name = "colResolution";
+            this.colResolution.ReadOnly = true;
+            // 
+            // colComponent
+            // 
+            this.colComponent.DataPropertyName = "Component";
+            this.colComponent.HeaderText = "Component";
+            this.colComponent.Name = "colComponent";
+            this.colComponent.ReadOnly = true;
+            // 
+            // colPriority
+            // 
+            this.colPriority.DataPropertyName = "Priority";
+            this.colPriority.HeaderText = "Priority";
+            this.colPriority.Name = "colPriority";
+            this.colPriority.ReadOnly = true;
+            // 
+            // colKeywords
+            // 
+            this.colKeywords.DataPropertyName = "Keywords";
+            this.colKeywords.HeaderText = "Keywords";
+            this.colKeywords.Name = "colKeywords";
+            this.colKeywords.ReadOnly = true;
+            this.colKeywords.Visible = false;
+            // 
+            // colVersion
+            // 
+            this.colVersion.DataPropertyName = "Version";
+            this.colVersion.HeaderText = "Version";
+            this.colVersion.Name = "colVersion";
+            this.colVersion.ReadOnly = true;
+            // 
+            // colOwner
+            // 
+            this.colOwner.DataPropertyName = "Owner";
+            this.colOwner.HeaderText = "Owner";
+            this.colOwner.Name = "colOwner";
+            this.colOwner.ReadOnly = true;
+            // 
+            // colSeverity
+            // 
+            this.colSeverity.DataPropertyName = "Severity";
+            this.colSeverity.HeaderText = "Severity";
+            this.colSeverity.Name = "colSeverity";
+            this.colSeverity.ReadOnly = true;
+            // 
+            // colDescription
+            // 
+            this.colDescription.DataPropertyName = "Description";
+            this.colDescription.HeaderText = "Description";
+            this.colDescription.Name = "colDescription";
+            this.colDescription.ReadOnly = true;
+            this.colDescription.Visible = false;
+            // 
+            // colCC
+            // 
+            this.colCC.DataPropertyName = "CC";
+            this.colCC.HeaderText = "CC";
+            this.colCC.Name = "colCC";
+            this.colCC.ReadOnly = true;
+            this.colCC.Visible = false;
+            // 
+            // colCreated
+            // 
+            this.colCreated.DataPropertyName = "Created";
+            this.colCreated.HeaderText = "Created";
+            this.colCreated.Name = "colCreated";
+            this.colCreated.ReadOnly = true;
+            this.colCreated.Width = 150;
+            // 
+            // colLastModified
+            // 
+            this.colLastModified.DataPropertyName = "LastModified";
+            this.colLastModified.HeaderText = "Last Modified";
+            this.colLastModified.Name = "colLastModified";
+            this.colLastModified.ReadOnly = true;
+            this.colLastModified.Width = 150;
+            // 
+            // lblResults
+            // 
+            this.lblResults.AutoSize = true;
+            this.lblResults.Location = new System.Drawing.Point(4, 3);
+            this.lblResults.Name = "lblResults";
+            this.lblResults.Size = new System.Drawing.Size(93, 13);
+            this.lblResults.TabIndex = 0;
+            this.lblResults.Text = "0 Tickets returned";
+            // 
+            // panel3
+            // 
+            this.panel3.BackColor = System.Drawing.SystemColors.Info;
+            this.panel3.Controls.Add(this.lblResults);
+            this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel3.Location = new System.Drawing.Point(0, 1);
+            this.panel3.Name = "panel3";
+            this.panel3.Size = new System.Drawing.Size(896, 21);
+            this.panel3.TabIndex = 0;
+            // 
+            // imgTickets
+            // 
+            this.imgTickets.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgTickets.ImageStream")));
+            this.imgTickets.TransparentColor = System.Drawing.Color.Transparent;
+            this.imgTickets.Images.SetKeyName(0, "newticket.png");
+            this.imgTickets.Images.SetKeyName(1, "editedticket.png");
+            this.imgTickets.Images.SetKeyName(2, "closedticket.png");
+            // 
+            // panel2
+            // 
+            this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(172)))), ((int)(((byte)(168)))), ((int)(((byte)(153)))));
+            this.panel2.Controls.Add(this.panel3);
+            this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel2.Location = new System.Drawing.Point(0, 1);
+            this.panel2.Name = "panel2";
+            this.panel2.Padding = new System.Windows.Forms.Padding(0, 1, 0, 1);
+            this.panel2.Size = new System.Drawing.Size(896, 23);
+            this.panel2.TabIndex = 0;
+            // 
+            // panel1
+            // 
+            this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
+            this.panel1.Controls.Add(this.panel2);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Padding = new System.Windows.Forms.Padding(0, 1, 0, 1);
+            this.panel1.Size = new System.Drawing.Size(896, 25);
+            this.panel1.TabIndex = 1;
+            // 
+            // cmbTicketQuery
+            // 
+            this.cmbTicketQuery.AutoToolTip = true;
+            this.cmbTicketQuery.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.cmbTicketQuery.Name = "cmbTicketQuery";
+            this.cmbTicketQuery.Size = new System.Drawing.Size(150, 25);
+            // 
+            // cmbServer
+            // 
+            this.cmbServer.AutoToolTip = true;
+            this.cmbServer.Enabled = false;
+            this.cmbServer.Name = "cmbServer";
+            this.cmbServer.Size = new System.Drawing.Size(250, 25);
+            // 
+            // searchTextBox
+            // 
+            this.searchTextBox.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+            this.searchTextBox.Name = "searchTextBox";
+            this.searchTextBox.Size = new System.Drawing.Size(100, 25);
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None;
+            this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnRefresh,
+            this.toolStripSeparator1,
+            this.cmbServer,
+            this.cmbTicketQuery,
+            this.searchTextBox,
+            this.searchLabel,
+            this.btnNew,
+            this.toolStripButton1});
+            this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+            this.toolStrip1.Name = "toolStrip1";
+            this.toolStrip1.Padding = new System.Windows.Forms.Padding(0);
+            this.toolStrip1.Size = new System.Drawing.Size(896, 25);
+            this.toolStrip1.Stretch = true;
+            this.toolStrip1.TabIndex = 0;
+            // 
+            // btnRefresh
+            // 
+            this.btnRefresh.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnRefresh.Image = ((System.Drawing.Image)(resources.GetObject("btnRefresh.Image")));
+            this.btnRefresh.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnRefresh.Name = "btnRefresh";
+            this.btnRefresh.Size = new System.Drawing.Size(23, 22);
+            this.btnRefresh.Text = "Refresh";
+            // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+            // 
+            // searchLabel
+            // 
+            this.searchLabel.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+            this.searchLabel.Name = "searchLabel";
+            this.searchLabel.Size = new System.Drawing.Size(42, 22);
+            this.searchLabel.Text = "Search";
+            // 
+            // toolStripContainer1
+            // 
+            // 
+            // toolStripContainer1.ContentPanel
+            // 
+            this.toolStripContainer1.ContentPanel.Controls.Add(this.dgTickets);
+            this.toolStripContainer1.ContentPanel.Controls.Add(this.panel1);
+            this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(896, 213);
+            this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.toolStripContainer1.Location = new System.Drawing.Point(0, 0);
+            this.toolStripContainer1.Name = "toolStripContainer1";
+            this.toolStripContainer1.Size = new System.Drawing.Size(896, 238);
+            this.toolStripContainer1.TabIndex = 2;
+            this.toolStripContainer1.Text = "toolStripContainer1";
+            // 
+            // toolStripContainer1.TopToolStripPanel
+            // 
+            this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip1);
+            // 
+            // ticketMenu
+            // 
+            this.ticketMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.newTicketToolStripMenuItem,
+            this.setFixedToolStripMenuItem});
+            this.ticketMenu.Name = "ticketMenu";
+            this.ticketMenu.Size = new System.Drawing.Size(153, 70);
+            // 
+            // newTicketToolStripMenuItem
+            // 
+            this.newTicketToolStripMenuItem.Name = "newTicketToolStripMenuItem";
+            this.newTicketToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+            this.newTicketToolStripMenuItem.Text = "New Ticket...";
+            // 
+            // setFixedToolStripMenuItem
+            // 
+            this.setFixedToolStripMenuItem.Name = "setFixedToolStripMenuItem";
+            this.setFixedToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+            this.setFixedToolStripMenuItem.Text = "Set Fixed";
+            // 
+            // btnNew
+            // 
+            this.btnNew.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.btnNew.Image = ((System.Drawing.Image)(resources.GetObject("btnNew.Image")));
+            this.btnNew.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnNew.Name = "btnNew";
+            this.btnNew.Size = new System.Drawing.Size(23, 22);
+            this.btnNew.Text = "toolStripButton1";
+            this.btnNew.Click += new System.EventHandler(this.btnNew_Click);
+            // 
+            // toolStripButton1
+            // 
+            this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
+            this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.toolStripButton1.Name = "toolStripButton1";
+            this.toolStripButton1.Size = new System.Drawing.Size(23, 22);
+            this.toolStripButton1.Text = "Fixed";
+            // 
+            // TicketsView
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.toolStripContainer1);
+            this.Name = "TicketsView";
+            this.Size = new System.Drawing.Size(896, 238);
+            ((System.ComponentModel.ISupportInitialize)(this.dgTickets)).EndInit();
+            this.panel3.ResumeLayout(false);
+            this.panel3.PerformLayout();
+            this.panel2.ResumeLayout(false);
+            this.panel1.ResumeLayout(false);
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.toolStripContainer1.ContentPanel.ResumeLayout(false);
+            this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false);
+            this.toolStripContainer1.TopToolStripPanel.PerformLayout();
+            this.toolStripContainer1.ResumeLayout(false);
+            this.toolStripContainer1.PerformLayout();
+            this.ticketMenu.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.DataGridView dgTickets;
+        private System.Windows.Forms.Label lblResults;
+        private System.Windows.Forms.Panel panel3;
+        private System.Windows.Forms.ImageList imgTickets;
+        private System.Windows.Forms.Panel panel2;
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.ToolStripComboBox cmbTicketQuery;
+        private System.Windows.Forms.ToolStripComboBox cmbServer;
+        private System.Windows.Forms.ToolStripTextBox searchTextBox;
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnRefresh;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.ToolStripLabel searchLabel;
+        private System.Windows.Forms.ToolStripContainer toolStripContainer1;
+        private System.Windows.Forms.DataGridViewComboBoxColumn colSelection;
+        private System.Windows.Forms.DataGridViewImageColumn colIcon;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colId;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colTicketType;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colSummary;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colStatus;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colReporter;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colResolution;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colComponent;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colPriority;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colKeywords;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colVersion;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colOwner;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colSeverity;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colDescription;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colCC;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colCreated;
+        private System.Windows.Forms.DataGridViewTextBoxColumn colLastModified;
+        private System.Windows.Forms.ContextMenuStrip ticketMenu;
+        private System.Windows.Forms.ToolStripMenuItem newTicketToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem setFixedToolStripMenuItem;
+        private System.Windows.Forms.ToolStripButton btnNew;
+        private System.Windows.Forms.ToolStripButton toolStripButton1;
+
+    }
+}

TracVS/TicketsView.cs

+ďťżusing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Globalization;
+
+namespace TracVS
+{
+    public partial class TicketsView : UserControl
+    {
+        public string[] Types
+        {
+            get;
+            set;
+        }
+
+        public string[] Components
+        {
+            get;
+            set;
+        }
+
+        public string[] Versions
+        {
+            get;
+            set;
+        }
+
+        public string[] Severities
+        {
+            get;
+            set;
+        }
+
+        public string[] Priorities
+        {
+            get;
+            set;
+        }
+
+        
+        public event Action<Ticket> TicketCreated;
+        public event Action<int> TicketFixed;
+
+        public TicketsView()
+        {
+            InitializeComponent();
+        }