using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using Softelvdm.SftTreeNET;
using Softelvdm.Controls;

namespace WindowsApplication1 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        Image m_PlusImage;
        Image m_MinusImage;

        private void Form1_Load(object sender, EventArgs e) {
            // This sample demonstrates how use the control as a category list (similar to 
            // Visual Studio's Toolbox.
            // To prepare for this sample, create a new project with a blank form and add
            // a SftTree/NET control named sftTree1.
            // In addition, adjust the following FromFile methods to use a (small) bitmaps
            // that are located on your system.
            m_PlusImage = Bitmap.FromFile("..\\..\\ExpandableNormal.bmp"); // a small + bitmap
            m_MinusImage = Bitmap.FromFile("..\\..\\CollapsableNormal.bmp"); // a small - bitmap
            Image img = Bitmap.FromFile("..\\..\\test.gif"); // a small sample bitmap

            // Most of this initialization code could be eliminated by designing the control.
            sftTree1.Initializing = true;
            sftTree1.Headers.Rows = 0;
            sftTree1.Footers.Rows = 0;
            sftTree1.Dimensions.LevelIndent = 5; // indent just a few pixels for level 1 items
            sftTree1.TreeLineStyle = TreeLineStyleEnum.None;
            sftTree1.ShowExpandCollapseButtons = ShowExpandCollapseButtonsEnum.None;
            sftTree1.RowHeaders.Width = 0;
            sftTree1.ShowFocusRectangle = false;
            sftTree1.ItemClick += sftTree1_ItemClick;
            sftTree1.ItemDoubleClick += sftTree1_ItemDoubleClick;
            sftTree1.ShowToolTip += new SftTree.ShowToolTipEventHandler(sftTree1_ShowToolTip);
            sftTree1.ToolTip.ShowAlways = true;
            sftTree1.ToolTip.Style = ToolTipAppearanceEnum.Balloon;

            ItemClass cat;
            cat = AddCategory("Category 1");
             AddItem(cat, img, "Item 1");
             AddItem(cat, img, "Item 2");
             AddItem(cat, img, "Item 3");
            cat = AddCategory("Category 2");
             AddItem(cat, img, "Item A");
             AddItem(cat, img, "Item B");
             AddItem(cat, img, "Item C");
             AddItem(cat, img, "Item D");
             AddItem(cat, img, "Item E");
            cat = AddCategory("Category 3");
             AddItem(cat, img, "Item A1");
             AddItem(cat, img, "Item A2");
            cat = AddCategory("Category 4");
             AddItem(cat, img, "Item D1");
            cat = AddCategory("Category 5");
             AddItem(cat, img, "Item G1");
             AddItem(cat, img, "Item G2");
             AddItem(cat, img, "Item G3");
             AddItem(cat, img, "Item G4");
             AddItem(cat, img, "Item G5");
             AddItem(cat, img, "Item G6");
             AddItem(cat, img, "Item G7");
             AddItem(cat, img, "Item G8");
            cat = AddCategory("Category 6");
             AddItem(cat, img, "Item aa");
             AddItem(cat, img, "Item bb");
             AddItem(cat, img, "Item cc");
             AddItem(cat, img, "Item dd");
             AddItem(cat, img, "Item ee");
            cat = AddCategory("Category 7");
             AddItem(cat, img, "Item 123");
             AddItem(cat, img, "Item abc");
                        
            sftTree1.Columns.MakeOptimal(0, false);
            sftTree1.RecalcHorizontalExtent();
            sftTree1.Initializing = false;
        }

        private ItemClass AddCategory(string Category) {
            ItemClass item = sftTree1.ItemCollection.Add();
            CellClass cell = item.Cells[0];
            cell.Appearance = BackgroundAppearanceEnum.ThemedSystemHeaderNeverPressed;
            cell.Parts.Add(new ImagePartClass(m_PlusImage));
            cell.Parts.Add(new TextPartClass(Category));
            item.TagString = "This is a tooltip explaining " + Category;
            return item;
        }
        private void AddItem(ItemClass cat, Image img, string ItemText) {
            ItemClass item = cat.Add();
            CellClass cell = item.Cells[0];
            cell.Parts.Add(new ImagePartClass(img));
            cell.Parts.Add(new TextPartClass(ItemText));
            item.TagString = "This is a tooltip for an item labeled " + ItemText;
        }

        private void ClickCategory(ItemClass item)
        {
            if (item.Level == 0) {
                bool fWasExpanded = item.Expanded;
                if (fWasExpanded) {
                    item.Collapse(CollapseStyleEnum.All);
                    item.Cells[0].Image = m_PlusImage;
                } else {
                    item.Expand(ExpandStyleEnum.All);
                    item.Cells[0].Image = m_MinusImage;
                }
                item.ScrollIntoView();
            } else {
                // selected an item
            }
        }

        void sftTree1_ShowToolTip(object sender, ToolTipEventArgs e) {
            ItemClass item = e.Cell.OwningItem;
            e.ToolTipText = item.TagString;
        }

        private void sftTree1_ItemClick(object sender, Softelvdm.SftTreeNET.ItemClickEventArgs e) {
            if (e.MouseEv.Button == MouseButtons.Left &&  e.Area == ItemClickAreaEnum.CellSel) {
                ClickCategory(e.Item);
            }
        }

        private void sftTree1_ItemDoubleClick(object sender, ItemClickEventArgs e) {
            if (e.MouseEv.Button == MouseButtons.Left && e.Area == ItemClickAreaEnum.CellSel) {
                ClickCategory(e.Item);
            }
        }

    }
}