1519 lines
43 KiB
C++
1519 lines
43 KiB
C++
//Copyright (c) 1998 - 1999 Microsoft Corporation
|
|
/*******************************************************************************
|
|
*
|
|
* appsvvw.cpp
|
|
*
|
|
* implementation of the CAppServerView class
|
|
*
|
|
* copyright notice: Copyright 1994, Citrix Systems Inc.
|
|
*
|
|
* $Author: butchd $ Butch Davis
|
|
*
|
|
* $Log: M:\nt\private\utils\citrix\winutils\wincfg\VCS\appsvvw.cpp $
|
|
*
|
|
* Rev 1.24 22 Oct 1997 09:43:52 butchd
|
|
* MS changes: added r-button popup menu
|
|
*
|
|
* Rev 1.23 19 Jun 1997 19:21:12 kurtp
|
|
* update
|
|
*
|
|
* Rev 1.22 25 Mar 1997 08:59:52 butchd
|
|
* update
|
|
*
|
|
* Rev 1.21 21 Mar 1997 16:25:52 butchd
|
|
* update
|
|
*
|
|
* Rev 1.20 04 Mar 1997 08:35:16 butchd
|
|
* update
|
|
*
|
|
* Rev 1.19 24 Sep 1996 16:21:24 butchd
|
|
* update
|
|
*
|
|
* Rev 1.18 13 Sep 1996 17:57:06 butchd
|
|
* update
|
|
*
|
|
* Rev 1.17 12 Sep 1996 16:15:52 butchd
|
|
* update
|
|
*
|
|
*******************************************************************************/
|
|
|
|
/*
|
|
* include files
|
|
*/
|
|
#include "stdafx.h"
|
|
#include "wincfg.h"
|
|
|
|
#include "rowview.h"
|
|
#include "appsvdoc.h"
|
|
#include "appsvvw.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
extern CWincfgApp *pApp;
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// CAppServerView class implementation / construction, destruction
|
|
|
|
IMPLEMENT_DYNCREATE(CAppServerView, CRowView)
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* CAppServerView - CAppServerView constructor
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
CAppServerView::CAppServerView()
|
|
{
|
|
m_nActiveRow = 0;
|
|
m_bThumbTrack = FALSE; // Turn off thumbtrack scrolling
|
|
|
|
} // end CAppServerView::CAppServerView
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* CAppServerView - CAppServerView destructor
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
CAppServerView::~CAppServerView()
|
|
{
|
|
} // end CAppServerView::~CAppServerView
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// CAppServerView class override member functions
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* GetDocument - CAppServerDoc member function: CView class override
|
|
*
|
|
* Return a pointer to this view's document.
|
|
*
|
|
* (Refer to the MFC CView::GetDocument documentation)
|
|
*
|
|
******************************************************************************/
|
|
|
|
CAppServerDoc*
|
|
CAppServerView::GetDocument()
|
|
{
|
|
VERIFY ( m_pDocument->IsKindOf( RUNTIME_CLASS(CAppServerDoc) ) );
|
|
return ( (CAppServerDoc*)m_pDocument );
|
|
|
|
} // end CAppServerView::GetDocument
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnUpdate - CAppServerDoc member function: CView class override
|
|
*
|
|
* Respond to a change in this view's document.
|
|
*
|
|
* (Refer to the MFC CView::OnUpdate documentation)
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnUpdate( CView* pSender,
|
|
LPARAM lHint,
|
|
CObject* pHint )
|
|
{
|
|
/*
|
|
* OnUpdate() is called whenever the document has changed and,
|
|
* Therefore, the view needs to redisplay some or all of itself.
|
|
*/
|
|
if ( (pHint != NULL) &&
|
|
(pHint->IsKindOf(RUNTIME_CLASS(CWinStationListObjectHint))) ) {
|
|
|
|
CWinStationListObjectHint *pWSLOHint =
|
|
(CWinStationListObjectHint *)pHint;
|
|
|
|
/*
|
|
* If the hint's WinStation object pointer is not NULL, determine
|
|
* if the view's fields need to expand, resetting the view if so.
|
|
* Otherwise, just update the WinStation's row.
|
|
*/
|
|
if ( pWSLOHint->m_pWSLObject &&
|
|
CalculateFieldMaximums( pWSLOHint->m_pWSLObject,
|
|
NULL, FALSE ) )
|
|
ResetView(FALSE);
|
|
else
|
|
UpdateRow(pWSLOHint->m_WSLIndex);
|
|
|
|
} else
|
|
|
|
/*
|
|
* Reset the entire view with new field calculations.
|
|
*/
|
|
ResetView(TRUE);
|
|
|
|
} // end CAppServerView::OnUpdate
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* GetRowWidthHeight -
|
|
* CAppServerView member function: CRowView class override
|
|
*
|
|
* Get the view row width and height (based on current font).
|
|
*
|
|
* ENTRY:
|
|
*
|
|
* pDC (input)
|
|
* Points to the current CDC device-context object for the view.
|
|
*
|
|
* nRowWidth (input)
|
|
* (REFERENCE) the variable to set to the current row width, in
|
|
* device units.
|
|
*
|
|
* nRowHeight (input)
|
|
* (REFERENCE) the variable to set to the current row height, in
|
|
* device units.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::GetRowWidthHeight( CDC* pDC,
|
|
int& nRowWidth,
|
|
int& nRowHeight )
|
|
{
|
|
int nDeviceTechnology;
|
|
|
|
/*
|
|
* If the previous CalculateFieldMaximums() calculations were made for
|
|
* a different device type than this CDC is associated with, we must call
|
|
* it again (with the CDC given here).
|
|
*
|
|
* BUGBUG: What about print-preview? May need to compare mapping
|
|
* modes (etc...) as well as device technology. This may not work as is...
|
|
*/
|
|
if ( (nDeviceTechnology = pDC->GetDeviceCaps( TECHNOLOGY )) !=
|
|
m_nLatestDeviceTechnology ) {
|
|
|
|
CalculateFieldMaximums( NULL, pDC, TRUE );
|
|
m_nLatestDeviceTechnology = nDeviceTechnology;
|
|
}
|
|
|
|
/*
|
|
* Set the row width.
|
|
*/
|
|
nRowWidth = m_tmTotalWidth;
|
|
|
|
/*
|
|
* Always allow enough room for the bitmap height (plus one pixel spacing
|
|
* on top and bottom) regardless of the font height.
|
|
*/
|
|
if ( m_tmFontHeight > (BITMAP_HEIGHT + 2) )
|
|
nRowHeight = m_tmFontHeight;
|
|
else
|
|
nRowHeight = BITMAP_HEIGHT + 2;
|
|
|
|
} // end CAppServerView::GetRowWidthHeight
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* GetActiveRow -
|
|
* CAppServerView member function: CRowView class override
|
|
*
|
|
* Get the currently active (highlighted) row in this view.
|
|
*
|
|
* ENTRY:
|
|
*
|
|
* EXIT:
|
|
* (int)
|
|
* active row for the view (from m_nActiveRow member variable).
|
|
*
|
|
******************************************************************************/
|
|
|
|
int
|
|
CAppServerView::GetActiveRow()
|
|
{
|
|
return (m_nActiveRow);
|
|
} // end CAppServerView::GetActiveRow
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* GetRowCount -
|
|
* CAppServerView member function: CRowView class override
|
|
*
|
|
* Get the total number of rows in the current view.
|
|
*
|
|
* ENTRY:
|
|
*
|
|
* EXIT:
|
|
* (int)
|
|
* number of rows (# of WinStationList items) in the document.
|
|
*
|
|
******************************************************************************/
|
|
|
|
int
|
|
CAppServerView::GetRowCount()
|
|
{
|
|
return ( GetDocument()->GetWSLCount() );
|
|
|
|
} // end CAppServerView::GetRowCount
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* ChangeSelectionNextRow -
|
|
* CAppServerView member function: CRowView class override
|
|
*
|
|
* Get the total number of rows in the current view.
|
|
*
|
|
* ENTRY:
|
|
*
|
|
* bNext (input)
|
|
* if TRUE, changes the view to select the next row;
|
|
* otherwise (FALSE), changes view to select previous row.
|
|
* This function won't do next or previous if boundry error would
|
|
* occur (list overrun or underrun).
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::ChangeSelectionNextRow( BOOL bNext )
|
|
{
|
|
if ( bNext ) {
|
|
|
|
if ( m_nActiveRow < (GetRowCount() - 1) )
|
|
UpdateRow( ++m_nActiveRow );
|
|
|
|
} else {
|
|
|
|
if ( m_nActiveRow > 0 )
|
|
UpdateRow( --m_nActiveRow );
|
|
}
|
|
} // end CAppServerView::ChangeSelectionNextRow
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* ChangeSelectionToRow -
|
|
* CAppServerView member function: CRowView class override
|
|
*
|
|
* Cause the specified view row to be selected.
|
|
*
|
|
* ENTRY:
|
|
*
|
|
* nRow (input)
|
|
* view row to select.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::ChangeSelectionToRow( int nRow )
|
|
{
|
|
UpdateRow( m_nActiveRow = nRow );
|
|
} // end CAppServerView::ChangeSelectionToRow
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnDrawRow -
|
|
* CAppServerView member function: CRowView class override
|
|
*
|
|
* Draw the specified row on the view.
|
|
*
|
|
* ENTRY:
|
|
*
|
|
* pDC (input)
|
|
* Points to the current CDC device-context object for the view
|
|
* to draw with (containing DC to draw into).
|
|
*
|
|
* nRow (input)
|
|
* view row to draw (for obtaining document information).
|
|
*
|
|
* y (input)
|
|
* y-position (in device coordinates) to draw the row at.
|
|
*
|
|
* bSelected (input)
|
|
* TRUE if the row is currently selected (for highlighting);
|
|
* FALSE otherwise.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnDrawRow( CDC* pDC,
|
|
int nRow,
|
|
int y,
|
|
BOOL bSelected )
|
|
{
|
|
int x;
|
|
CFont * pOldFont;
|
|
CBrush BackgroundBrush;
|
|
|
|
/*
|
|
* Select the app's font into the DC.
|
|
*/
|
|
pOldFont = pDC->SelectObject(&(pApp->m_font));
|
|
|
|
/*
|
|
* Get the data for the specific WinStation list item.
|
|
*/
|
|
PWSLOBJECT pWSLObject = GetDocument()->GetWSLObject(nRow);
|
|
if ( !pWSLObject )
|
|
return;
|
|
|
|
/*
|
|
* Prepare for highlighting or un-highlighting the check, depending
|
|
* on whether it is the currently selected check or not. And
|
|
* paint the background (behind the text) accordingly.
|
|
*/
|
|
|
|
/*
|
|
* save colors for drawing selected item on the screen
|
|
*/
|
|
COLORREF crOldText = 0;
|
|
COLORREF crOldBackground = 0;
|
|
|
|
if ( !pDC->IsPrinting() ) {
|
|
|
|
/*
|
|
* Create the proper background and text colors based on whether
|
|
* WinStation selection state, operation state, and enabled/disabled.
|
|
*/
|
|
if ( bSelected ) {
|
|
|
|
BackgroundBrush.CreateSolidBrush( GetSysColor(COLOR_HIGHLIGHT) );
|
|
crOldBackground = pDC->SetBkColor( GetSysColor(COLOR_HIGHLIGHT) );
|
|
crOldText = pDC->SetTextColor( GetSysColor(COLOR_HIGHLIGHTTEXT) );
|
|
|
|
} else {
|
|
|
|
BackgroundBrush.CreateSolidBrush( GetSysColor(COLOR_WINDOW) );
|
|
crOldBackground = pDC->SetBkColor( GetSysColor(COLOR_WINDOW) );
|
|
crOldText = pDC->SetTextColor(
|
|
GetSysColor( pWSLObject->m_Flags & WSL_ENABLED ?
|
|
COLOR_WINDOWTEXT : COLOR_GRAYTEXT ) );
|
|
}
|
|
|
|
/*
|
|
* Fill the row with background color.
|
|
*/
|
|
CRect rectSelection;
|
|
pDC->GetClipBox( &rectSelection );
|
|
rectSelection.top = y;
|
|
rectSelection.bottom = y + m_nRowHeight;
|
|
pDC->FillRect( &rectSelection, &BackgroundBrush );
|
|
}
|
|
|
|
/*
|
|
* Display the class bitmap.
|
|
*/
|
|
{
|
|
CDC BitmapDC;
|
|
CBitmap Bitmap, *pOldBitmap;
|
|
UINT BitmapID;
|
|
TEXTMETRIC tm;
|
|
|
|
switch ( pWSLObject->m_SdClass ) {
|
|
|
|
case SdAsync:
|
|
BitmapID = (pWSLObject->m_Flags & WSL_ENABLED) ?
|
|
((pWSLObject->m_Flags & WSL_DIRECT_ASYNC) ?
|
|
IDB_ASYNCDE :
|
|
((pWSLObject->m_Flags & WSL_MUST_REBOOT) ?
|
|
IDB_ASYNCMER : IDB_ASYNCME)) :
|
|
((pWSLObject->m_Flags & WSL_DIRECT_ASYNC) ?
|
|
IDB_ASYNCDD : IDB_ASYNCMD);
|
|
break;
|
|
|
|
case SdNetwork:
|
|
BitmapID = (pWSLObject->m_Flags & WSL_ENABLED) ?
|
|
IDB_NETWORKE : IDB_NETWORKD;
|
|
break;
|
|
|
|
case SdNasi:
|
|
BitmapID = (pWSLObject->m_Flags & WSL_ENABLED) ?
|
|
IDB_NASIE : IDB_NASID;
|
|
break;
|
|
|
|
case SdConsole:
|
|
BitmapID = (pWSLObject->m_Flags & WSL_ENABLED) ?
|
|
IDB_CONSOLEE : IDB_CONSOLED;
|
|
break;
|
|
|
|
case SdOemTransport:
|
|
BitmapID = (pWSLObject->m_Flags & WSL_ENABLED) ?
|
|
IDB_OEMTDE : IDB_OEMTDD;
|
|
break;
|
|
}
|
|
|
|
Bitmap.LoadBitmap( BitmapID );
|
|
BitmapDC.CreateCompatibleDC( pDC );
|
|
pOldBitmap = BitmapDC.SelectObject( &Bitmap );
|
|
pDC->GetTextMetrics(&tm);
|
|
pDC->BitBlt( BITMAP_X, (tm.tmHeight > (BITMAP_HEIGHT + 2)) ?
|
|
(y + ((tm.tmHeight - BITMAP_HEIGHT) / 2)) : (y + 1),
|
|
BITMAP_WIDTH, BITMAP_HEIGHT, &BitmapDC,
|
|
0, 0, (bSelected ? MERGEPAINT : SRCAND) );
|
|
BitmapDC.SelectObject( pOldBitmap );
|
|
}
|
|
|
|
x = BITMAP_END + m_tmSpacerWidth;
|
|
|
|
/*
|
|
* Display the WinStation Name.
|
|
*/
|
|
pDC->TextOut( x, y,
|
|
pWSLObject->m_WinStationName,
|
|
lstrlen(pWSLObject->m_WinStationName) );
|
|
|
|
/*
|
|
* Display the Transport Name (1st Pd).
|
|
*/
|
|
pDC->TextOut( (x += m_tmMaxWSNameWidth + m_tmSpacerWidth),
|
|
y, pWSLObject->m_PdName,
|
|
lstrlen(pWSLObject->m_PdName) );
|
|
|
|
/*
|
|
* Display the Wd Name (Type).
|
|
*/
|
|
pDC->TextOut( (x += m_tmMaxPdNameWidth + m_tmSpacerWidth),
|
|
y, pWSLObject->m_WdName,
|
|
lstrlen(pWSLObject->m_WdName) );
|
|
|
|
/*
|
|
* Display the WinStation Comment (including prefixed device name for
|
|
* SdAsync and single-instance PdOemTransport display).
|
|
*/
|
|
{
|
|
TCHAR szBuffer[WINSTATIONCOMMENT_LENGTH + lengthof(pWSLObject->m_DeviceName) + 2];
|
|
|
|
if ( (pWSLObject->m_SdClass == SdAsync) ||
|
|
((pWSLObject->m_SdClass == SdOemTransport) &&
|
|
(pWSLObject->m_Flags & WSL_SINGLE_INST)) ) {
|
|
|
|
lstrcpy( szBuffer, pWSLObject->m_DeviceName );
|
|
lstrcat( szBuffer, TEXT(": ") );
|
|
} else {
|
|
szBuffer[0] = TEXT('\0');
|
|
}
|
|
lstrcat( szBuffer, pWSLObject->m_Comment );
|
|
pDC->TextOut( (x += m_tmMaxWdNameWidth + m_tmSpacerWidth),
|
|
y, szBuffer, lstrlen(szBuffer) );
|
|
}
|
|
|
|
/*
|
|
* Restore the DC.
|
|
*/
|
|
if ( !pDC->IsPrinting() ) {
|
|
|
|
pDC->SetBkColor(crOldBackground);
|
|
pDC->SetTextColor(crOldText);
|
|
}
|
|
|
|
/*
|
|
* Restore the old font.
|
|
*/
|
|
pDC->SelectObject(pOldFont);
|
|
|
|
} // end CAppServerView::OnDrawRow
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnDrawHeaderBar -
|
|
* CAppServerView member function: CRowView class override
|
|
*
|
|
* Draw the view's header bar.
|
|
*
|
|
* ENTRY:
|
|
*
|
|
* pDC (input)
|
|
* Points to the current CDC device-context object for the header bar.
|
|
*
|
|
* y (input)
|
|
* y-position (in device coordinates) to draw header bar text at.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnDrawHeaderBar( CDC* pDC,
|
|
int y )
|
|
{
|
|
/*
|
|
* Select the header bar font, background drawing mode, text color, and
|
|
* background color.
|
|
*/
|
|
HGDIOBJ hOldFont = pDC->SelectObject( m_pHeaderBar->GetFont() );
|
|
int nOldMode = pDC->SetBkMode( TRANSPARENT );
|
|
COLORREF crTextColor = pDC->SetTextColor( GetSysColor( COLOR_BTNTEXT ) );
|
|
COLORREF crBkColor = pDC->SetBkColor( GetSysColor( COLOR_BTNFACE ) );
|
|
|
|
/*
|
|
* Modify the window (DC) viewport origin to account for the current
|
|
* horizontal scrolling state of the attached view.
|
|
*/
|
|
CPoint ptVpOrg = -GetDeviceScrollPosition();
|
|
ptVpOrg.y = 0;
|
|
pDC->SetViewportOrg( ptVpOrg );
|
|
|
|
/*
|
|
* Display header text and dividing bars.
|
|
*/
|
|
CString str;
|
|
int x = BITMAP_END + m_tmSpacerWidth;
|
|
|
|
/*
|
|
* Display the WinStation Name header
|
|
*/
|
|
str.LoadString( IDS_HEADER_WINSTATIONNAME );
|
|
pDC->TextOut( x, y, str, lstrlen(str) );
|
|
pDC->MoveTo( x-3, y );
|
|
pDC->LineTo( x-3, y + m_tmFontHeight );
|
|
|
|
/*
|
|
* Display the Transport header.
|
|
*/
|
|
str.LoadString( IDS_HEADER_TRANSPORTNAME );
|
|
pDC->TextOut( (x += m_tmMaxWSNameWidth + m_tmSpacerWidth),
|
|
y, str, lstrlen(str) );
|
|
pDC->MoveTo( x-3, y );
|
|
pDC->LineTo( x-3, y + m_tmFontHeight );
|
|
|
|
/*
|
|
* Display the Type header
|
|
*/
|
|
str.LoadString( IDS_HEADER_TYPENAME );
|
|
pDC->TextOut( (x += m_tmMaxPdNameWidth + m_tmSpacerWidth),
|
|
y, str, lstrlen(str) );
|
|
pDC->MoveTo( x-3, y );
|
|
pDC->LineTo( x-3, y + m_tmFontHeight );
|
|
|
|
/*
|
|
* Display the WinStation Comment header
|
|
*/
|
|
str.LoadString( IDS_HEADER_COMMENT );
|
|
pDC->TextOut( (x += m_tmMaxWdNameWidth + m_tmSpacerWidth),
|
|
y, str, lstrlen(str) );
|
|
pDC->MoveTo( x-3, y );
|
|
pDC->LineTo( x-3, y + m_tmFontHeight );
|
|
|
|
/*
|
|
* Select the original stuff back into the DC.
|
|
*/
|
|
pDC->SelectObject( hOldFont );
|
|
pDC->SetBkMode( nOldMode );
|
|
pDC->SetTextColor( crTextColor );
|
|
pDC->SetBkColor( crBkColor );
|
|
|
|
} // end CAppServerView::OnDrawHeaderBar
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* ResetHeaderBar - CAppServerView member function: CRowView class override
|
|
*
|
|
* Set the font for the header bar and call the CRowView ResetHeaderBar()
|
|
* member function.
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::ResetHeaderBar()
|
|
{
|
|
/*
|
|
* Set the header bar's font to the app's current font.
|
|
*
|
|
* BUGBUG: we may want to have the header font be different from the
|
|
* view (app) font. It could be set here.
|
|
*/
|
|
m_pHeaderBar->SetFont( &(((CWincfgApp *)AfxGetApp())->m_font) );
|
|
|
|
/*
|
|
* Call the CRowView ResetHeaderBar member function to finish up.
|
|
*/
|
|
CRowView::ResetHeaderBar();
|
|
|
|
} // end CAppServerView::ResetHeaderBar
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// CAppServerView operations
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* ResetView - CAppServerView member function: public operation
|
|
*
|
|
* Reset the view for complete update, including the header bar.
|
|
*
|
|
* ENTRY:
|
|
* bCalculateFieldMaximums (input)
|
|
* TRUE if request to recalculate the maximum sizes of each field in
|
|
* the view, based on the current WSL contents; FALSE otherwise.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::ResetView( BOOL bCalculateFieldMaximums )
|
|
{
|
|
/*
|
|
* Calculate field maximum values if requested (default to screen DC).
|
|
* The bCalculateFieldMaximums flag will generally be set to TRUE when
|
|
* ResetView is called after a font change or for complete view reset;
|
|
* FALSE when called after a row update (change) has occurred that was
|
|
* already handled by an explicit CalculateFieldMaximums() call.
|
|
*/
|
|
if ( bCalculateFieldMaximums )
|
|
CalculateFieldMaximums( NULL, NULL, TRUE );
|
|
|
|
/*
|
|
* Reset the header bar, which will cause the parent frame's layout to be
|
|
* recalculated.
|
|
*/
|
|
ResetHeaderBar();
|
|
|
|
/*
|
|
* Invalidate the entire view to cause full repaint and update the scroll
|
|
* sizes for this view.
|
|
*/
|
|
Invalidate();
|
|
UpdateScrollSizes();
|
|
|
|
} // end CAppServerView::ResetView
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* CalculateFieldMaximums - CAppServerView member function: private operation
|
|
*
|
|
* Recalculate the maximum width for each display field in the view.
|
|
*
|
|
* ENTRY:
|
|
* pWSLObject (input)
|
|
* Points to WSLObject to use for new maximum calculation; if this is
|
|
* NULL, then will traverse the entire WSL to recalculate maximums.
|
|
* pEntryDC (input)
|
|
* Points to the CDC object to use for the GetTextExtent() calls; if
|
|
* NULL then will open up a screen DC to use.
|
|
* bResetDefaults (input)
|
|
* TRUE to reset the minimum field sizes to the sizes of the header
|
|
* bar text for each field; FALSE for no such reset.
|
|
*
|
|
* EXIT:
|
|
* (BOOL) TRUE if new maximum(s) were set; FALSE otherwise.
|
|
*
|
|
******************************************************************************/
|
|
|
|
BOOL
|
|
CAppServerView::CalculateFieldMaximums( PWSLOBJECT pWSLObject,
|
|
CDC * pEntryDC,
|
|
BOOL bResetDefaults )
|
|
{
|
|
BOOL bNewMaximums = FALSE;
|
|
TEXTMETRIC tm;
|
|
CDC *pDC, DC;
|
|
CFont * pOldFont;
|
|
|
|
/*
|
|
* If the given CDC is NULL, open up a screen DC and point to it.
|
|
* Otherwise, point to the one given.
|
|
*/
|
|
if ( pEntryDC == NULL ) {
|
|
|
|
DC.CreateCompatibleDC( NULL );
|
|
pDC = &DC;
|
|
|
|
} else
|
|
pDC = pEntryDC;
|
|
|
|
/*
|
|
* Select the app's font into the DC and get the text metrics.
|
|
*/
|
|
pOldFont = pDC->SelectObject( &(pApp->m_font) );
|
|
pDC->GetTextMetrics( &tm );
|
|
|
|
/*
|
|
* If the bResetDefaults flag is TRUE, establish the default field
|
|
* widths based on the width required for the field's header.
|
|
*/
|
|
if ( bResetDefaults ) {
|
|
CString str;
|
|
|
|
str.LoadString( IDS_HEADER_TRANSPORTNAME );
|
|
m_tmMaxPdNameWidth = (pDC->GetTextExtent( str, lstrlen(str) )).cx;
|
|
|
|
str.LoadString( IDS_HEADER_WINSTATIONNAME );
|
|
m_tmMaxWSNameWidth = (pDC->GetTextExtent( str, lstrlen(str) )).cx;
|
|
|
|
str.LoadString( IDS_HEADER_TYPENAME );
|
|
m_tmMaxWdNameWidth = (pDC->GetTextExtent( str, lstrlen(str) )).cx;
|
|
|
|
str.LoadString( IDS_HEADER_COMMENT );
|
|
m_tmMaxCommentWidth = (pDC->GetTextExtent( str, lstrlen(str) )).cx;
|
|
}
|
|
|
|
/*
|
|
* Establish the inter-field spacer width and save the font height
|
|
* to use in GetRowWidthHeight() calculations.
|
|
*/
|
|
m_tmSpacerWidth = SPACER_COLUMNS * tm.tmAveCharWidth;
|
|
m_tmFontHeight = tm.tmHeight;
|
|
|
|
/*
|
|
* Determine new field maximums based on GetTextExtent calls with actual
|
|
* WSLObject strings.
|
|
*/
|
|
if ( pWSLObject ) {
|
|
|
|
/*
|
|
* A WSLObject was specified. Determine if that one causes new
|
|
* field maximums.
|
|
*/
|
|
bNewMaximums = WSLObjectFieldMaximums( pWSLObject, pDC );
|
|
|
|
} else {
|
|
|
|
/*
|
|
* No WSLObject was specified. Traverse the entire WinStation Object
|
|
* List
|
|
*/
|
|
int i, count = GetRowCount();
|
|
|
|
for ( i = 0; i < count; i++ ) {
|
|
|
|
if ( (pWSLObject = GetDocument()->GetWSLObject( i )) )
|
|
bNewMaximums = WSLObjectFieldMaximums( pWSLObject, pDC );
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Set the total line width variable.
|
|
*/
|
|
m_tmTotalWidth = BITMAP_END + m_tmSpacerWidth +
|
|
m_tmMaxWSNameWidth + m_tmSpacerWidth +
|
|
m_tmMaxPdNameWidth + m_tmSpacerWidth +
|
|
m_tmMaxWdNameWidth + m_tmSpacerWidth +
|
|
m_tmMaxCommentWidth + m_tmSpacerWidth;
|
|
|
|
/*
|
|
* Select the original font back into the DC.
|
|
*/
|
|
pDC->SelectObject( pOldFont );
|
|
|
|
return ( bNewMaximums );
|
|
|
|
} // end CAppServerView::CalculateFieldMaximums
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* WSLObjectFieldMaximums - CAppServerView member function: private operation
|
|
*
|
|
* Calculate display field sizes for the viewable items in a WSLObject,
|
|
* resetting the maximum view field sizes if necessary.
|
|
*
|
|
* ENTRY:
|
|
* pWSLObject (input)
|
|
* Points to WSLObject to use for new maximum calculation.
|
|
* pEntryDC (input)
|
|
* Points to the CDC object to use for the GetTextExtent() calls.
|
|
*
|
|
* EXIT:
|
|
* (BOOL) TRUE if new maximum(s) were set; FALSE otherwise.
|
|
*
|
|
******************************************************************************/
|
|
|
|
BOOL
|
|
CAppServerView::WSLObjectFieldMaximums( PWSLOBJECT pWSLObject,
|
|
CDC * pDC )
|
|
{
|
|
CSize strSize;
|
|
BOOL bNewMaximums = FALSE;
|
|
|
|
/*
|
|
* WinStation name.
|
|
*/
|
|
strSize = pDC->GetTextExtent( pWSLObject->m_WinStationName,
|
|
lstrlen(pWSLObject->m_WinStationName) );
|
|
if ( strSize.cx > m_tmMaxWSNameWidth ) {
|
|
m_tmMaxWSNameWidth = strSize.cx;
|
|
bNewMaximums = TRUE;
|
|
}
|
|
|
|
/*
|
|
* Transport (1st Pd) Name.
|
|
*/
|
|
strSize = pDC->GetTextExtent( pWSLObject->m_PdName,
|
|
lstrlen(pWSLObject->m_PdName) );
|
|
if ( strSize.cx > m_tmMaxPdNameWidth ) {
|
|
m_tmMaxPdNameWidth = strSize.cx;
|
|
bNewMaximums = TRUE;
|
|
}
|
|
|
|
/*
|
|
* Wd Name.
|
|
*/
|
|
strSize = pDC->GetTextExtent( pWSLObject->m_WdName,
|
|
lstrlen(pWSLObject->m_WdName) );
|
|
if ( strSize.cx > m_tmMaxWdNameWidth ) {
|
|
m_tmMaxWdNameWidth = strSize.cx;
|
|
bNewMaximums = TRUE;
|
|
}
|
|
|
|
/*
|
|
* Comment (including prefixed device name for SdAsync and single-instance
|
|
* PdOemTransport display).
|
|
*/
|
|
strSize = pDC->GetTextExtent( pWSLObject->m_Comment,
|
|
lstrlen(pWSLObject->m_Comment) );
|
|
|
|
if ( (pWSLObject->m_SdClass == SdAsync) ||
|
|
((pWSLObject->m_SdClass == SdOemTransport) &&
|
|
(pWSLObject->m_Flags & WSL_SINGLE_INST)) ) {
|
|
|
|
CSize strSize2;
|
|
|
|
strSize2 = pDC->GetTextExtent( pWSLObject->m_DeviceName,
|
|
lstrlen(pWSLObject->m_DeviceName) );
|
|
strSize.cx += strSize2.cx;
|
|
|
|
strSize2 = pDC->GetTextExtent( TEXT(": "), 2 );
|
|
strSize.cx += strSize2.cx;
|
|
}
|
|
|
|
if ( strSize.cx > m_tmMaxCommentWidth ) {
|
|
m_tmMaxCommentWidth = strSize.cx;
|
|
bNewMaximums = TRUE;
|
|
}
|
|
|
|
return ( bNewMaximums );
|
|
|
|
} // end CAppServerView::WSLObjectFieldMaximums
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// CAppServerView message map
|
|
|
|
BEGIN_MESSAGE_MAP(CAppServerView, CRowView)
|
|
//{{AFX_MSG_MAP(CAppServerView)
|
|
ON_WM_CREATE()
|
|
ON_COMMAND(ID_WINSTATION_ADD, OnWinStationAdd)
|
|
ON_UPDATE_COMMAND_UI(ID_WINSTATION_ADD, OnUpdateWinStationAdd)
|
|
ON_COMMAND(ID_WINSTATION_COPY, OnWinStationCopy)
|
|
ON_UPDATE_COMMAND_UI(ID_WINSTATION_COPY, OnUpdateWinStationCopy)
|
|
ON_COMMAND(ID_WINSTATION_DELETE, OnWinStationDelete)
|
|
ON_UPDATE_COMMAND_UI(ID_WINSTATION_DELETE, OnUpdateWinStationDelete)
|
|
ON_COMMAND(ID_WINSTATION_RENAME, OnWinStationRename)
|
|
ON_UPDATE_COMMAND_UI(ID_WINSTATION_RENAME, OnUpdateWinStationRename)
|
|
ON_COMMAND(ID_WINSTATION_EDIT, OnWinStationEdit)
|
|
ON_UPDATE_COMMAND_UI(ID_WINSTATION_EDIT, OnUpdateWinStationEdit)
|
|
ON_COMMAND(ID_WINSTATION_ENABLE, OnWinStationEnable)
|
|
ON_UPDATE_COMMAND_UI(ID_WINSTATION_ENABLE, OnUpdateWinStationEnable)
|
|
ON_COMMAND(ID_WINSTATION_DISABLE, OnWinStationDisable)
|
|
ON_UPDATE_COMMAND_UI(ID_WINSTATION_DISABLE, OnUpdateWinStationDisable)
|
|
ON_WM_LBUTTONDBLCLK()
|
|
ON_COMMAND(ID_WINSTATION_NEXT, OnWinStationNext)
|
|
ON_UPDATE_COMMAND_UI(ID_WINSTATION_NEXT, OnUpdateWinStationNext)
|
|
ON_COMMAND(ID_WINSTATION_PREV, OnWinStationPrev)
|
|
ON_UPDATE_COMMAND_UI(ID_WINSTATION_PREV, OnUpdateWinStationPrev)
|
|
ON_COMMAND(ID_SECURITY_PERMISSIONS, OnSecurityPermissions)
|
|
ON_WM_RBUTTONDOWN()
|
|
ON_WM_RBUTTONUP()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// CAppServerView commands
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnCreate - CAppServerView member function: command
|
|
*
|
|
* Perform initialization when view is created.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
* (refer to CWnd::OnCreate documentation)
|
|
*
|
|
******************************************************************************/
|
|
|
|
int
|
|
CAppServerView::OnCreate( LPCREATESTRUCT lpCreateStruct )
|
|
{
|
|
/*
|
|
* Construct a new instance of a CRowViewHeaderBar object and set the
|
|
* m_bAutoDelete member variable (defined in CControlBar class) to TRUE
|
|
* to cause the object to be deleted automatically when the windows control
|
|
* bar is destroyed. The CRowView's OnCreate will see that the m_pHeaderBar
|
|
* member variable is not NULL and will actually create the header bar via
|
|
* its Create() member function.
|
|
*/
|
|
m_pHeaderBar = new CRowViewHeaderBar;
|
|
m_pHeaderBar->m_bAutoDelete = TRUE;
|
|
|
|
/*
|
|
* Call the CRowView parent class OnCreate.
|
|
*/
|
|
if ( CRowView::OnCreate( lpCreateStruct ) == -1 )
|
|
return(-1);
|
|
|
|
/*
|
|
* Reset the view (with calculating new field maximums).
|
|
*/
|
|
ResetView(TRUE);
|
|
|
|
return( 0 );
|
|
|
|
} // end CAppServerView::OnCreate
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnWinStationAdd - CAppServerView member function: command
|
|
*
|
|
* Process the "add winstation" command.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnWinStationAdd()
|
|
{
|
|
int nRow;
|
|
|
|
/*
|
|
* Only process add if it is allowed.
|
|
*/
|
|
if ( GetDocument()->IsAddAllowed(m_nActiveRow) ) {
|
|
|
|
if ( (nRow = GetDocument()->AddWinStation(m_nActiveRow)) != -1 )
|
|
m_nPrevSelectedRow = m_nActiveRow = nRow;
|
|
}
|
|
|
|
} // end CAppServerView::OnWinStationAdd
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnUpdateWinStationAdd - CAppServerView member function: command
|
|
*
|
|
* Enable or disable the "add winstation" command depending on whether
|
|
* or not it is allowed on the active row's WinStation.
|
|
*
|
|
* ENTRY:
|
|
* pCndUI (input)
|
|
* Points to the CCmdUI object of the "add winstation"
|
|
* command item.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnUpdateWinStationAdd( CCmdUI* pCmdUI )
|
|
{
|
|
pCmdUI->Enable( GetDocument()->IsAddAllowed(m_nActiveRow) ?
|
|
TRUE : FALSE );
|
|
|
|
} // end CAppServerView::OnUpdateWinStationAdd
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnWinStationCopy - CAppServerView member function: command
|
|
*
|
|
* Process the "copy winstation" command.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnWinStationCopy()
|
|
{
|
|
int nRow;
|
|
|
|
/*
|
|
* Only process copy if it is allowed.
|
|
*/
|
|
if ( GetDocument()->IsCopyAllowed(m_nActiveRow) ) {
|
|
|
|
if ( (nRow = GetDocument()->CopyWinStation(m_nActiveRow)) != -1 )
|
|
m_nPrevSelectedRow = m_nActiveRow = nRow;
|
|
}
|
|
|
|
} // end CAppServerView::OnWinStationCopy
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnUpdateWinStationCopy - CAppServerView member function: command
|
|
*
|
|
* Enable or disable the "copy winstation" command depending on whether
|
|
* or not it is allowed on the active row's WinStation.
|
|
*
|
|
* ENTRY:
|
|
* pCndUI (input)
|
|
* Points to the CCmdUI object of the "copy winstation"
|
|
* command item.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnUpdateWinStationCopy( CCmdUI* pCmdUI )
|
|
{
|
|
pCmdUI->Enable( GetDocument()->IsCopyAllowed(m_nActiveRow) ?
|
|
TRUE : FALSE );
|
|
|
|
} // end CAppServerView::OnUpdateWinStationCopy
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnWinStationDelete - CAppServerView member function: command
|
|
*
|
|
* Process the "delete winstation" command.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnWinStationDelete()
|
|
{
|
|
/*
|
|
* Only process delete if it is allowed.
|
|
*/
|
|
if ( GetDocument()->IsDeleteAllowed(m_nActiveRow) ) {
|
|
|
|
if ( GetDocument()->DeleteWinStation(m_nActiveRow) ) {
|
|
|
|
if ( (m_nActiveRow >= GetRowCount()) && GetRowCount() )
|
|
m_nPrevSelectedRow = m_nActiveRow = (GetRowCount() - 1);
|
|
}
|
|
}
|
|
|
|
} // end CAppServerView::OnWinStationDelete
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnUpdateWinStationDelete - CAppServerView member function: command
|
|
*
|
|
* Enable or disable the "delete winstation" command depending on whether
|
|
* or not it is allowed on the active row's WinStation.
|
|
*
|
|
* ENTRY:
|
|
* pCndUI (input)
|
|
* Points to the CCmdUI object of the "delete winstation"
|
|
* command item.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnUpdateWinStationDelete( CCmdUI* pCmdUI )
|
|
{
|
|
pCmdUI->Enable( GetDocument()->IsDeleteAllowed(m_nActiveRow) ?
|
|
TRUE : FALSE );
|
|
|
|
} // end CAppServerView::OnUpdateWinStationDelete
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnWinStationRename - CAppServerView member function: command
|
|
*
|
|
* Process the "rename winstation" command.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnWinStationRename()
|
|
{
|
|
int nRow;
|
|
|
|
/*
|
|
* Only process rename if it is allowed.
|
|
*/
|
|
if ( GetDocument()->IsRenameAllowed(m_nActiveRow) ) {
|
|
|
|
if ( (nRow = GetDocument()->RenameWinStation(m_nActiveRow)) != -1 )
|
|
m_nPrevSelectedRow = m_nActiveRow = nRow;
|
|
}
|
|
|
|
} // end CAppServerView::OnWinStationRename
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnUpdateWinStationRename - CAppServerView member function: command
|
|
*
|
|
* Enable or disable the "rename winstation" command depending on whether
|
|
* or not it is allowed on the active row's WinStation.
|
|
*
|
|
* ENTRY:
|
|
* pCndUI (input)
|
|
* Points to the CCmdUI object of the "rename winstation"
|
|
* command item.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnUpdateWinStationRename(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable( GetDocument()->IsRenameAllowed(m_nActiveRow) ?
|
|
TRUE : FALSE );
|
|
|
|
} // end CAppServerView::OnUpdateWinStationRename
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnWinStationEdit - CAppServerView member function: command
|
|
*
|
|
* Process the "edit winstation" command.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnWinStationEdit()
|
|
{
|
|
int nRow;
|
|
|
|
/*
|
|
* Only process edit if it is allowed.
|
|
*/
|
|
if ( GetDocument()->IsEditAllowed(m_nActiveRow) ) {
|
|
|
|
if ( (nRow = GetDocument()->EditWinStation(m_nActiveRow)) != -1 )
|
|
m_nPrevSelectedRow = m_nActiveRow = nRow;
|
|
}
|
|
|
|
} // end CAppServerView::OnWinStationEdit
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnUpdateWinStationEdit - CAppServerView member function: command
|
|
*
|
|
* Enable or disable the "edit winstation" command depending on whether
|
|
* or not it is allowed on the active row's WinStation.
|
|
*
|
|
* ENTRY:
|
|
* pCndUI (input)
|
|
* Points to the CCmdUI object of the "edit winstation" command item.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnUpdateWinStationEdit(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable( GetDocument()->IsEditAllowed(m_nActiveRow) ?
|
|
TRUE : FALSE );
|
|
|
|
} // end CAppServerView::OnUpdateWinStationEdit
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnWinStationEnable - CAppServerView member function: command
|
|
*
|
|
* Process the "enable winstation" command.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnWinStationEnable()
|
|
{
|
|
/*
|
|
* Only process enable if it is allowed.
|
|
*/
|
|
if ( GetDocument()->IsEnableAllowed(m_nActiveRow, TRUE ) )
|
|
GetDocument()->EnableWinStation( m_nActiveRow, TRUE );
|
|
|
|
} // end CAppServerView::OnWinStationEnable
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnUpdateWinStationEnable - CAppServerView member function: command
|
|
*
|
|
* Enable or disable the "enable winstation" command depending on
|
|
* whether or not it is allowed on the active row's WinStation.
|
|
*
|
|
* ENTRY:
|
|
* pCndUI (input)
|
|
* Points to the CCmdUI object of the "enable winstation"
|
|
* command item.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnUpdateWinStationEnable(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable( GetDocument()->IsEnableAllowed( m_nActiveRow, TRUE ) ?
|
|
TRUE : FALSE );
|
|
|
|
} // end CAppServerView::OnUpdateWinStationEnable
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnWinStationDisable - CAppServerView member function: command
|
|
*
|
|
* Process the "disable winstation" command.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnWinStationDisable()
|
|
{
|
|
/*
|
|
* Only process disable if it is allowed.
|
|
*/
|
|
if ( GetDocument()->IsEnableAllowed( m_nActiveRow, FALSE ) )
|
|
GetDocument()->EnableWinStation( m_nActiveRow, FALSE );
|
|
|
|
} // end CAppServerView::OnWinStationDisable
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnUpdateWinStationDisable - CAppServerView member function: command
|
|
*
|
|
* Enable or disable the "disable winstation" command depending on
|
|
* whether or not it is allowed on the active row's WinStation.
|
|
*
|
|
* ENTRY:
|
|
* pCndUI (input)
|
|
* Points to the CCmdUI object of the "disable winstation"
|
|
* command item.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnUpdateWinStationDisable(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable( GetDocument()->IsEnableAllowed( m_nActiveRow, FALSE ) ?
|
|
TRUE : FALSE );
|
|
|
|
} // end CAppServerView::OnUpdateWinStationDisable
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnLButtonDblClk - CAppServerView member function: command
|
|
*
|
|
* Process a left mouse button double-click as an "edit winstation"
|
|
* command.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
* (Refer to the CWnd::OnLButtonCblClk documentation)
|
|
*
|
|
******************************************************************************/
|
|
|
|
void CAppServerView::OnLButtonDblClk(UINT nFlags, CPoint point)
|
|
{
|
|
/*
|
|
* Let the parent class process the message first.
|
|
*/
|
|
CRowView::OnLButtonDblClk(nFlags, point);
|
|
|
|
/*
|
|
* Treat this as a 'Edit/View WinStation' request.
|
|
*/
|
|
OnWinStationEdit();
|
|
|
|
} // end CAppServerView::OnLButtonDblClk
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnWinStationNext - CAppServerView member function: command
|
|
*
|
|
* Processes the "next winstation" command by calling the
|
|
* ChangeSelectionNextRow function with argument TRUE.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnWinStationNext()
|
|
{
|
|
ChangeSelectionNextRow(TRUE);
|
|
|
|
} // end CAppServerView::OnWinStationNext
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnUpdateWinStationNext - CAppServerView member function: command
|
|
*
|
|
* Enables or disables the "next winstation" command item based on
|
|
* whether or not we're at the end of the view's list.
|
|
*
|
|
* ENTRY:
|
|
* pCndUI (input)
|
|
* Points to the CCmdUI object of the "next winstation"
|
|
* command item.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnUpdateWinStationNext( CCmdUI* pCmdUI )
|
|
{
|
|
pCmdUI->Enable( (m_nActiveRow < (GetRowCount() - 1)) ? TRUE : FALSE );
|
|
|
|
} // end CAppServerView::OnUpdateWinStationNext
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnWinStationPrev - CAppServerView member function: command
|
|
*
|
|
* Processes the "previous winstation" command by calling the
|
|
* ChangeSelectionNextRow function with argument FALSE.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnWinStationPrev()
|
|
{
|
|
ChangeSelectionNextRow(FALSE);
|
|
|
|
} // end CAppServerView::OnWinStationPrev
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnUpdateWinStationPrev - CAppServerView member function: command
|
|
*
|
|
* Enables or disables the "previous winstation" command item based on
|
|
* whether or not we're at the beginning of the view's list.
|
|
*
|
|
* ENTRY:
|
|
* pCndUI (input)
|
|
* Points to the CCmdUI object of the "next winstation"
|
|
* command item.
|
|
*
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnUpdateWinStationPrev( CCmdUI* pCmdUI )
|
|
{
|
|
pCmdUI->Enable( (m_nActiveRow > 0) ? TRUE : FALSE );
|
|
|
|
} // end CAppServerView::OnUpdateWinStationPrev
|
|
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* OnSecurityPermissions - CAppServerView member function: command
|
|
*
|
|
* Process the "Permissions..." command.
|
|
*
|
|
* ENTRY:
|
|
* EXIT:
|
|
*
|
|
******************************************************************************/
|
|
|
|
void
|
|
CAppServerView::OnSecurityPermissions()
|
|
{
|
|
GetDocument()->SecurityPermissions(m_nActiveRow);
|
|
|
|
} // end CAppServerView::OnSecurityPermissions
|
|
|
|
|
|
void CAppServerView::OnRButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
CRect rect(point, CSize(1,1));
|
|
|
|
int nFirstRow, nLastRow;
|
|
RectLPtoRowRange(rect, nFirstRow, nLastRow, TRUE);
|
|
|
|
if (nFirstRow <= (GetRowCount() - 1))
|
|
ChangeSelectionToRow(nFirstRow);
|
|
|
|
//CRowView::OnRButtonDown(nFlags, point);
|
|
}
|
|
|
|
void CAppServerView::OnRButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
CRect rect(point, CSize(1,1));
|
|
|
|
int nFirstRow, nLastRow;
|
|
RectLPtoRowRange(rect, nFirstRow, nLastRow, TRUE);
|
|
|
|
if(nFirstRow == GetActiveRow()) {
|
|
::GetCursorPos(&point);
|
|
CMenu menu;
|
|
if(menu.LoadMenu(IDR_POPUP)) {
|
|
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,
|
|
point.x, point.y, AfxGetMainWnd());
|
|
menu.DestroyMenu();
|
|
}
|
|
}
|
|
|
|
//CRowView::OnRButtonUp(nFlags, point);
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|