// ************************************************************************************** // File: LeashDebugWindow.cpp // By: Arthur David Leather // Created: 12/02/98 // Copyright @1998 Massachusetts Institute of Technology - All rights reserved. // Description: CPP file for LeashDebugWindow.h. Contains variables and functions // for the Leash Debug Window // // History: // // MM/DD/YY Inits Description of Change // 12/02/98 ADL Original // ************************************************************************************** #include "stdafx.h" #include "leash.h" #include "LeashDebugWindow.h" #include "lglobals.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLeashDebugWindow dialog CLeashDebugWindow::CLeashDebugWindow(CWnd* pParent /*=NULL*/) : CDialog(CLeashDebugWindow::IDD, pParent) { //{{AFX_DATA_INIT(CLeashDebugWindow) //}}AFX_DATA_INIT m_pView = NULL; } CLeashDebugWindow::CLeashDebugWindow(CFormView* pView) { m_pView = pView; } void CLeashDebugWindow::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLeashDebugWindow) DDX_Control(pDX, IDC_DEBUG_LISTBOX, m_debugListBox); DDX_Control(pDX, IDC_LOG_FILE_LOCATION_TEXT, m_debugFile); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CLeashDebugWindow, CDialog) //{{AFX_MSG_MAP(CLeashDebugWindow) ON_WM_SHOWWINDOW() ON_BN_CLICKED(IDC_COPY_TO_CLIPBOARD, OnCopyToClipboard) ON_WM_DESTROY() ON_WM_CLOSE() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLeashDebugWindow message handlers BOOL CLeashDebugWindow::Create(const LPCSTR debugFilePath) { m_debugFilePath = debugFilePath; return CDialog::Create(CLeashDebugWindow::IDD); } void CLeashDebugWindow::OnCancel() { if (m_pView != NULL) { CWinApp* pApp; pApp = AfxGetApp(); pApp->WriteProfileInt("Settings", "DebugWindow", FALSE_FLAG); m_pView->PostMessage(WM_GOODBYE, IDCANCEL); // modeless case //// pset_krb_debug(OFF); //// pset_krb_ap_req_debug(OFF); } else { CDialog::OnCancel(); // modal case } } void CLeashDebugWindow::OnOK() { if (m_pView != NULL) { // modeless case UpdateData(TRUE); m_pView->PostMessage(WM_GOODBYE, IDOK); } else { CDialog::OnOK(); // modal case } } BOOL CLeashDebugWindow::OnInitDialog() { CDialog::OnInitDialog(); // Set Debug flags //// pset_krb_debug(ON); //(int)m_debugListBox.GetSafeHwnd() //// pset_krb_ap_req_debug(ON); if (*m_debugFilePath != 0) SetDlgItemText(IDC_LOG_FILE_LOCATION_TEXT, m_debugFilePath); else SetDlgItemText(IDC_LOG_FILE_LOCATION_TEXT, "Not Available"); if (!m_debugListBox.GetCount()) GetDlgItem(IDC_COPY_TO_CLIPBOARD)->EnableWindow(FALSE); m_CopyButton = FALSE; return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CLeashDebugWindow::OnShowWindow(BOOL bShow, UINT nStatus) { CDialog::OnShowWindow(bShow, nStatus); } void CLeashDebugWindow::OnCopyToClipboard() { if (!OpenClipboard()) { MessageBox("Unable to open Clipboard!", "Error", MB_OK); return; } EmptyClipboard(); int maxItems = m_debugListBox.GetCount(); const int MAX_MEM = maxItems * 90; // 90 chars per line seems safe like a safe bet HGLOBAL hDebugText = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, MAX_MEM); if (NULL != hDebugText) { CString listboxItem; LPSTR pDebugText = (LPSTR) GlobalLock(hDebugText); if (!pDebugText) { MessageBox("Unable to write to Clipboard!", "Error", MB_OK); ASSERT(pDebugText); return; } *pDebugText = 0; for (int xItem = 0; xItem < maxItems; xItem++) { m_debugListBox.GetText(xItem, listboxItem); strcat(pDebugText, listboxItem); strcat(pDebugText, "\r\n"); } GlobalUnlock(hDebugText); } if (NULL != hDebugText) SetClipboardData(CF_TEXT, hDebugText); CloseClipboard(); MessageBox("Copy to Clipboard was Successful!\r\n Paste it in your favorite editor.", "Note", MB_OK); } BOOL CLeashDebugWindow::PreTranslateMessage(MSG* pMsg) { if (!m_CopyButton && m_debugListBox.GetCount()) { m_CopyButton = TRUE; GetDlgItem(IDC_COPY_TO_CLIPBOARD)->EnableWindow(TRUE); } return CDialog::PreTranslateMessage(pMsg); }