Click here to Skip to main content
15,885,914 members
Articles / Desktop Programming / MFC

SolidGraph CAD System

Rate me:
Please Sign up or sign in to vote.
4.97/5 (78 votes)
12 Sep 20062 min read 375.3K   29.8K   209  
A SolidGraph CAD system source code.
// SystemToolbar.cpp : implementation file
//

#include "stdafx.h"
#include "..//Solidgraph.h"
#include "SystemToolbar.h"
#include ".\systemtoolbar.h"

// CSystemToolbar

IMPLEMENT_DYNAMIC(CSystemToolbar, CEGToolBar)
CSystemToolbar::CSystemToolbar()
{
}

CSystemToolbar::~CSystemToolbar()
{
}


BEGIN_MESSAGE_MAP(CSystemToolbar, CEGToolBar)
	ON_WM_CTLCOLOR()
END_MESSAGE_MAP()

void   CSystemToolbar::LoadControls()
{
	//SetButtonInfo(10, ID_SLOI, TBBS_SEPARATOR, 100);

	CRect rect;
	/*GetItemRect(10, &rect);
	rect.top = 1;
	rect.bottom = rect.top + 200;
	rect.right = rect.left+100;
	if (!m_LayersComboBox.Create(
		CBS_DROPDOWNLIST|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL,
		rect, this, ID_SLOI))
	{
		TRACE("Failed to create combo-box\n");
		return;
	}*/

	SetButtonInfo(4, ID_TOCHN1, TBBS_SEPARATOR, 50);
	GetItemRect(4, &rect);
	rect.right = rect.left+50;
	rect.top = 1;
	if (!m_empty_static.Create("       ",WS_VISIBLE,rect, this))
	{
		TRACE("Failed to create static\n");
		return;
	}
	rect.top = 5;
	CString prSt;
	prSt.LoadString(IDS_PRECISION_STRING);
	if (!m_Precision_label.Create(prSt,WS_VISIBLE|WS_TABSTOP,rect, this,ID_TOCHN1))
	{
		TRACE("Failed to create static\n");
		return;
	}

	SetButtonInfo(5, ID_TOCHN2, TBBS_SEPARATOR, 100);
	GetItemRect(5, &rect);
	rect.top = 1;
	rect.bottom = rect.top + 200;
	rect.right = rect.left+100;
	if (!m_PrecisionComboBox.Create(
		CBS_DROPDOWNLIST|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL,
		rect, this, ID_TOCHN2))
	{
		TRACE("Failed to create combo-box\n");
		return;
	}

	CString precStr;
	for (int i=0;i<PREC_COUNT;i++)
	{
		precStr.Format("%.3f",precisions[i]);
		m_PrecisionComboBox.AddString(precStr);
	}

	SetButtonInfo(7, ID_CVET, TBBS_SEPARATOR, 100);
	GetItemRect(7, &rect);
	unsigned int ComboH = rect.Height()-6;
	rect.top = 1;
	rect.bottom = rect.top + 200;
	rect.right = rect.left+100;
	if (!m_ColorComboBox.Create(CBS_DROPDOWNLIST|CBS_OWNERDRAWFIXED|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL,
		rect, this, ID_CVET))
	{
		TRACE("Failed to create combo-box\n");
		return;
	}
	m_ColorComboBox.SetItemHeight(-1,ComboH);
	m_ColorComboBox.InitializeDefaultColors();

	SetButtonInfo(9, ID_TOLZHINA, TBBS_SEPARATOR, 100);
	GetItemRect(9, &rect);
	rect.top = 1;
	rect.bottom = rect.top + 200;
	rect.right = rect.left+100;
	if (!m_line_thicknessComboBox.Create(CBS_DROPDOWNLIST|CBS_OWNERDRAWFIXED|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL,
		rect, this, ID_TOLZHINA))
	{
		TRACE("Failed to create combo-box\n");
		return;
	}
	
	m_line_thicknessComboBox.SetItemHeight(-1,ComboH);

	SetButtonInfo(11, ID_TIPLINII, TBBS_SEPARATOR, 100);
	GetItemRect(11, &rect);
	rect.top = 1;
	rect.bottom = rect.top + 200;
	rect.right = rect.left+100;
	if (!m_line_typeComboBox.Create(CBS_DROPDOWNLIST|CBS_OWNERDRAWFIXED|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL,
		rect, this, ID_TIPLINII))
	{
		TRACE("Failed to create combo-box\n");
		return;
	}

	m_line_typeComboBox.SetItemHeight(-1,ComboH);

	SetButtonInfo(14, ID_ATT_FONTS, TBBS_SEPARATOR, 100);
	GetItemRect(14, &rect);
	rect.top = 1;
	rect.bottom = rect.top + 200;
	rect.right = rect.left+100;
	if (!m_Fonts_ComboBox.Create(CBS_DROPDOWNLIST|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL,
		rect, this, ID_ATT_FONTS))
	{
		TRACE("Failed to create combo-box\n");
		return;
	}
	m_Fonts_ComboBox.SetItemHeight(-1,ComboH);
}


