Click here to Skip to main content
15,896,207 members
Articles / Desktop Programming / WPF

Integration: Kinematics + Digital Image Processing + 3D Graphics

Rate me:
Please Sign up or sign in to vote.
5.00/5 (4 votes)
9 Sep 2012CPOL12 min read 25.5K   3.4K   18  
Further promotion of integration ideas
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 Common.UI;

using CommonControls.Interfaces;

using DataWarehouse;
using DataWarehouse.Interfaces;

namespace DataWarehouse.UserControls
{
    /// <summary>
    /// User control for database tree
    /// </summary>
    public partial class UserControlTree : UserControl
    {

        #region Fields
        string ext;
        DatabaseInterface data;
        Image image;

        private event Action<TreeNode> onRemove = (TreeNode n) => { };

        private event Action<string> onSearch = (string text) => { };

        #endregion

        #region Ctor

        public UserControlTree()
        {
            InitializeComponent();
        }

        #endregion

        #region Public

        public event Action<TreeNode> OnRemove
        {
            add { onRemove += value; }
            remove { onRemove -= value; }
        }


        public event Action<string> OnSearch
        {
            add { onSearch += value; }
            remove { onSearch -= value; }
        }


        public void Set(DatabaseInterface data, string ext, Image image)
        {
            this.data = data;
            this.image = image;
            ImageList l = new ImageList();
            l.Images.Add(ResourceImage.CLSDFOLD);
            l.Images.Add(ResourceImage.OPENFOLD);
            l.Images.Add(image);
            treeViewMain.ImageList = l;
            //  treeViewMain.ImageIndex = 0;
            //  treeViewMain.SelectedImageIndex = 1;
            fill();
            this.ext = ext;
         }

        public TreeView Tree
        {
            get
            {
                return treeViewMain;
            }
        }

        public void DeleteNodeTag(INode node)
        {
            Func<INode, TreeNode, bool> f = (INode n, TreeNode tn)
                =>
                {
                    if (n == node)
                    {
                        tn.Remove();
                        return true;
                    }
                    return false;
                };
            treeViewMain.Perform<INode>(f);
        }

        #endregion

        #region Event Handlers

        private void treeViewMain_MouseDown(object sender, MouseEventArgs e)
        {
            TreeNode node = treeViewMain.GetNodeAt(e.Location);
            if (node == null)
            {
                return;
            }
            object o = node.Tag;
            if (o == null)
            {
                return;
            }
            if (!(o is ILeaf))
            {
                return;
            }
            IStreamCreator sc = new DatabaseStreamCreator(o as ILeaf);
            treeViewMain.DoDragDrop(sc, DragDropEffects.All);
        }

        private void refresh()
        {
            try
            {
                treeViewMain.Nodes[0].Remove();
                fill();
            }
            catch (Exception)
            {
            }
        }

        private void toolStripButtonRefresh_Click(object sender, EventArgs e)
        {
            refresh();
        }

        private void toolStripButtonFind_Click(object sender, EventArgs e)
        {
            Search();
        }

        private void toolStripTextBoxFind_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                Search();
            }
        }

        private void removeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TreeNode tn = treeViewMain.SelectedNode;
            if (tn != null)
            {
                onRemove(tn);
            }
        }
        private void saveToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SelectedNode.Save();
        }


        #endregion

        #region Private

        private INode SelectedNode
        {
            get
            {
                TreeNode tn = treeViewMain.SelectedNode;
                if (tn == null)
                {
                    return null;
                }
                return tn.Tag as INode;
            }
        }

        void Search()
        {
            string s = toolStripTextBoxFind.Text;
            if (s.Length > 0)
            {
                onSearch(s);
            }
        }

   
        void fill()
        {
            IDirectory[] dir = data.GetRoots(new string[] { ext });
            foreach (IDirectory d in dir)
            {
                treeViewMain.Nodes.Add(d.GetNode());
            }
        }

        #endregion




    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect
Russian Federation Russian Federation
Ph. D. Petr Ivankov worked as scientific researcher at Russian Mission Control Centre since 1978 up to 2000. Now he is engaged by Aviation training simulators http://dinamika-avia.com/ . His additional interests are:

1) Noncommutative geometry

http://front.math.ucdavis.edu/author/P.Ivankov

2) Literary work (Russian only)

http://zhurnal.lib.ru/editors/3/3d_m/

3) Scientific articles
http://arxiv.org/find/all/1/au:+Ivankov_Petr/0/1/0/all/0/1

Comments and Discussions