Click here to Skip to main content
15,898,035 members
Articles / Desktop Programming / Win32

OpenS-CAD, a simple 2D CAD application

Rate me:
Please Sign up or sign in to vote.
4.92/5 (89 votes)
30 Dec 2007CPOL14 min read 341.3K   31.3K   222  
A simple 2D CAD application.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace CommonTools
{
	public partial class PropertyDialog : Form
	{
		public PropertyDialog()
		{
			this.DoubleBuffered = true;
			InitializeComponent();
		}
		
		Size m_viewSize = Size.Empty;
		Dictionary<object, object> m_dataObjects = new Dictionary<object, object>();
		
		public void BeforeLoadPages()
		{
			m_viewSize = m_viewPanel.Size;
			m_treeView.BeginUpdate();
		}
		public TreeNode AddPage(object key, Control page, object dataobject)
		{
			return AddPage(key, page, null, dataobject);
		}
		public TreeNode AddPage(object key, Control page, TreeNode parentnode, object dataobject)
		{
			if (page.Width > m_viewSize.Width)
				m_viewSize.Width = page.Width;
			if (page.Height > m_viewSize.Height)
				m_viewSize.Height = page.Height;

			m_viewPanel.AddView(key, page);
			m_dataObjects[key] = dataobject;

			TreeNode newnode = new TreeNode(page.Text);
			newnode.Tag = key;
			if (parentnode != null)
				parentnode.Nodes.Add(newnode);
			else
				m_treeView.Nodes.Add(newnode);
			return newnode;
		}
		public void AfterLoadPages()
		{
			if (m_treeView.Nodes.Count > 0)
				m_treeView.SelectedNode = m_treeView.Nodes[0];
			m_treeView.EndUpdate();

			int diffx = m_viewSize.Width - m_viewPanel.Width;
			int diffy = m_viewSize.Height - m_viewPanel.Height;
			if (diffx < 0)
				diffx = 0;
			if (diffy < 0)
				diffy = 0;
			this.Width += diffx;
			this.Height += diffy;
			this.MinimumSize = this.Size;
		}
		public void SelectPage(object key)
		{
			TreeIteratorMatchTag it = new TreeIteratorMatchTag(m_treeView, key);
			TreeNode node = it.Execute();
			if (node != null)
				m_treeView.SelectedNode = node;
		}
		private void OnAfterTreeSelect(object sender, TreeViewEventArgs e)
		{
			IPropertyDialogPage curpage = m_viewPanel.GetView(m_viewPanel.CurKey) as IPropertyDialogPage;
			if (curpage != null)
				curpage.BeforeDeactivated(m_dataObjects[m_viewPanel.CurKey]);

			curpage = m_viewPanel.GetView(m_treeView.SelectedNode.Tag) as IPropertyDialogPage;
			if (curpage != null)
				curpage.BeforeActivated(m_dataObjects[m_treeView.SelectedNode.Tag]);

			m_viewPanel.SelectView(m_treeView.SelectedNode.Tag);
			m_label.Text = m_treeView.SelectedNode.Text;
		}
	}
}

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
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions