using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; /* ******************************************************************************** ' ' Copyright (c) 2003, Robert Cowham and Vaccaperna Systems Ltd. All rights reserved. ' ' Redistribution and use in source and binary forms, with or without ' modification, are permitted provided that the following conditions are met: ' ' 1. Redistributions of source code must retain the above copyright ' notice, this list of conditions and the following disclaimer. ' ' 2. Redistributions in binary form must reproduce the above copyright ' notice, this list of conditions and the following disclaimer in the ' documentation and/or other materials provided with the distribution. ' ' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ' IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ' ARE DISCLAIMED. IN NO EVENT SHALL VACCAPERNA SYSTEMS LTD. BE LIABLE FOR ANY ' DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ' (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ' LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ' ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ' (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ' SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ' ' ******************************************************************************* ' ' Name: submitform.cs ' ' Author: Robert Cowham ' ' Description: ' Show how to execute a command such as "change -o" and then "submit -i" ' and allow the user to manipulate things in between. ' ' Note there job lists available etc (ignored in this demo). ' ' No error handling! ' ****************************************************************************** */ namespace p4comtest { /// /// Summary description for SubmitForm. /// public class SubmitForm : System.Windows.Forms.Form { public System.Windows.Forms.TextBox Description; public System.Windows.Forms.Button cmdClose; public System.Windows.Forms.Button cmdSubmit; public System.Windows.Forms.CheckedListBox Files; public System.Windows.Forms.Label _Label1_1; public System.Windows.Forms.Label _Label1_0; /// /// Required designer variable. /// private System.ComponentModel.Container components = null; public SubmitForm() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.Description = new System.Windows.Forms.TextBox(); this.cmdClose = new System.Windows.Forms.Button(); this.cmdSubmit = new System.Windows.Forms.Button(); this.Files = new System.Windows.Forms.CheckedListBox(); this._Label1_1 = new System.Windows.Forms.Label(); this._Label1_0 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // Description // this.Description.AcceptsReturn = true; this.Description.AutoSize = false; this.Description.BackColor = System.Drawing.SystemColors.Window; this.Description.Cursor = System.Windows.Forms.Cursors.IBeam; this.Description.ForeColor = System.Drawing.SystemColors.WindowText; this.Description.Location = new System.Drawing.Point(88, 8); this.Description.MaxLength = 0; this.Description.Name = "Description"; this.Description.RightToLeft = System.Windows.Forms.RightToLeft.No; this.Description.Size = new System.Drawing.Size(489, 105); this.Description.TabIndex = 10; this.Description.Text = "Description"; // // cmdClose // this.cmdClose.BackColor = System.Drawing.SystemColors.Control; this.cmdClose.Cursor = System.Windows.Forms.Cursors.Default; this.cmdClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cmdClose.ForeColor = System.Drawing.SystemColors.ControlText; this.cmdClose.Location = new System.Drawing.Point(312, 280); this.cmdClose.Name = "cmdClose"; this.cmdClose.RightToLeft = System.Windows.Forms.RightToLeft.No; this.cmdClose.Size = new System.Drawing.Size(97, 33); this.cmdClose.TabIndex = 9; this.cmdClose.Text = "Cancel"; this.cmdClose.Click += new System.EventHandler(this.cmdClose_Click); // // cmdSubmit // this.cmdSubmit.BackColor = System.Drawing.SystemColors.Control; this.cmdSubmit.Cursor = System.Windows.Forms.Cursors.Default; this.cmdSubmit.ForeColor = System.Drawing.SystemColors.ControlText; this.cmdSubmit.Location = new System.Drawing.Point(200, 280); this.cmdSubmit.Name = "cmdSubmit"; this.cmdSubmit.RightToLeft = System.Windows.Forms.RightToLeft.No; this.cmdSubmit.Size = new System.Drawing.Size(97, 33); this.cmdSubmit.TabIndex = 8; this.cmdSubmit.Text = "&Submit"; this.cmdSubmit.Click += new System.EventHandler(this.cmdSubmit_Click); // // Files // this.Files.BackColor = System.Drawing.SystemColors.Window; this.Files.Cursor = System.Windows.Forms.Cursors.Default; this.Files.ForeColor = System.Drawing.SystemColors.WindowText; this.Files.Items.AddRange(new object[] { "Files"}); this.Files.Location = new System.Drawing.Point(88, 128); this.Files.Name = "Files"; this.Files.RightToLeft = System.Windows.Forms.RightToLeft.No; this.Files.Size = new System.Drawing.Size(489, 139); this.Files.TabIndex = 6; // // _Label1_1 // this._Label1_1.BackColor = System.Drawing.SystemColors.Control; this._Label1_1.Cursor = System.Windows.Forms.Cursors.Default; this._Label1_1.ForeColor = System.Drawing.SystemColors.ControlText; this._Label1_1.Location = new System.Drawing.Point(8, 8); this._Label1_1.Name = "_Label1_1"; this._Label1_1.RightToLeft = System.Windows.Forms.RightToLeft.No; this._Label1_1.Size = new System.Drawing.Size(65, 25); this._Label1_1.TabIndex = 11; this._Label1_1.Text = "Description:"; this._Label1_1.TextAlign = System.Drawing.ContentAlignment.TopRight; // // _Label1_0 // this._Label1_0.BackColor = System.Drawing.SystemColors.Control; this._Label1_0.Cursor = System.Windows.Forms.Cursors.Default; this._Label1_0.ForeColor = System.Drawing.SystemColors.ControlText; this._Label1_0.Location = new System.Drawing.Point(8, 128); this._Label1_0.Name = "_Label1_0"; this._Label1_0.RightToLeft = System.Windows.Forms.RightToLeft.No; this._Label1_0.Size = new System.Drawing.Size(65, 25); this._Label1_0.TabIndex = 7; this._Label1_0.Text = "Files:"; this._Label1_0.TextAlign = System.Drawing.ContentAlignment.TopRight; // // SubmitForm // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(592, 318); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.Description, this.cmdClose, this.cmdSubmit, this.Files, this._Label1_1, this._Label1_0}); this.Name = "SubmitForm"; this.Text = "SubmitForm"; this.ResumeLayout(false); } #endregion P4COM.p4 m_p4 = new P4COM.p4(); System.Array output; System.Array warnings; System.Array errors; System.Array m_Files; public void DoSubmit(P4COM.p4 p) { int i; /* * Demonstrates how to handle commands which take -o and -i flags, * in this case "change -o" and "submit -i" to commit the results. * * Copy environment since we want to set ParseForms on for this connection * */ m_p4 = new P4COM.p4(); m_p4.Charset = p.Charset; m_p4.Client = p.Client; m_p4.Cwd = p.Cwd; m_p4.Host = p.Host; m_p4.Language = p.Language; m_p4.Password = p.Password; m_p4.Port = p.Port; m_p4.User = p.User; m_p4.ParseForms(); m_p4.Connect(); output = m_p4.run("change -o"); Description.Text = m_p4.get_Var("Description"); // Simple string variable m_Files = m_p4.get_ArrayVar("Files"); // StringArray variable Files.Items.Clear(); for (i = m_Files.GetLowerBound(0); i <= m_Files.GetUpperBound(0); i++) { Files.Items.Add(m_Files.GetValue(i)); } ShowDialog(); Close(); } private void cmdClose_Click(object sender, System.EventArgs e) { Close(); } private void cmdSubmit_Click(object sender, System.EventArgs e) { int i, count; m_p4.set_Var("Description", Description.Text); // Setting string var count = 0; for (i = 0; i < Files.Items.Count; i++) { if (Files.GetItemChecked(i)) { count++; } } if (count == 0) { MessageBox.Show("No files selected!"); } else { // There must be a better way of resetting m_Files than this // but I haven't found it yet!! string[] arr = new string[count]; int j = 0; foreach(object item in Files.CheckedItems) { arr[j++] = item.ToString(); } m_Files = arr; //MessageBox.Show("Files: " + join(m_Files)); m_p4.set_ArrayVar("Files", ref m_Files); output = m_p4.run("submit -i"); errors = m_p4.Errors; string s = join(output); s = s + "\n" + "Errors: " + join(errors); MessageBox.Show(s); } Close(); } private string join(System.Array arr) { int i; string s = ""; for (i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0); i++) { s += arr.GetValue(i) + " "; } return s; } } }