// PaneAssets.cpp : implementation file // // (c)1998-2025 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "GaugeBrowser.h" #include "GaugeRectTracker.h" #include "GaugeBrowserDoc.h" #include "GaugeBrowserView.h" #include "PaneAssets.h" #include #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPaneAssets CPaneAssets::CPaneAssets() : m_pGI(NULL) { m_iComboHeight = ::GetSystemMetrics(SM_CYVTHUMB); } CPaneAssets::~CPaneAssets() { } BEGIN_MESSAGE_MAP(CPaneAssets, CStatic) //{{AFX_MSG_MAP(CPaneAssets) ON_WM_CREATE() ON_WM_SIZE() ON_WM_ERASEBKGND() ON_WM_PAINT() //}}AFX_MSG_MAP ON_CBN_SELCHANGE(IDC_COMBO_SVG, OnSelChangeComboSVG) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPaneAssets message handlers int CPaneAssets::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CStatic::OnCreate(lpCreateStruct) == -1) return -1; if (!m_comboSVG.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT, XTP_DPI_RECT(CRect(0, 0, 0, m_iComboHeight)), this, IDC_COMBO_SVG)) return -1; m_comboSVG.SetFont(XTPPaintManager()->GetRegularFont()); return 0; } void CPaneAssets::OnSize(UINT nType, int cx, int cy) { CStatic::OnSize(nType, cx, cy); if (::IsWindow(m_comboSVG.m_hWnd)) { //-- get text size. CWindowDC dc(NULL); CXTPFontDC font(&dc, XTPPaintManager()->GetRegularFont()); CSize sizeText = dc.GetTextExtent(_T("SVG Image:")); CPoint ptCombo; ptCombo.x = sizeText.cx + XTP_DPI_X(10); ptCombo.y = XTP_DPI_Y(5); CSize szCombo; szCombo.cx = cx - sizeText.cx - XTP_DPI_X(10); szCombo.cy = m_iComboHeight; m_comboSVG.MoveWindow(CRect(ptCombo, szCombo)); m_comboSVG.Invalidate(FALSE); } RedrawWindow(); } BOOL CPaneAssets::OnEraseBkgnd(CDC* /*pDC*/) { return FALSE; } void CPaneAssets::OnPaint() { CPaintDC dc(this); // device context for painting CXTPClientRect rcClient(this); CXTPBufferDC memDC(dc, rcClient, ::GetSysColor(COLOR_BTNFACE)); //-- get text size. CXTPFontDC font(&memDC, XTPPaintManager()->GetRegularFont()); CSize sizeText = memDC.GetTextExtent(_T("SVG Image:")); CRect rcText(XTP_DPI_X(5), XTP_DPI_Y(5), sizeText.cx + XTP_DPI_X(5), m_iComboHeight + XTP_DPI_Y(5)); //-- draw text. memDC.SetBkMode(TRANSPARENT); memDC.DrawText(_T("SVG Image:"), &rcText, DT_SINGLELINE | DT_VCENTER | DT_LEFT); //-- offset for border and combo box. rcClient.top += m_iComboHeight + XTP_DPI_Y(15); //-- draw checkboard pattern. theApp.DrawCheckerBoard(&memDC, rcClient, ::GetSysColor(COLOR_BTNHIGHLIGHT), ::GetSysColor(COLOR_BTNFACE), ::GetSysColor(COLOR_BTNSHADOW)); //-- draw selected svg image. DrawImage(&memDC, rcClient); } void CPaneAssets::DrawImage(CDC* pDC, CRect& rcClient) { if (!::IsWindow(m_comboSVG.m_hWnd) || m_comboSVG.GetCount() == 0) return; int nSel = m_comboSVG.GetCurSel(); int nLen = m_comboSVG.GetLBTextLen(nSel); CString strImageName; m_comboSVG.GetLBText(nSel, strImageName.GetBuffer(nLen)); strImageName.ReleaseBuffer(); CString strImagePath; strImagePath.Format(_T("%s\\%s"), m_pGI->pRepoItem->strPath, strImageName); CXTPSvgImage svgImage; if (svgImage.Load(strImagePath)) { rcClient.DeflateRect(XTP_DPI_X(10), XTP_DPI_Y(10)); svgImage.Draw(pDC, rcClient); } else { CXTPFontDC font(pDC, XTPPaintManager()->GetRegularFont()); pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT)); pDC->DrawText(_T("(File Not Found)"), rcClient, DT_CENTER | DT_SINGLELINE | DT_VCENTER); } } void CPaneAssets::OnSelChangeComboSVG() { RedrawWindow(); } void CPaneAssets::UpdateComboBox() { if (::IsWindow(m_comboSVG.m_hWnd) && (m_pGI != NULL)) { m_comboSVG.ResetContent(); for (int i = 0; i < m_pGI->svgList.GetSize(); i++) { m_comboSVG.AddString(m_pGI->svgList[i]); } if (m_comboSVG.GetCount() > 0) { m_comboSVG.SetCurSel(0); } OnSelChangeComboSVG(); } } void CPaneAssets::SetGaugeInfo(CGaugeInfo* pGI) { ASSERT(pGI != NULL); if (pGI == NULL) return; m_pGI = pGI; UpdateComboBox(); }