xref: /freebsd/crypto/krb5/src/windows/leash/LeashDebugWindow.cpp (revision 7f2fe78b9dd5f51c821d771b63d2e096f6fd49e9)
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