1 // **************************************************************************************
2 // File: LeashDebugWindow.cpp
3 // By: Arthur David Leather
4 // Created: 12/02/98
5 // Copyright @1998 Massachusetts Institute of Technology - All rights reserved.
6 // Description: CPP file for LeashDebugWindow.h. Contains variables and functions
7 // for the Leash Debug Window
8 //
9 // History:
10 //
11 // MM/DD/YY Inits Description of Change
12 // 12/02/98 ADL Original
13 // **************************************************************************************
14
15
16
17 #include "stdafx.h"
18 #include "leash.h"
19 #include "LeashDebugWindow.h"
20 #include "lglobals.h"
21
22 #ifdef _DEBUG
23 #define new DEBUG_NEW
24 #undef THIS_FILE
25 static char THIS_FILE[] = __FILE__;
26 #endif
27
28 /////////////////////////////////////////////////////////////////////////////
29 // CLeashDebugWindow dialog
30
31
CLeashDebugWindow(CWnd * pParent)32 CLeashDebugWindow::CLeashDebugWindow(CWnd* pParent /*=NULL*/)
33 : CDialog(CLeashDebugWindow::IDD, pParent)
34 {
35 //{{AFX_DATA_INIT(CLeashDebugWindow)
36 //}}AFX_DATA_INIT
37
38 m_pView = NULL;
39 }
40
CLeashDebugWindow(CFormView * pView)41 CLeashDebugWindow::CLeashDebugWindow(CFormView* pView)
42 {
43 m_pView = pView;
44 }
45
DoDataExchange(CDataExchange * pDX)46 void CLeashDebugWindow::DoDataExchange(CDataExchange* pDX)
47 {
48 CDialog::DoDataExchange(pDX);
49 //{{AFX_DATA_MAP(CLeashDebugWindow)
50 DDX_Control(pDX, IDC_DEBUG_LISTBOX, m_debugListBox);
51 DDX_Control(pDX, IDC_LOG_FILE_LOCATION_TEXT, m_debugFile);
52 //}}AFX_DATA_MAP
53 }
54
55
BEGIN_MESSAGE_MAP(CLeashDebugWindow,CDialog)56 BEGIN_MESSAGE_MAP(CLeashDebugWindow, CDialog)
57 //{{AFX_MSG_MAP(CLeashDebugWindow)
58 ON_WM_SHOWWINDOW()
59 ON_BN_CLICKED(IDC_COPY_TO_CLIPBOARD, OnCopyToClipboard)
60 ON_WM_DESTROY()
61 ON_WM_CLOSE()
62 //}}AFX_MSG_MAP
63 END_MESSAGE_MAP()
64
65 /////////////////////////////////////////////////////////////////////////////
66 // CLeashDebugWindow message handlers
67
68
69 BOOL CLeashDebugWindow::Create(const LPCSTR debugFilePath)
70 {
71 m_debugFilePath = debugFilePath;
72 return CDialog::Create(CLeashDebugWindow::IDD);
73 }
74
75
OnCancel()76 void CLeashDebugWindow::OnCancel()
77 {
78 if (m_pView != NULL)
79 {
80 CWinApp* pApp;
81 pApp = AfxGetApp();
82 pApp->WriteProfileInt("Settings", "DebugWindow", FALSE_FLAG);
83 m_pView->PostMessage(WM_GOODBYE, IDCANCEL); // modeless case
84 //// pset_krb_debug(OFF);
85 //// pset_krb_ap_req_debug(OFF);
86 }
87 else
88 {
89 CDialog::OnCancel(); // modal case
90 }
91 }
92
OnOK()93 void CLeashDebugWindow::OnOK()
94 {
95 if (m_pView != NULL)
96 {
97 // modeless case
98 UpdateData(TRUE);
99 m_pView->PostMessage(WM_GOODBYE, IDOK);
100 }
101 else
102 {
103 CDialog::OnOK(); // modal case
104 }
105 }
106
OnInitDialog()107 BOOL CLeashDebugWindow::OnInitDialog()
108 {
109 CDialog::OnInitDialog();
110
111 // Set Debug flags
112 //// pset_krb_debug(ON); //(int)m_debugListBox.GetSafeHwnd()
113 //// pset_krb_ap_req_debug(ON);
114
115 if (*m_debugFilePath != 0)
116 SetDlgItemText(IDC_LOG_FILE_LOCATION_TEXT, m_debugFilePath);
117 else
118 SetDlgItemText(IDC_LOG_FILE_LOCATION_TEXT, "Not Available");
119
120 if (!m_debugListBox.GetCount())
121 GetDlgItem(IDC_COPY_TO_CLIPBOARD)->EnableWindow(FALSE);
122
123 m_CopyButton = FALSE;
124
125 return TRUE; // return TRUE unless you set the focus to a control
126 // EXCEPTION: OCX Property Pages should return FALSE
127 }
128
OnShowWindow(BOOL bShow,UINT nStatus)129 void CLeashDebugWindow::OnShowWindow(BOOL bShow, UINT nStatus)
130 {
131 CDialog::OnShowWindow(bShow, nStatus);
132 }
133
OnCopyToClipboard()134 void CLeashDebugWindow::OnCopyToClipboard()
135 {
136 if (!OpenClipboard())
137 {
138 MessageBox("Unable to open Clipboard!", "Error", MB_OK);
139 return;
140 }
141
142 EmptyClipboard();
143
144 int maxItems = m_debugListBox.GetCount();
145 const int MAX_MEM = maxItems * 90; // 90 chars per line seems safe like a safe bet
146
147 HGLOBAL hDebugText = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, MAX_MEM);
148 if (NULL != hDebugText)
149 {
150 CString listboxItem;
151 LPSTR pDebugText = (LPSTR) GlobalLock(hDebugText);
152 if (!pDebugText)
153 {
154 MessageBox("Unable to write to Clipboard!", "Error", MB_OK);
155 ASSERT(pDebugText);
156 return;
157 }
158
159 *pDebugText = 0;
160 for (int xItem = 0; xItem < maxItems; xItem++)
161 {
162 m_debugListBox.GetText(xItem, listboxItem);
163 strcat(pDebugText, listboxItem);
164 strcat(pDebugText, "\r\n");
165 }
166
167 GlobalUnlock(hDebugText);
168 }
169
170 if (NULL != hDebugText)
171 SetClipboardData(CF_TEXT, hDebugText);
172
173 CloseClipboard();
174 MessageBox("Copy to Clipboard was Successful!\r\n Paste it in your favorite editor.",
175 "Note", MB_OK);
176 }
177
PreTranslateMessage(MSG * pMsg)178 BOOL CLeashDebugWindow::PreTranslateMessage(MSG* pMsg)
179 {
180 if (!m_CopyButton && m_debugListBox.GetCount())
181 {
182 m_CopyButton = TRUE;
183 GetDlgItem(IDC_COPY_TO_CLIPBOARD)->EnableWindow(TRUE);
184 }
185
186 return CDialog::PreTranslateMessage(pMsg);
187 }
188