// ClassViewPane.cpp // // (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 "GUI_VisualStudio.h" #include "ClassViewPane.h" #ifdef _DEBUG # define new DEBUG_NEW #endif IMPLEMENT_DYNAMIC(CClassViewPane, CWnd); BEGIN_MESSAGE_MAP(CClassViewPane, CWnd) ON_WM_CREATE() ON_WM_SIZE() ON_WM_PAINT() ON_WM_SETFOCUS() ON_MESSAGE(WM_XTP_SETCONTROLTHEME, OnSetControlTheme) ON_COMMAND(ID_PROJECT_ADDEXISTINGITEM, OnProjectAddExistingItem) END_MESSAGE_MAP() CClassViewPane::CClassViewPane() { m_pPane = NULL; m_rcMargin = CRect(0, 0, 0, 0); } CClassViewPane::~CClassViewPane() { } int CClassViewPane::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) { TRACE(_T("ERROR: Unable to create class view pane.\n")); return -1; } if (!m_wndToolBar.CreateToolBar(WS_TABSTOP | WS_VISIBLE | WS_CHILD | CBRS_TOOLTIPS, this)) { TRACE(_T("ERROR: Unable to create class view pane toolbar.\n")); return 0; } m_wndToolBar.SetFlags(xtpFlagNoBorders); UINT toolbar[] = { ID_PROJECT_ADDEXISTINGITEM }; m_wndToolBar.SetButtons(toolbar, _countof(toolbar)); if (!m_wndClassView.Create(_T("SYSTREEVIEW32"), NULL, WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS, CRect(0, 0, 0, 0), this, 0xFF)) { TRACE(_T("ERROR: Unable to create tree control.\n")); return 0; } m_wndClassView.ModifyStyleEx(0, WS_EX_STATICEDGE); // Add the parent item HTREEITEM htItem = m_wndClassView.InsertItem(_T("ToolkitProDemo classes")); m_wndClassView.SetItemState(htItem, TVIS_BOLD, TVIS_BOLD); // Add children HTREEITEM hti = m_wndClassView.InsertItem(_T("CAboutDlg"), 3, 3, htItem); m_wndClassView.InsertItem(_T("CAboutDlg()"), 4, 4, hti); m_wndClassView.InsertItem(_T("DoDataExchange(CDataExchange *pDX)"), 5, 5, hti); hti = m_wndClassView.InsertItem(_T("CChildFrame"), 3, 3, htItem); m_wndClassView.InsertItem(_T("AssertValid()"), 4, 4, hti); m_wndClassView.InsertItem(_T("CChildFrame()"), 4, 4, hti); m_wndClassView.InsertItem(_T("~CChildFrame()"), 4, 4, hti); m_wndClassView.InsertItem(_T("Dump(CDumpContext &dc)"), 4, 4, hti); m_wndClassView.InsertItem(_T("PreCreateWindow(CREATESTRUCT& cs)"), 4, 4, hti); hti = m_wndClassView.InsertItem(_T("CMainFrame"), 3, 3, htItem); m_wndClassView.InsertItem(_T("AssertValid()"), 4, 4, hti); m_wndClassView.InsertItem(_T("CMainFrame()"), 4, 4, hti); m_wndClassView.InsertItem(_T("~CMainFrame()"), 4, 4, hti); m_wndClassView.InsertItem(_T("Dump(CDumpContext &dc)"), 4, 4, hti); m_wndClassView.InsertItem(_T("OnCreate(LPCREATESTRUCT lpCreateStruct)"), 5, 5, hti); m_wndClassView.InsertItem(_T("PreCreateWindow(CREATESTRUCT& cs)"), 4, 4, hti); m_wndClassView.InsertItem(_T("m_wndStatusBar"), 7, 7, hti); m_wndClassView.InsertItem(_T("m_wndToolBar"), 7, 7, hti); hti = m_wndClassView.InsertItem(_T("CToolkitProDemoApp"), 3, 3, htItem); m_wndClassView.InsertItem(_T("CToolkitProDemoApp()"), 4, 4, hti); m_wndClassView.InsertItem(_T("InitInstance()"), 4, 4, hti); m_wndClassView.InsertItem(_T("OnAppAbout()"), 4, 4, hti); hti = m_wndClassView.InsertItem(_T("CToolkitProDemoDoc"), 3, 3, htItem); m_wndClassView.InsertItem(_T("AssertValid()"), 5, 5, hti); m_wndClassView.InsertItem(_T("CToolkitProDemoDoc()"), 4, 4, hti); m_wndClassView.InsertItem(_T("~CToolkitProDemoDoc()"), 4, 4, hti); m_wndClassView.InsertItem(_T("Dump(CDumpContext &dc)"), 4, 4, hti); m_wndClassView.InsertItem(_T("OnNewDocument()"), 4, 4, hti); m_wndClassView.InsertItem(_T("Serialize(CArchive& ar)"), 4, 4, hti); hti = m_wndClassView.InsertItem(_T("CToolkitProDemoView"), 3, 3, htItem); m_wndClassView.InsertItem(_T("AssertValid()"), 4, 4, hti); m_wndClassView.InsertItem(_T("CToolkitProDemoView()"), 5, 5, hti); m_wndClassView.InsertItem(_T("~CToolkitProDemoView()"), 4, 4, hti); m_wndClassView.InsertItem(_T("Dump(CDumpContext& dc)"), 4, 4, hti); m_wndClassView.InsertItem(_T("GetDocument()"), 4, 4, hti); m_wndClassView.InsertItem(_T("OnBeginPrinting(CDC* pDC, CPrintInfo *pInfo)"), 5, 5, hti); m_wndClassView.InsertItem(_T("OnDraw(CDC *pDC)"), 4, 4, hti); m_wndClassView.InsertItem(_T("OnEndPrinting(CDC *pDC, CPrintInfo *pInfo)"), 5, 5, hti); m_wndClassView.InsertItem(_T("OnPreparePrinting(CPrintInfo *pInfo)"), 5, 5, hti); m_wndClassView.InsertItem(_T("PreCreateWindow(CREATESTRUCT &cs)"), 4, 4, hti); hti = m_wndClassView.InsertItem(_T("Globals"), 1, 2, htItem); m_wndClassView.InsertItem(_T("theApp"), 6, 6, hti); m_wndClassView.Expand(hti, TVE_EXPAND); m_wndClassView.Expand(htItem, TVE_EXPAND); return 0; } LRESULT CClassViewPane::OnSetControlTheme(WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); XTPControlTheme nTheme = (XTPControlTheme)wParam; BOOL bVS2015Plus = ((nTheme == xtpControlThemeVisualStudio2015) || (nTheme == xtpControlThemeVisualStudio2017) || (nTheme == xtpControlThemeVisualStudio2019) || (nTheme == xtpControlThemeVisualStudio2022)); if (bVS2015Plus) m_rcMargin = CRect(XTP_DPI_X(1), 0, XTP_DPI_X(1), XTP_DPI_Y(1)); else m_rcMargin = CRect(0, 0, 0, 0); m_wndClassView.SetTheme(nTheme); BOOL bVS2010Plus = ((nTheme == xtpControlThemeVisualStudio2010) || (nTheme == xtpControlThemeVisualStudio2012Dark) || (nTheme == xtpControlThemeVisualStudio2012Light) || (nTheme == xtpControlThemeVisualStudio2015) || (nTheme == xtpControlThemeVisualStudio2017) || (nTheme == xtpControlThemeVisualStudio2019) || (nTheme == xtpControlThemeVisualStudio2022)); if (bVS2010Plus) { m_wndClassView.ModifyStyle(TVS_HASLINES, 0); } else { m_wndClassView.ModifyStyle(0, TVS_HASLINES); } m_wndClassView.SetExplorerTheme(bVS2010Plus); LoadRasterIcons(); LoadVectorIcons(); return 0; } void CClassViewPane::OnSize(UINT nType, int cx, int cy) { CWnd::OnSize(nType, cx, cy); if (::IsWindow(m_wndClassView)) { XTPPaintTheme nTheme = theApp.GetAppTheme(); CString strThemeSettings = theApp.GetAppThemeSettings(); BOOL bAdjust = ((nTheme == xtpControlThemeVisualStudio2015) || (nTheme == xtpControlThemeVisualStudio2017) || (nTheme == xtpControlThemeVisualStudio2019) || (nTheme == xtpControlThemeVisualStudio2022)); m_wndClassView.ModifyStyleEx(bAdjust ? WS_EX_STATICEDGE : 0, bAdjust ? 0 : WS_EX_STATICEDGE); } int x = m_rcMargin.left; int y = m_rcMargin.top; cx -= (x + m_rcMargin.right); cy -= (y + m_rcMargin.bottom); if (::IsWindow(m_wndToolBar)) { CSize sz = m_wndToolBar.CalcDockingLayout(cx, LM_HORZDOCK | LM_HORZ | LM_COMMIT); m_wndToolBar.MoveWindow(x, y, cx, sz.cy); m_wndToolBar.Invalidate(FALSE); y += sz.cy; cy -= sz.cy; } if (::IsWindow(m_wndClassView)) { m_wndClassView.MoveWindow(x, y, cx, cy); m_wndClassView.Invalidate(FALSE); } } void CClassViewPane::OnPaint() { CPaintDC dc(this); if (!m_rcMargin.IsRectNull()) { CXTPClientRect rClient(this); theApp.GetPaneColorSet()->DrawBorders(&dc, rClient, m_pPane); } } void CClassViewPane::OnProjectAddExistingItem() { AfxMessageBox(_T("TODO: Add your command handler code here")); } void CClassViewPane::OnSetFocus(CWnd* /*pOldWnd*/) { if (::IsWindow(m_wndClassView)) { m_wndClassView.SetFocus(); } } void CClassViewPane::LoadRasterIcons() { CString strThemeSettings = theApp.GetAppThemeSettings(); UINT treeIcons = IDB_CLASS_TREE; if (0 < strThemeSettings.Find(_T("BLUE"))) { treeIcons = IDB_CLASS_TREE_LIGHT; } else if (0 < strThemeSettings.Find(_T("BLUEEXTRA"))) { treeIcons = IDB_CLASS_TREE_LIGHT; } else if (0 < strThemeSettings.Find(_T("DARK"))) { treeIcons = IDB_CLASS_TREE_DARK; } else if (0 < strThemeSettings.Find(_T("LIGHT"))) { treeIcons = IDB_CLASS_TREE_LIGHT; } m_ilClassView.DeleteImageList(); if (!CreateImageList(m_ilClassView, treeIcons)) { TRACE(_T("ERROR: Unable to create tree control.\n")); return; } m_wndClassView.SetImageList(&m_ilClassView, TVSIL_NORMAL); } void CClassViewPane::LoadVectorIcons() { // }