//######################################################################################### //★★★★★★★ http://www.cnpopsoft.com [华普软件] ★★★★★★★ //★★★★★★★ 华普软件 - VB & C#.NET 专业论文与源码荟萃! ★★★★★★★ //######################################################################################### /* * Copyright ?2005, Mathew Hall * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * - 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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. */ using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using XPTable; using XPTable.Events; using XPTable.Win32; namespace XPTable.Models { /// /// A specialized ContextMenu for Column Headers /// [ToolboxItem(false)] public class HeaderContextMenu : ContextMenu { #region Class Data /// /// The ColumnModel that owns the menu /// private ColumnModel model; /// /// Specifies whether the menu is enabled /// private bool enabled; /// /// More columns menuitem /// private MenuItem moreMenuItem; /// /// Seperator menuitem /// private MenuItem separator; #endregion #region Constructor /// /// Initializes a new instance of the HeaderContextMenu class with /// no menu items specified /// public HeaderContextMenu() : base() { this.model = null; this.enabled = true; this.moreMenuItem = new MenuItem("More...", new EventHandler(moreMenuItem_Click)); this.separator = new MenuItem("-"); } #endregion #region Methods /// /// Displays the shortcut menu at the specified position /// /// A Control object that specifies the control /// with which this shortcut menu is associated /// A Point object that specifies the coordinates at /// which to display the menu. These coordinates are specified relative /// to the client coordinates of the control specified in the control /// parameter public new void Show(Control control, Point pos) { if (control == null) { throw new ArgumentNullException("control", "control cannot be null"); } if (!(control is Table)) { throw new ArgumentException("control must be of type Table", "control"); } if (((Table) control).ColumnModel == null) { throw new InvalidOperationException("The specified Table does not have an associated ColumnModel"); } // this.model = ((Table) control).ColumnModel; // this.MenuItems.Clear(); base.Show(control, pos); } /// /// /// internal bool Enabled { get { return this.enabled; } set { this.enabled = value; } } #endregion #region Events /// /// Raises the Popup event /// /// An EventArgs that contains the event data protected override void OnPopup(EventArgs e) { if (this.model.Columns.Count > 0) { MenuItem item; for (int i=0; i /// /// /// /// private void menuItem_Click(object sender, EventArgs e) { MenuItem item = (MenuItem) sender; this.model.Columns[item.Index].Visible = !item.Checked; } /// /// /// /// /// private void moreMenuItem_Click(object sender, EventArgs e) { ShowColumnsDialog scd = new ShowColumnsDialog(); scd.AddColumns(this.model); scd.ShowDialog(this.SourceControl); } #endregion #region ShowColumnsDialog /// /// Summary description for ShowColumnsDialog. /// internal class ShowColumnsDialog : Form { #region Class Data /// /// Required designer variable. /// private System.ComponentModel.Container components = null; private ColumnModel model = null; private Label label1; private Button upButton; private Button downButton; private Button showButton; private Button hideButton; private Label label2; private TextBox widthTextBox; private CheckBox autoSizeCheckBox; private GroupBox groupBox1; private Button okButton; private Button cancelButton; private Table columnTable; #endregion #region Constructor /// /// /// public ShowColumnsDialog() { this.label1 = new Label(); this.columnTable = new Table(); this.upButton = new Button(); this.downButton = new Button(); this.showButton = new Button(); this.hideButton = new Button(); this.label2 = new Label(); this.widthTextBox = new TextBox(); this.autoSizeCheckBox = new CheckBox(); this.groupBox1 = new GroupBox(); this.okButton = new Button(); this.cancelButton = new Button(); this.SuspendLayout(); // // label1 // this.label1.Location = new Point(8, 12); this.label1.Name = "label1"; this.label1.Size = new Size(324, 28); this.label1.TabIndex = 0; //this.label1.Text = "Select the columns you want to appear in this view. Click Move Up and Move Down " + // "to arrange the columns."; this.label1.Text = "Select the columns you want to appear in this view."; // // columnListBox // this.columnTable.HeaderStyle = ColumnHeaderStyle.None; this.columnTable.Location = new Point(12, 52); this.columnTable.Name = "columnListBox"; this.columnTable.Size = new Size(231, 240); this.columnTable.TabIndex = 1; this.columnTable.ColumnModel = new ColumnModel(); this.columnTable.ColumnModel.Columns.Add(new CheckBoxColumn("Columns", 227)); this.columnTable.TableModel = new TableModel(); this.columnTable.TableModel.RowHeight += 3; // // upButton // this.upButton.FlatStyle = FlatStyle.System; this.upButton.Location = new Point(253, 52); this.upButton.Name = "upButton"; this.upButton.TabIndex = 2; this.upButton.Text = "Move &Up"; this.upButton.Visible = false; //this.upButton.Click += new EventHandler(this.upButton_Click); // // downButton // this.downButton.FlatStyle = FlatStyle.System; this.downButton.Location = new Point(253, 81); this.downButton.Name = "downButton"; this.downButton.TabIndex = 3; this.downButton.Text = "Move &Down"; this.downButton.Visible = false; //this.downButton.Click += new EventHandler(this.downButton_Click); // // showButton // this.showButton.FlatStyle = FlatStyle.System; //this.showButton.Location = new Point(253, 114); this.showButton.Location = new Point(253, 52); this.showButton.Name = "showButton"; this.showButton.TabIndex = 4; this.showButton.Text = "&Show"; this.showButton.Click += new EventHandler(this.showButton_Click); // // hideButton // this.hideButton.FlatStyle = FlatStyle.System; //this.hideButton.Location = new Point(253, 145); this.hideButton.Location = new Point(253, 81); this.hideButton.Name = "hideButton"; this.hideButton.TabIndex = 5; this.hideButton.Text = "&Hide"; this.hideButton.Click += new EventHandler(this.hideButton_Click); // // label2 // this.label2.Location = new Point(12, 300); this.label2.Name = "label2"; this.label2.Size = new Size(192, 21); this.label2.TabIndex = 6; this.label2.Text = "&Width of selected column (in pixels):"; this.label2.TextAlign = ContentAlignment.MiddleLeft; // // textBox1 // this.widthTextBox.Location = new Point(207, 300); this.widthTextBox.MaxLength = 4; this.widthTextBox.Name = "textBox1"; this.widthTextBox.Size = new Size(36, 21); this.widthTextBox.TabIndex = 7; this.widthTextBox.Text = "0"; this.widthTextBox.TextAlign = HorizontalAlignment.Right; this.widthTextBox.KeyPress += new KeyPressEventHandler(widthTextBox_KeyPress); // // autoSizeCheckBox // this.autoSizeCheckBox.Location = new Point(12, 330); this.autoSizeCheckBox.Name = "autoSizeCheckBox"; this.autoSizeCheckBox.Size = new Size(228, 16); this.autoSizeCheckBox.TabIndex = 8; this.autoSizeCheckBox.Text = "&Automatically size all columns"; this.autoSizeCheckBox.Visible = false; // // groupBox1 // this.groupBox1.Location = new Point(8, 352); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new Size(322, 8); this.groupBox1.TabIndex = 9; this.groupBox1.TabStop = false; // // okButton // this.okButton.FlatStyle = FlatStyle.System; this.okButton.Location = new Point(168, 372); this.okButton.Name = "okButton"; this.okButton.TabIndex = 10; this.okButton.Text = "OK"; this.okButton.Click += new EventHandler(okButton_Click); // // cancelButton // this.cancelButton.DialogResult = DialogResult.Cancel; this.cancelButton.FlatStyle = FlatStyle.System; this.cancelButton.Location = new Point(253, 372); this.cancelButton.Name = "cancelButton"; this.cancelButton.TabIndex = 11; this.cancelButton.Text = "Cancel"; // // ShowColumnsDialog // this.AcceptButton = this.okButton; this.AutoScaleBaseSize = new Size(5, 14); this.CancelButton = this.cancelButton; this.ClientSize = new Size(339, 408); this.Controls.Add(this.cancelButton); this.Controls.Add(this.okButton); this.Controls.Add(this.groupBox1); this.Controls.Add(this.autoSizeCheckBox); this.Controls.Add(this.widthTextBox); this.Controls.Add(this.label2); this.Controls.Add(this.hideButton); this.Controls.Add(this.showButton); this.Controls.Add(this.downButton); this.Controls.Add(this.upButton); this.Controls.Add(this.columnTable); this.Controls.Add(this.label1); this.Font = new Font("Tahoma", 8.25F); this.FormBorderStyle = FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ShowColumnsDialog"; this.ShowInTaskbar = false; this.StartPosition = FormStartPosition.CenterParent; this.Text = "Choose Columns"; this.ResumeLayout(false); } #endregion #region Methods /// /// Clean up any resources being used. /// protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } /// /// /// /// /// public void AddColumns(ColumnModel model) { this.model = model; CellStyle cellStyle = new CellStyle(); cellStyle.Padding = new CellPadding(6, 0, 0, 0); this.columnTable.BeginUpdate(); for (int i=0; i 0) { this.columnTable.TableModel.Selections.SelectCell(0, 0); this.showButton.Enabled = !this.model.Columns[0].Visible; this.hideButton.Enabled = this.model.Columns[0].Visible; this.widthTextBox.Text = this.model.Columns[0].Width.ToString(); } this.columnTable.EndUpdate(); } #endregion #region Events /*/// /// /// /// /// private void upButton_Click(object sender, System.EventArgs e) { } /// /// /// /// /// private void downButton_Click(object sender, System.EventArgs e) { }*/ /// /// /// /// /// private void showButton_Click(object sender, System.EventArgs e) { int[] indicies = this.columnTable.SelectedIndicies; if (indicies.Length > 0) { this.columnTable.TableModel[indicies[0], 0].Checked = true; this.hideButton.Focus(); } } /// /// /// /// /// private void hideButton_Click(object sender, System.EventArgs e) { int[] indicies = this.columnTable.SelectedIndicies; if (indicies.Length > 0) { this.columnTable.TableModel[indicies[0], 0].Checked = false; this.showButton.Focus(); } } /// /// /// /// /// private void okButton_Click(object sender, EventArgs e) { int[] indicies = this.columnTable.SelectedIndicies; if (indicies.Length > 0) { if (this.widthTextBox.Text.Length == 0) { this.columnTable.TableModel[indicies[0], 0].Tag = Column.MinimumWidth; } else { int width = Convert.ToInt32(this.widthTextBox.Text); if (width < Column.MinimumWidth) { this.columnTable.TableModel[indicies[0], 0].Tag = Column.MinimumWidth; } else { this.columnTable.TableModel[indicies[0], 0].Tag = width; } } } for (int i=0; i /// /// /// /// private void columnTable_SelectionChanged(object sender, SelectionEventArgs e) { if (e.OldSelectedIndicies.Length > 0) { if (this.widthTextBox.Text.Length == 0) { this.columnTable.TableModel[e.OldSelectedIndicies[0], 0].Tag = Column.MinimumWidth; } else { int width = Convert.ToInt32(this.widthTextBox.Text); if (width < Column.MinimumWidth) { this.columnTable.TableModel[e.OldSelectedIndicies[0], 0].Tag = Column.MinimumWidth; } else { this.columnTable.TableModel[e.OldSelectedIndicies[0], 0].Tag = width; } } } if (e.NewSelectedIndicies.Length > 0) { this.showButton.Enabled = !this.columnTable.TableModel[e.NewSelectedIndicies[0], 0].Checked; this.hideButton.Enabled = this.columnTable.TableModel[e.NewSelectedIndicies[0], 0].Checked; this.widthTextBox.Text = this.columnTable.TableModel[e.NewSelectedIndicies[0], 0].Tag.ToString(); } else { this.showButton.Enabled = false; this.hideButton.Enabled = false; this.widthTextBox.Text = "0"; } } /// /// /// /// /// private void columnTable_CellCheckChanged(object sender, CellCheckBoxEventArgs e) { this.showButton.Enabled = !e.Cell.Checked; this.hideButton.Enabled = e.Cell.Checked; } /// /// /// /// /// private void widthTextBox_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsDigit(e.KeyChar) && e.KeyChar != AsciiChars.Backspace && e.KeyChar != AsciiChars.Delete) { if ((Control.ModifierKeys & (Keys.Alt | Keys.Control)) == Keys.None) { e.Handled = true; NativeMethods.MessageBeep(0 /*MB_OK*/); } } } #endregion } #endregion } }