Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/krb5/src/windows/leash/MainFrm.cpp
34914 views
1
// **************************************************************************************
2
// File: MainFrm.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 MainFrm.h. Contains variables and functions
7
// for Leash
8
//
9
// History:
10
//
11
// MM/DD/YY Inits Description of Change
12
// 12/02/98 ADL Original
13
// **************************************************************************************
14
15
16
#include "stdafx.h"
17
#include "LeashUIApplication.h"
18
#include "Leash.h"
19
#include "MainFrm.h"
20
#include "lglobals.h"
21
//#include "KrbRealmHostMaintenance.h"
22
23
#ifdef _DEBUG
24
#define new DEBUG_NEW
25
#undef THIS_FILE
26
static char THIS_FILE[] = __FILE__;
27
#endif
28
29
/////////////////////////////////////////////////////////////////////////////
30
// CMainFrame
31
32
#define MIN_LEFT 179
33
#define MIN_TOP 61
34
#define MIN_RIGHT 530
35
#define MIN_BOTTOM 280
36
37
#ifndef NO_STATUS_BAR
38
CMFCStatusBar CMainFrame::m_wndStatusBar;
39
#endif
40
CMFCToolBar CMainFrame::m_wndToolBar;
41
CImageList CMainFrame::m_imageList;
42
CImageList CMainFrame::m_disabledImageList;
43
BOOL CMainFrame::m_isMinimum;
44
BOOL CMainFrame::m_isBeingResized;
45
int CMainFrame::m_whatSide;
46
47
IMPLEMENT_DYNCREATE(CMainFrame, CLeashFrame)
48
49
BEGIN_MESSAGE_MAP(CMainFrame, CLeashFrame)
50
//{{AFX_MSG_MAP(CMainFrame)
51
ON_WM_CREATE()
52
ON_WM_SIZING()
53
ON_WM_CLOSE()
54
ON_WM_GETMINMAXINFO()
55
ON_COMMAND(ID_APP_EXIT, OnClose)
56
//}}AFX_MSG_MAP
57
// Global help commands
58
ON_COMMAND(ID_HELP_LEASH_, CMainFrame::OnHelpFinder)
59
ON_COMMAND(ID_HELP, CMainFrame::OnHelp)
60
ON_COMMAND(ID_CONTEXT_HELP, CMainFrame::OnContextHelp)
61
ON_MESSAGE_VOID(WM_RIBBON_RESIZE, OnRibbonResize)
62
END_MESSAGE_MAP()
63
64
static UINT indicators[] =
65
{
66
ID_SEPARATOR, // status line indicator
67
ID_SEPARATOR,
68
ID_SEPARATOR,
69
ID_SEPARATOR
70
};
71
72
73
/////////////////////////////////////////////////////////////////////////////
74
// CMainFrame construction/destruction
75
76
CMainFrame::CMainFrame()
77
{
78
m_winRectLeft = 0;
79
m_winRectTop = 0;
80
m_winRectRight = 0;
81
m_winRectBottom = 0;
82
m_whatSide = RESET_MINSIZE;
83
m_isMinimum = FALSE;
84
m_isBeingResized = FALSE;
85
m_bOwnerCreated = FALSE;
86
pApplication = NULL;
87
}
88
89
CMainFrame::~CMainFrame()
90
{
91
}
92
93
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
94
{
95
if (CLeashApp::m_useRibbon) {
96
HWND hwnd;
97
HRESULT hr;
98
// Fixup tooltips (cribbed from http://social.msdn.microsoft.com/Forums/en/vcmfcatl/thread/5c5b4879-d278-4d79-8894-99e7f9b322df)
99
100
CMFCToolTipInfo ttParams;
101
ttParams.m_bVislManagerTheme = TRUE;
102
ttParams.m_bVislManagerTheme = FALSE;
103
ttParams.m_bDrawSeparator = FALSE;
104
ttParams.m_clrFillGradient = afxGlobalData.clrBarFace;
105
ttParams.m_clrFill = RGB(255, 255, 255);
106
ttParams.m_clrBorder = afxGlobalData.clrBarShadow;
107
ttParams.m_clrText = afxGlobalData.clrBarText;
108
109
theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,
110
RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams);
111
112
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows7));
113
CDockingManager::SetDockingMode(DT_SMART);
114
m_wndRibbonBar.SetWindows7Look(TRUE);
115
116
// Initialize the ribbon, keeping a handle to the IUIApplication
117
// so that we can query the ribbon height and save space for it
118
// when calculating our layout.
119
hwnd = this->GetSafeHwnd();
120
if (hwnd == NULL)
121
printf("Failed to get HWND\n");
122
hr = LeashUIApplication::CreateInstance(&pApplication, hwnd);
123
if (FAILED(hr)) {
124
MessageBox("LeashUIApplication::CreateInstance!", "Error", MB_OK);
125
return -1;
126
}
127
}
128
129
if (CLeashFrame::OnCreate(lpCreateStruct) == -1)
130
return -1;
131
132
ShowWindow(SW_HIDE);
133
134
/* NT4 and NT5 aren't shipped with a version of MFC that supports
135
// 'CreateEx()' as of 2/1/99
136
#if _MFC_VER > 0x0421
137
138
if (!m_wndToolBar.CreateEx(this) ||
139
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
140
{
141
TRACE0("Failed to create toolbar\n");
142
return -1; // fail to create
143
}
144
145
#else
146
147
if (!m_wndToolBar.Create(this) ||
148
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
149
{
150
TRACE0("Failed to create toolbar\n");
151
return -1; // fail to create
152
}
153
154
#endif
155
*/
156
if ((!CLeashApp::m_useRibbon) &&
157
(!m_wndToolBar.Create(this) ||
158
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)))
159
{
160
MessageBox("There is problem creating the Leash Toolbar!",
161
"Error", MB_OK);
162
TRACE0("Failed to create toolbar\n");
163
return -1; // fail to create
164
}
165
166
#ifndef NO_STATUS_BAR
167
if (!m_wndStatusBar.Create(this) ||
168
!m_wndStatusBar.SetIndicators(indicators, 3))
169
{
170
MessageBox("There is problem creating the Leash Status Bar!",
171
"Error", MB_OK);
172
TRACE0("Failed to create status bar\n");
173
return -1; // fail to create
174
}
175
#endif
176
177
178
// TODO: Remove this if you don't want tool tips or a resizable toolbar
179
//m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() |
180
// CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
181
182
if (!CLeashApp::m_useRibbon) {
183
// TODO: Delete these three lines if you don't want the toolbar to
184
// be dockable
185
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
186
EnableDocking(CBRS_ALIGN_ANY);
187
DockPane(&m_wndToolBar);
188
}
189
190
return 0;
191
}
192
193
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
194
{
195
return CLeashFrame::PreTranslateMessage(pMsg);
196
}
197
198
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
199
{
200
// Use the specific class name we established earlier
201
// Remove the Minimize and Maximize buttons
202
cs.style &= ~WS_MINIMIZEBOX;
203
cs.style &= ~WS_MAXIMIZEBOX;
204
// Initialize the extended window style to display a TaskBar entry with WS_EX_APPWINDOW
205
cs.dwExStyle |= WS_EX_APPWINDOW;
206
// cs.dwExStyle |= WS_EX_OVERLAPPEDWINDOW ;
207
cs.lpszClass = _T("LEASH.0WNDCLASS");
208
cs.lpszName = _T("MIT Kerberos");
209
210
CString strText = AfxGetApp()->GetProfileString(CLeashFrame::s_profileHeading,
211
CLeashFrame::s_profileRect);
212
if (!strText.IsEmpty())
213
{
214
CRect rect;
215
216
rect.left = atoi((const char*) strText);
217
rect.top = atoi((const char*) strText + 5);
218
rect.right = atoi((const char*) strText + 10);
219
rect.bottom = atoi((const char*) strText + 15);
220
221
cs.x = rect.left;
222
cs.y = rect.top;
223
cs.cx = rect.right - rect.left;
224
cs.cy = rect.bottom - rect.top;
225
226
if ( cs.x < 0 )
227
cs.x = CW_USEDEFAULT;
228
if ( cs.y < 0 )
229
cs.y = CW_USEDEFAULT;
230
if ( cs.cx <= 0 )
231
cs.cx = CLeashFrame::s_rectDefault.right;
232
if ( cs.cy <= 0 )
233
cs.cy = CLeashFrame::s_rectDefault.bottom;
234
}
235
else
236
{
237
cs.cx = CLeashFrame::s_rectDefault.right;
238
cs.cy = CLeashFrame::s_rectDefault.bottom;
239
cs.y = CW_USEDEFAULT;
240
cs.x = CW_USEDEFAULT;
241
}
242
243
// Change the following line to call
244
// CLeashFrame::PreCreateWindow(cs) if this is an SDI application.
245
if (!CLeashFrame::PreCreateWindow(cs))
246
return FALSE;
247
248
// We create a parent window for our application to ensure that
249
// it has an owner. This way we can disable the TaskBar entry
250
// by removing the WS_EX_APPWINDOW style later on.
251
if ( !m_bOwnerCreated )
252
{
253
m_bOwnerCreated = m_MainFrameOwner.Create(IDD_FRAMEOWNER);
254
if ( m_bOwnerCreated )
255
m_MainFrameOwner.ShowWindow(SW_HIDE);
256
}
257
if ( m_bOwnerCreated )
258
cs.hwndParent = m_MainFrameOwner.GetSafeHwnd();
259
260
return TRUE;
261
}
262
263
264
BOOL CMainFrame::ShowTaskBarButton(BOOL bVisible)
265
{
266
if (!m_bOwnerCreated)
267
return FALSE;
268
269
if (bVisible) {
270
ShowWindow(SW_HIDE);
271
ModifyStyleEx(0, WS_EX_APPWINDOW);
272
ShowWindow(SW_SHOW);
273
} else {
274
ShowWindow(SW_HIDE);
275
ModifyStyleEx(WS_EX_APPWINDOW, 0);
276
ShowWindow(SW_SHOW);
277
}
278
return TRUE;
279
}
280
281
/////////////////////////////////////////////////////////////////////////////
282
// CMainFrame diagnostics
283
284
#ifdef _DEBUG
285
void CMainFrame::AssertValid() const
286
{
287
CLeashFrame::AssertValid();
288
}
289
290
void CMainFrame::Dump(CDumpContext& dc) const
291
{
292
CLeashFrame::Dump(dc);
293
}
294
295
#endif //_DEBUG
296
297
/////////////////////////////////////////////////////////////////////////////
298
// CMainFrame message handlers
299
300
void CMainFrame::OnResetWindowSize()
301
{
302
WINDOWPLACEMENT wndpl;
303
wndpl.length = sizeof(WINDOWPLACEMENT);
304
305
if (!GetWindowPlacement(&wndpl))
306
{
307
MessageBox("There is a problem getting Leash Window size!",
308
"Error", MB_OK);
309
return;
310
}
311
312
wndpl.rcNormalPosition = CLeashFrame::s_rectDefault;
313
314
m_whatSide = SKIP_MINSIZE;
315
316
if (!SetWindowPlacement(&wndpl))
317
{
318
MessageBox("There is a problem setting Leash Window size!",
319
"Error", MB_OK);
320
}
321
322
m_whatSide = RESET_MINSIZE;
323
}
324
325
void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect)
326
{ // Keeps track of Leash window size for function CMainFrame::RecalcLayout
327
m_winRectLeft = pRect->left;
328
m_winRectTop = pRect->top;
329
m_winRectRight = pRect->right;
330
m_winRectBottom = pRect->bottom;
331
332
if (m_whatSide)
333
m_whatSide = fwSide;
334
335
CLeashFrame::OnSizing(fwSide, pRect);
336
}
337
338
void CMainFrame::RecalcLayout(BOOL bNotify)
339
{ // MINSIZE - Insurance that we have a minimum Leash window size
340
int width = MIN_RIGHT - MIN_LEFT;
341
int height = MIN_BOTTOM - MIN_TOP;
342
LeashUIApplication *leashUI;
343
RECT border;
344
border.left = border.right = border.bottom = 0;
345
// Leave room for the ribbon.
346
leashUI = static_cast<LeashUIApplication*>(pApplication);
347
border.top = (leashUI != NULL) ? leashUI->GetRibbonHeight() : 0;
348
NegotiateBorderSpace(CFrameWnd::borderSet, &border);
349
350
BOOL change = FALSE;
351
WINDOWPLACEMENT wndpl;
352
wndpl.length = sizeof(WINDOWPLACEMENT);
353
354
if (!GetWindowPlacement(&wndpl))
355
{
356
MessageBox("There is a problem getting Leash Window size!",
357
"Error", MB_OK);
358
return;
359
}
360
361
if (m_whatSide)
362
{
363
if ((m_winRectRight - m_winRectLeft) < width)
364
{
365
if (m_whatSide == LEFT_SIDE) {
366
wndpl.rcNormalPosition.left = wndpl.rcNormalPosition.right - width;
367
change = TRUE;
368
} else if (m_whatSide == RIGHT_SIDE) {
369
wndpl.rcNormalPosition.right = wndpl.rcNormalPosition.left + width;
370
change = TRUE;
371
}
372
}
373
else if ((m_winRectBottom - m_winRectTop) < height)
374
{
375
if (m_whatSide == TOP_SIDE) {
376
wndpl.rcNormalPosition.top = wndpl.rcNormalPosition.bottom - height;
377
change = TRUE;
378
} else if (m_whatSide == BOTTOM_SIDE) {
379
wndpl.rcNormalPosition.bottom = wndpl.rcNormalPosition.top + height;
380
change = TRUE;
381
}
382
}
383
}
384
385
if ( change ) {
386
if (!SetWindowPlacement(&wndpl))
387
{
388
MessageBox("There is a problem setting Leash Window size!",
389
"Error", MB_OK);
390
}
391
}
392
m_isBeingResized = TRUE;
393
394
CLeashFrame::RecalcLayout(bNotify);
395
}
396
397
398
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
399
{
400
lpMMI->ptMinTrackSize.x = 650;
401
lpMMI->ptMinTrackSize.y = 240;
402
CLeashFrame::OnGetMinMaxInfo(lpMMI);
403
}
404
405
void CMainFrame::OnClose(void)
406
{
407
CLeashFrame::OnClose();
408
}
409
410
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
411
{
412
BOOL oldMin = m_isMinimum;
413
//printf("CMainFrame::WindowProc() Msg: %x, WPARAM: %x, LPARAM: %x\n", message, wParam, lParam);
414
switch(message)
415
{
416
case WM_CLOSE:
417
printf("received WM_CLOSE!");
418
break;
419
case WM_SIZE:
420
switch ( wParam ) {
421
case SIZE_MINIMIZED:
422
m_isMinimum = TRUE;
423
break;
424
case SIZE_MAXIMIZED:
425
case SIZE_RESTORED:
426
m_isMinimum = FALSE;
427
break;
428
}
429
break;
430
case ID_OBTAIN_TGT_WITH_LPARAM:
431
GetActiveView()->SendMessage(ID_OBTAIN_TGT_WITH_LPARAM, wParam,
432
lParam);
433
break;
434
}
435
436
if ( oldMin != m_isMinimum ) {
437
if ( m_isMinimum ) {
438
ShowTaskBarButton(FALSE);
439
ShowWindow(SW_HIDE);
440
}
441
}
442
return CLeashFrame::WindowProc(message, wParam, lParam);
443
}
444
445
// Signalled by LeashUIApplication::OnViewChanged when the ribbon height
446
// changes.
447
void CMainFrame::OnRibbonResize()
448
{
449
RecalcLayout(TRUE);
450
}
451
452
/*
453
void CMainFrame::OnHelp()
454
{
455
456
}
457
*/
458
459
/*
460
void CMainFrame::OnContextHelp()
461
{
462
463
}
464
*/
465
466