using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using SftTreeLib70; using AxSftTreeLib70; using Softelvdm.OLEConvert; namespace BookTable { /// <summary> /// Summary description for Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.CheckBox uglyCheckBox; private System.Windows.Forms.CheckBox plusMinusCheckBox; private System.Windows.Forms.ImageList itemImageList; private System.Windows.Forms.ImageList buttonImageList; private System.Windows.Forms.Button button1; private System.Windows.Forms.ImageList plusMinusImageList; private System.Windows.Forms.Label label1; public System.Windows.Forms.Label Label5; private System.Windows.Forms.MenuItem menuItem1; private AxSftTreeLib70.AxSftTree axSftTree1; private System.Windows.Forms.ContextMenu ItemContextMenu; private System.Windows.Forms.MenuItem menuItem2; private System.Windows.Forms.MenuItem menuItem3; private System.Windows.Forms.MenuItem menuItem4; private Softelvdm.OCXHelper.SftHelperComponent sftHelperComponent1; private System.ComponentModel.IContainer components; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (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.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1)); this.uglyCheckBox = new System.Windows.Forms.CheckBox(); this.plusMinusCheckBox = new System.Windows.Forms.CheckBox(); this.itemImageList = new System.Windows.Forms.ImageList(this.components); this.buttonImageList = new System.Windows.Forms.ImageList(this.components); this.button1 = new System.Windows.Forms.Button(); this.plusMinusImageList = new System.Windows.Forms.ImageList(this.components); this.label1 = new System.Windows.Forms.Label(); this.Label5 = new System.Windows.Forms.Label(); this.ItemContextMenu = new System.Windows.Forms.ContextMenu(); this.menuItem1 = new System.Windows.Forms.MenuItem(); this.menuItem2 = new System.Windows.Forms.MenuItem(); this.menuItem3 = new System.Windows.Forms.MenuItem(); this.menuItem4 = new System.Windows.Forms.MenuItem(); this.axSftTree1 = new AxSftTreeLib70.AxSftTree(); this.sftHelperComponent1 = new Softelvdm.OCXHelper.SftHelperComponent(this.components); ((System.ComponentModel.ISupportInitialize)(this.axSftTree1)).BeginInit(); this.SuspendLayout(); // // uglyCheckBox // this.uglyCheckBox.Location = new System.Drawing.Point(216, 424); this.uglyCheckBox.Name = "uglyCheckBox"; this.uglyCheckBox.Size = new System.Drawing.Size(189, 23); this.uglyCheckBox.TabIndex = 10; this.uglyCheckBox.Text = "Use \"Plain\" Buttons"; this.uglyCheckBox.CheckedChanged += new System.EventHandler(this.uglyCheckBox_CheckedChanged); // // plusMinusCheckBox // this.plusMinusCheckBox.Location = new System.Drawing.Point(8, 424); this.plusMinusCheckBox.Name = "plusMinusCheckBox"; this.plusMinusCheckBox.Size = new System.Drawing.Size(190, 23); this.plusMinusCheckBox.TabIndex = 9; this.plusMinusCheckBox.Text = "Show Plus/Minus Graphic"; this.plusMinusCheckBox.CheckedChanged += new System.EventHandler(this.plusMinusCheckBox_CheckedChanged); // // itemImageList // this.itemImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; this.itemImageList.ImageSize = new System.Drawing.Size(16, 16); this.itemImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("itemImageList.ImageStream"))); this.itemImageList.TransparentColor = System.Drawing.Color.Yellow; // // buttonImageList // this.buttonImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; this.buttonImageList.ImageSize = new System.Drawing.Size(40, 9); this.buttonImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("buttonImageList.ImageStream"))); this.buttonImageList.TransparentColor = System.Drawing.Color.Yellow; // // button1 // this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.button1.Location = new System.Drawing.Point(376, 8); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(81, 30); this.button1.TabIndex = 8; this.button1.Text = "Close"; this.button1.Click += new System.EventHandler(this.button1_Click); // // plusMinusImageList // this.plusMinusImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; this.plusMinusImageList.ImageSize = new System.Drawing.Size(14, 14); this.plusMinusImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("plusMinusImageList.ImageStream"))); this.plusMinusImageList.TransparentColor = System.Drawing.Color.White; // // label1 // this.label1.Location = new System.Drawing.Point(8, 8); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(366, 37); this.label1.TabIndex = 7; this.label1.Text = "Click on the header buttons to sort books or reorder the second and third column " + "using column drag && drop."; // // Label5 // this.Label5.BackColor = System.Drawing.SystemColors.Control; this.Label5.Cursor = System.Windows.Forms.Cursors.Default; this.Label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.Label5.ForeColor = System.Drawing.SystemColors.ControlText; this.Label5.Location = new System.Drawing.Point(376, 176); this.Label5.Name = "Label5"; this.Label5.RightToLeft = System.Windows.Forms.RightToLeft.No; this.Label5.Size = new System.Drawing.Size(80, 201); this.Label5.TabIndex = 14; this.Label5.Text = "Click on the SftTree/OCX control and hit F1 to access online help for SftTree/OCX" + " 6.0"; this.Label5.Visible = false; // // ItemContextMenu // this.ItemContextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItem1, this.menuItem2, this.menuItem3, this.menuItem4}); // // menuItem1 // this.menuItem1.Index = 0; this.menuItem1.Text = "Edit"; this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click); // // menuItem2 // this.menuItem2.Index = 1; this.menuItem2.Text = "Insert"; this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click); // // menuItem3 // this.menuItem3.Index = 2; this.menuItem3.Text = "Append"; this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click); // // menuItem4 // this.menuItem4.Index = 3; this.menuItem4.Text = "Delete"; this.menuItem4.Click += new System.EventHandler(this.menuItem4_Click); // // axSftTree1 // this.axSftTree1.Location = new System.Drawing.Point(8, 48); this.axSftTree1.Name = "axSftTree1"; this.axSftTree1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axSftTree1.OcxState"))); this.axSftTree1.Size = new System.Drawing.Size(358, 372); this.axSftTree1.TabIndex = 15; this.axSftTree1.ItemDblClick += new AxSftTreeLib70._DSftTreeEvents_ItemDblClickEventHandler(this.axSftTree1_ItemDblClick); this.axSftTree1.ContextMenuEvent += new AxSftTreeLib70._DSftTreeEvents_ContextMenuEventHandler(this.axSftTree1_ContextMenuEvent); this.axSftTree1.ItemClick += new AxSftTreeLib70._DSftTreeEvents_ItemClickEventHandler(this.axSftTree1_ItemClick); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.CancelButton = this.button1; this.ClientSize = new System.Drawing.Size(464, 446); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.axSftTree1, this.Label5, this.uglyCheckBox, this.plusMinusCheckBox, this.button1, this.label1}); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; this.Name = "Form1"; this.Text = "Softel vdm, Inc. - BookTable Sample"; this.Load += new System.EventHandler(this.Form1_Load); ((System.ComponentModel.ISupportInitialize)(this.axSftTree1)).EndInit(); this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } //--locate-marker-- private void button1_Click(object sender, System.EventArgs e) { Application.Exit(); } private void Form1_Load(object sender, System.EventArgs e) { axSftTree1.BulkUpdate = true; // set default item graphic. This can also be done at design time axSftTree1.Items.ItemImageExpanded.SetImageListH((int) itemImageList.Handle, 0); axSftTree1.Items.ItemImageExpandable.SetImageListH((int) itemImageList.Handle, 1); axSftTree1.Items.ItemImageLeaf.SetImageListH((int) itemImageList.Handle, 2); // set column header pictures axSftTree1.get_Header(0).Image.Appearance = SftPictureImageConstants.sftImageSortAsc; axSftTree1.get_Header(1).Image.Clear(); axSftTree1.get_Header(2).Image.Clear(); Random random = new Random(); // set the cell font for books Font fnt = new Font(axSftTree1.Font, FontStyle.Bold); stdole.IFontDisp pFont = OLECvt.ToIFontDisp(fnt); for (int bk = 1 ; bk <= 4 ; ++bk) { // add a book int bookIndex = axSftTree1.Items.Add("Book " + bk.ToString()); axSftTree1.get_Cell(bookIndex, 1).Text = "Description for book " + bk.ToString(); int size = random.Next(1, bk == 1 ? 99 : 999); axSftTree1.get_Cell(bookIndex, 2).Text = size.ToString(); axSftTree1.get_Item(bookIndex).Data = size; // add chapters for (int ch = 1 ; ch <= 2 ; ++ch) { int index = axSftTree1.Items.Add("Chapter " + ch.ToString()); axSftTree1.get_Item(index).Level = 1; // add sections for (int sect = 1 ; sect <= 2 ; ++sect) { index = axSftTree1.Items.Add("Section " + sect.ToString()); axSftTree1.get_Item(index).Level = 2; } } // after adding the book and all dependent items, we // collapse the item, so it's up to the user to expand it axSftTree1.get_Item(bookIndex).Collapse(false); // set font axSftTree1.get_Cell(bookIndex, 0).Font = pFont; } // End of Mass-Update axSftTree1.BulkUpdate = false; // Make columns optimal axSftTree1.ColumnsObj.MakeOptimal(); // allow horizontal scrolling axSftTree1.Items.RecalcHorizontalExtent(); } private void plusMinusCheckBox_CheckedChanged(object sender, System.EventArgs e) { if (plusMinusCheckBox.Checked) { axSftTree1.Items.PlusMinusImageExpandable.NETImageObject = plusMinusImageList.Images[0]; axSftTree1.Items.PlusMinusImageExpanded.NETImageObject = plusMinusImageList.Images[1]; } else { axSftTree1.Items.PlusMinusImageExpandable.Clear(); axSftTree1.Items.PlusMinusImageExpanded.Clear(); } } private void uglyCheckBox_CheckedChanged(object sender, System.EventArgs e) { if (uglyCheckBox.Checked) axSftTree1.ButtonPicture = buttonImageList.Images[0]; else axSftTree1.ButtonPicture = null; } private void SortHeader(short ColNum) { if (axSftTree1.get_Header(ColNum).Image.Appearance == SftPictureImageConstants.sftImageSortAsc) { // Sort the data. Note that column 2 is sorted by Item.Data, which is // an integer value (book size in pages) if (ColNum == 2) axSftTree1.Items.SortDependents(-1, ColNum, SftTreeSortTypeConstants.sortSftTreeDscItemData); else axSftTree1.Items.SortDependents(-1, ColNum, SftTreeSortTypeConstants.sortSftTreeDescending); axSftTree1.get_Header(ColNum).Image.Appearance = SftPictureImageConstants.sftImageSortDesc; } else { axSftTree1.get_Header(0).Image.Clear(); axSftTree1.get_Header(1).Image.Clear(); axSftTree1.get_Header(2).Image.Clear(); // Sort the data. Note that column 2 is sorted by Item.Data, which is // an integer value (book size in pages) if (ColNum == 2) axSftTree1.Items.SortDependents(-1, ColNum, SftTreeSortTypeConstants.sortSftTreeAscItemData); else axSftTree1.Items.SortDependents(-1, ColNum, SftTreeSortTypeConstants.sortSftTreeAscending); axSftTree1.get_Header(ColNum).Image.Appearance = SftPictureImageConstants.sftImageSortAsc; } } private void axSftTree1_ItemClick(object sender, AxSftTreeLib70._DSftTreeEvents_ItemClickEvent e) { SftTreeAreaTypeConstants area = (SftTreeAreaTypeConstants) e.areaType; SftTreeButtonConstants button = (SftTreeButtonConstants) e.button; // respond to click in column header with left mouse button if (area == SftTreeAreaTypeConstants.constSftTreeColumnHeader && button == SftTreeButtonConstants.constSftTreeLeftButton) SortHeader(e.colIndex); else if (area == SftTreeAreaTypeConstants.constSftTreeExpandAll) axSftTree1.get_Item(e.itemIndex).Expand(false, true); } private void axSftTree1_ItemDblClick(object sender, AxSftTreeLib70._DSftTreeEvents_ItemDblClickEvent e) { // Respond to click in column header with left mouse button SftTreeAreaTypeConstants area = (SftTreeAreaTypeConstants) e.areaType; SftTreeButtonConstants button = (SftTreeButtonConstants) e.button; if (area == SftTreeAreaTypeConstants.constSftTreeColumnRes && button == SftTreeButtonConstants.constSftTreeLeftButton) { axSftTree1.get_Column(e.colIndex).MakeOptimal(); axSftTree1.Items.RecalcHorizontalExtent(); } else if (area == SftTreeAreaTypeConstants.constSftTreeColumnHeader && button == SftTreeButtonConstants.constSftTreeLeftButton) SortHeader(e.colIndex); } private void menuItem1_Click(object sender, System.EventArgs e) { MessageBox.Show("This sample doesn't implement any actions for the item menu. Try the column headers instead."); } private void menuItem2_Click(object sender, System.EventArgs e) { MessageBox.Show("This sample doesn't implement any actions for the item menu. Try the column headers instead."); } private void menuItem3_Click(object sender, System.EventArgs e) { MessageBox.Show("This sample doesn't implement any actions for the item menu. Try the column headers instead."); } private void menuItem4_Click(object sender, System.EventArgs e) { MessageBox.Show("This sample doesn't implement any actions for the item menu. Try the column headers instead."); } private void axSftTree1_ContextMenuEvent(object sender, AxSftTreeLib70._DSftTreeEvents_ContextMenuEvent e) { Point point = axSftTree1.PointToScreen(new Point(e.x, e.y)); // Determine click context menu for header or item int l, t, h, w; axSftTree1.Headers.GetPositionPix(out l, out t, out w, out h); if (e.x >= l && e.x < l + w && e.y >= t && e.y <= t + h) { HeaderMenu(PointToClient(point)); return; } // determine item right-clicked int ItemIndex = axSftTree1.Items.HitTestPix(e.x, e.y); if (ItemIndex >= 0 && ItemIndex < axSftTree1.Items.Count) { axSftTree1.Items.Current = ItemIndex; axSftTree1.get_Item(ItemIndex).Selected = true; axSftTree1.CancelMode(); ItemContextMenu.Show(this, PointToClient(point)); } } private void menuHeader_Click(object sender, System.EventArgs e) { MenuItem mItem = (MenuItem) sender; short colIndex = (short) mItem.Index; if (mItem.Checked) axSftTree1.get_Column(colIndex).WidthPix = 0; else axSftTree1.get_Column(colIndex).MakeOptimal(); axSftTree1.Items.RecalcHorizontalExtent(); mItem.Checked = !mItem.Checked; } private void menuHeaderShowAll_Click(object sender, System.EventArgs e) { axSftTree1.ColumnsObj.MakeOptimal(); } private void HeaderMenu(Point cursor) { System.Windows.Forms.ContextMenu menu = new ContextMenu(); System.Windows.Forms.MenuItem mItem; int count = 0; for (short c = 0 ; c < axSftTree1.ColumnsObj.Count ; ++c) { mItem = new System.Windows.Forms.MenuItem(); mItem.Text = axSftTree1.get_Header(c).Text; if (axSftTree1.get_Column(c).WidthPix > 0) { mItem.Checked = true; ++count; } else mItem.Checked = false; mItem.Click += new System.EventHandler(menuHeader_Click); menu.MenuItems.Add(mItem); } if (count <= 1) { for (short c = 0 ; c < axSftTree1.ColumnsObj.Count ; ++c) { if (menu.MenuItems[c].Checked) menu.MenuItems[c].Enabled = false; else menu.MenuItems[c].Enabled = true; } } mItem = new System.Windows.Forms.MenuItem("-"); menu.MenuItems.Add(mItem); mItem = new System.Windows.Forms.MenuItem("&Show All"); mItem.Enabled = (count < axSftTree1.ColumnsObj.Count); mItem.Click += new System.EventHandler(menuHeaderShowAll_Click); menu.MenuItems.Add(mItem); axSftTree1.CancelMode(); menu.Show(this, cursor); } } }