// GaugeBrowser.cpp : Defines the class behaviors for the application. // // (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 "PaneGauges.h" #include "PaneAssets.h" #include "MainFrm.h" #include "GaugeRectTracker.h" #include "GaugeBrowserDoc.h" #include "GaugeBrowserView.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CGaugeBrowserApp BEGIN_MESSAGE_MAP(CGaugeBrowserApp, CXTPWinApp) //{{AFX_MSG_MAP(CGaugeBrowserApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) //}}AFX_MSG_MAP // Standard file based document commands ON_COMMAND(ID_FILE_NEW, CXTPWinApp::OnFileNew) // Standard print setup command ON_COMMAND(ID_FILE_PRINT_SETUP, CXTPWinApp::OnFilePrintSetup) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CGaugeBrowserApp construction CGaugeBrowserApp::CGaugeBrowserApp() { UpdateAppPath(); } ///////////////////////////////////////////////////////////////////////////// // The one and only CGaugeBrowserApp object CGaugeBrowserApp theApp; ///////////////////////////////////////////////////////////////////////////// // CGaugeBrowserApp initialization BOOL CGaugeBrowserApp::InitInstance() { AfxEnableControlContainer(); // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #if _MSC_VER <= 1200 // MFC 6.0 or earlier # ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL # else Enable3dControlsStatic(); // Call this when linking to MFC statically # endif #endif // MFC 6.0 or earlier // Change the registry key under which our settings are stored. // TODO: You should modify this string to be something appropriate // such as the name of your company or organization. CString ver; ver.Format(_T("Codejock %s v%d.%d.%d"), _XTP_PACKAGE_NAME, _XTPLIB_VERSION_MAJOR, _XTPLIB_VERSION_MINOR, _XTPLIB_VERSION_REVISION); SetRegistryKey(ver); LoadStdProfileSettings(); // Load standard INI file options (including MRU) // Register the application's document templates. Document templates // serve as the connection between documents, frame windows and views. CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME, RUNTIME_CLASS(CGaugeBrowserDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CGaugeBrowserView)); AddDocTemplate(pDocTemplate); // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo)) return FALSE; // The one and only window has been initialized, so show and update it. m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; } // App command to run the dialog void CGaugeBrowserApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } ///////////////////////////////////////////////////////////////////////////// // CGaugeBrowserApp message handlers void CGaugeBrowserApp::UpdateAppPath() { // construct the data file path. TCHAR szStylesPath[_MAX_PATH]; VERIFY(::GetModuleFileName(m_hInstance, szStylesPath, _MAX_PATH)); m_strAppPath = szStylesPath; // strip off .exe name. int nIndex = m_strAppPath.ReverseFind(_T('\\')); if (nIndex > 0) { m_strAppPath = m_strAppPath.Left(nIndex); } else { m_strAppPath.Empty(); } } void CGaugeBrowserApp::OnFileOpen() { CXTPBrowseDialog dlg; dlg.SetTitle(_T("Select Gauge Directory")); dlg.SetOptions(BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_NONEWFOLDERBUTTON | BIF_RETURNONLYFSDIRS | BIF_USENEWUI | BIF_VALIDATE); dlg.SetSelPath(theApp.m_strAppPath + _T("\\Gauges")); if (IDOK != dlg.DoModal()) return; CString strPath = dlg.GetSelPath(); if (OpenDocumentFile(strPath) != NULL) AddToRecentFileList(strPath); } void CGaugeBrowserApp::DrawCheckerBoard(CDC* pDC, CRect& rcClient, COLORREF crBack /*=COLORREF_NULL*/, COLORREF crFore /*=COLORREF_NULL*/, COLORREF crBorder /*=COLORREF_NULL*/) { // set background color. if (crBack == COLORREF_NULL) crBack = ::GetSysColor(COLOR_BTNHIGHLIGHT); // set foreground color. if (crFore == COLORREF_NULL) crFore = ::GetSysColor(COLOR_BTNFACE); // fill background. pDC->FillSolidRect(&rcClient, crBack); // draw border. if (crBorder != COLORREF_NULL) { pDC->Draw3dRect(&rcClient, crBorder, crBorder); rcClient.DeflateRect(XTP_DPI_X(1), XTP_DPI_Y(1)); } // draw checkerboard pattern. CSize szBox(XTP_DPI_X(8), XTP_DPI_Y(8)); CRect rcBox(rcClient.TopLeft(), szBox); bool bOffset = true; do { do { pDC->FillSolidRect(rcBox, crFore); rcBox.OffsetRect(szBox.cx * 2, 0); if (rcBox.right > rcClient.right) rcBox.right = rcClient.right; } while (rcBox.left < rcClient.right); rcBox.left = rcClient.left; rcBox.right = rcBox.left + szBox.cx; rcBox.OffsetRect(0, szBox.cy); if (rcBox.bottom > rcClient.bottom) rcBox.bottom = rcClient.bottom; if (bOffset) { rcBox.OffsetRect(szBox.cx, 0); bOffset = false; } else { bOffset = true; } } while (rcBox.top < rcClient.bottom); }