void  CSystemToolbar::SetView(CSolidgraphView* v)
{
	ASSERT(v);
	m_view = v;

	/*m_LayersComboBox.ResetContent();
	CString  labl;
	labl.LoadString(IDS_LAYER_LABEL);
	CString  curLbl;
	unsigned char lCnt = sgGetScene()->GetLayersCount();
	for (unsigned char i=0;i<lCnt;i++)
	{
		curLbl.Format(" %i",i);
		m_LayersComboBox.AddString(labl+curLbl);
	}
	m_LayersComboBox.SetCurSel(0);*/

	if (global_3D_document)
	{
		SCENE_SETUPS  tmpCV;
		global_3D_document->GetSceneSetups(tmpCV);
		//m_LayersComboBox.SetCurSel(tmpCV.CurrentLayer);
		m_PrecisionComboBox.SetCurSel(tmpCV.CurrentPrecision);
		m_ColorComboBox.SetCurSel(tmpCV.CurrentColor);
		m_line_thicknessComboBox.SetCurSel(tmpCV.CurrentLineThickness);
		m_line_typeComboBox.SetCurSel(tmpCV.CurrentLineType);
	}
	else
	{
		ASSERT(0);
		//m_LayersComboBox.SetCurSel(0);
		m_PrecisionComboBox.SetCurSel(0);
		m_ColorComboBox.SetCurSel(0);
		m_line_thicknessComboBox.SetCurSel(0);
		m_line_typeComboBox.SetCurSel(0);
	}
}

void    CSystemToolbar::UpdateSystemToolbar()
{
	ASSERT(m_view);
	/*m_LayersComboBox.ResetContent();
	CString  labl;
	labl.LoadString(IDS_LAYER_LABEL);
	CString  curLbl;
	unsigned char lCnt = sgGetScene()->GetLayersCount();
	for (unsigned char i=0;i<lCnt;i++)
	{
		curLbl.Format(" %i",i);
		m_LayersComboBox.AddString(labl+curLbl);
	}*/
	SCENE_SETUPS  tmpCV;
	if (global_3D_document)
		global_3D_document->GetSceneSetups(tmpCV);

	//m_LayersComboBox.SetCurSel(tmpCV.CurrentLayer);
	//m_view->GetDocument()->SetCurLayer(tmpCV.CurrentLayer);

	m_Fonts_ComboBox.ResetContent();
	/*
	Only in register version
	*/
}


HBRUSH CSystemToolbar::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CEGToolBar::OnCtlColor(pDC, pWnd, nCtlColor);

	//if(pWnd->GetDlgCtrlID() == ID_TOCHN1)
	if (pWnd->GetRuntimeClass()==RUNTIME_CLASS(CStatic))
	{
		pDC->SetBkMode(TRANSPARENT);

		LOGBRUSH lb;
		lb.lbStyle = BS_NULL;
		lb.lbColor = RGB(255, 0, 255);
		lb.lbHatch = HS_HORIZONTAL | HS_VERTICAL;
		hbr = CreateBrushIndirect(&lb);

	}
	// TODO: Return a different brush if the default is not desired
	return hbr;
}







#define    CONTROLS_FONT_HEIGHT    12
#define    CONTROLS_FONT_WEIDTH     FW_NORMAL
#define    CONTROLS_FONT		   _T("MS Shell Dlg")

BEGIN_MESSAGE_MAP(CMyComboBox, CComboBox)
	ON_WM_CREATE()
END_MESSAGE_MAP()

int CMyComboBox::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CComboBox::OnCreate(lpCreateStruct) == -1)
		return -1;

	if( !CreateFont(CONTROLS_FONT_HEIGHT, CONTROLS_FONT_WEIDTH, CONTROLS_FONT) )
	{
		TRACE0("Failed to create font for combo box\n");
		return -1;      // fail to create
	}

	return 0;
}

BOOL CMyComboBox::CreateFont(LONG lfHeight, LONG lfWeight, LPCTSTR lpszFaceName)
{
	//  Create a font for the combobox
	LOGFONT logFont;
	memset(&logFont, 0, sizeof(logFont));

	if (!::GetSystemMetrics(SM_DBCSENABLED))
	{
		// Since design guide says toolbars are fixed height so is the font.
		logFont.lfHeight = lfHeight;
		logFont.lfWeight = lfWeight;
		CString strDefaultFont = lpszFaceName;
		lstrcpy(logFont.lfFaceName, strDefaultFont);
		if (!m_font.CreateFontIndirect(&logFont))
		{
			TRACE("Could Not create font for combo\n");
			return FALSE;
		}		
	}
	else
	{
		m_font.Attach(::GetStockObject(SYSTEM_FONT));
	}
	SetFont(&m_font);
	return TRUE;
}

BEGIN_MESSAGE_MAP(CLayersComboBox, CMyComboBox)
	ON_CONTROL_REFLECT(CBN_SELCHANGE, OnCbnSelchange)
END_MESSAGE_MAP()
void CLayersComboBox::OnCbnSelchange()
{
	SCENE_SETUPS tmpSS;
	global_3D_document->GetSceneSetups(tmpSS);
	tmpSS.CurrentLayer = GetCurSel();
	global_3D_document->SetSceneSetups(tmpSS);
}

BEGIN_MESSAGE_MAP(CPrecisionComboBox, CMyComboBox)
	ON_CONTROL_REFLECT(CBN_SELCHANGE, OnCbnSelchange)
END_MESSAGE_MAP()
void CPrecisionComboBox::OnCbnSelchange()
{
	SCENE_SETUPS tmpSS;
	global_3D_document->GetSceneSetups(tmpSS);
	tmpSS.CurrentPrecision = GetCurSel();
	global_3D_document->SetSceneSetups(tmpSS);
}




BEGIN_MESSAGE_MAP(CPrecisionStatic, CStatic)
	ON_WM_CREATE()
//	ON_WM_ERASEBKGND()
END_MESSAGE_MAP()

int CPrecisionStatic::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CStatic::OnCreate(lpCreateStruct) == -1)
		return -1;

	if( !CreateFont(CONTROLS_FONT_HEIGHT, CONTROLS_FONT_WEIDTH, CONTROLS_FONT) )
	{
		TRACE0("Failed to create font for combo box\n");
		return -1;      // fail to create
	}
	return 0;
}

BOOL CPrecisionStatic::CreateFont(LONG lfHeight, LONG lfWeight, LPCTSTR lpszFaceName)
{
	//  Create a font for the combobox
	LOGFONT logFont;
	memset(&logFont, 0, sizeof(logFont));

	if (!::GetSystemMetrics(SM_DBCSENABLED))
	{
		// Since design guide says toolbars are fixed height so is the font.
		logFont.lfHeight = lfHeight;
		logFont.lfWeight = lfWeight;
		CString strDefaultFont = lpszFaceName;
		lstrcpy(logFont.lfFaceName, strDefaultFont);
		if (!m_font.CreateFontIndirect(&logFont))
		{
			TRACE("Could Not create font for combo\n");
			return FALSE;
		}		
	}
	else
	{
		m_font.Attach(::GetStockObject(SYSTEM_FONT));
	}
	SetFont(&m_font);
	return TRUE;
}


BEGIN_MESSAGE_MAP(CColorComboBox, CColorPickerCB)
	ON_CONTROL_REFLECT(CBN_SELCHANGE, OnCbnSelchange)
END_MESSAGE_MAP()

void CColorComboBox::OnCbnSelchange()
{
	SCENE_SETUPS tmpSS;
	global_3D_document->GetSceneSetups(tmpSS);
	tmpSS.CurrentColor = GetCurSel();
	global_3D_document->SetSceneSetups(tmpSS);
}




BEGIN_MESSAGE_MAP(CLineThicknessComboBox, CLineThiknessCombo)
	ON_CONTROL_REFLECT(CBN_SELCHANGE, OnCbnSelchange)
END_MESSAGE_MAP()

void CLineThicknessComboBox::OnCbnSelchange()
{
	SCENE_SETUPS tmpSS;
	global_3D_document->GetSceneSetups(tmpSS);
	tmpSS.CurrentLineThickness = GetCurSel();
	global_3D_document->SetSceneSetups(tmpSS);
}

BEGIN_MESSAGE_MAP(CLineTypeComboBox, CLineStyleCombo)
	ON_CONTROL_REFLECT(CBN_SELCHANGE, OnCbnSelchange)
END_MESSAGE_MAP()

void CLineTypeComboBox::OnCbnSelchange()
{
	SCENE_SETUPS tmpSS;
	global_3D_document->GetSceneSetups(tmpSS);
	tmpSS.CurrentLineType = GetCurSel();
	global_3D_document->SetSceneSetups(tmpSS);
}


BEGIN_MESSAGE_MAP(CFontsComboBox, CMyComboBox)
	ON_CONTROL_REFLECT(CBN_SELCHANGE, OnCbnSelchange)
END_MESSAGE_MAP()
void CFontsComboBox::OnCbnSelchange()
{
	/*
	Only in register version
	*/
}

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 has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
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