Further attempt at removing K4 specific code from the leash executable
[krb5.git] / src / windows / leash / LeashDebugWindow.cpp
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
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
41 CLeashDebugWindow::CLeashDebugWindow(CFormView* pView)
42 {
43         m_pView = pView;
44 }
45
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
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
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
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
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
129 void CLeashDebugWindow::OnShowWindow(BOOL bShow, UINT nStatus)
130 {
131         CDialog::OnShowWindow(bShow, nStatus);
132 }
133
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
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 }