|
|
//Copyright (c) 1998 - 1999 Microsoft Corporation
/*******************************************************************************
* * rtpane.cpp * * implementation of the CRightPane class * * *******************************************************************************/
#include "stdafx.h"
#include "winadmin.h"
#include "rtpane.h"
#include "admindoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
////////////////////////////
// MESSAGE MAP: CRightPane
//
IMPLEMENT_DYNCREATE(CRightPane, CView)
BEGIN_MESSAGE_MAP(CRightPane, CView) //{{AFX_MSG_MAP(CRightPane)
ON_WM_SIZE() ON_MESSAGE(WM_ADMIN_CHANGEVIEW, OnAdminChangeView) ON_MESSAGE(WM_ADMIN_ADD_SERVER, OnAdminAddServer) ON_MESSAGE(WM_ADMIN_REMOVE_SERVER, OnAdminRemoveServer) ON_MESSAGE(WM_ADMIN_UPDATE_SERVER, OnAdminUpdateServer) ON_MESSAGE(WM_ADMIN_UPDATE_PROCESSES, OnAdminUpdateProcesses) ON_MESSAGE(WM_ADMIN_REMOVE_PROCESS, OnAdminRemoveProcess) ON_MESSAGE(WM_ADMIN_REDISPLAY_PROCESSES, OnAdminRedisplayProcesses) ON_MESSAGE(WM_ADMIN_UPDATE_SERVER_INFO, OnAdminUpdateServerInfo) ON_MESSAGE(WM_ADMIN_REDISPLAY_LICENSES, OnAdminRedisplayLicenses) ON_MESSAGE(WM_ADMIN_UPDATE_WINSTATIONS, OnAdminUpdateWinStations) ON_MESSAGE(WM_ADMIN_TABBED_VIEW , OnTabbedView) ON_MESSAGE(WM_ADMIN_SHIFTTABBED_VIEW , OnShiftTabbedView ) ON_MESSAGE( WM_ADMIN_CTRLTABBED_VIEW , OnCtrlTabbedView ) ON_MESSAGE( WM_ADMIN_CTRLSHIFTTABBED_VIEW , OnCtrlShiftTabbedView ) ON_MESSAGE( WM_ADMIN_NEXTPANE_VIEW , OnNextPane ) ON_WM_SETFOCUS() //}}AFX_MSG_MAP
END_MESSAGE_MAP()
RightPaneView CRightPane::views[NUMBER_OF_VIEWS] = { { NULL, RUNTIME_CLASS( CBlankView ) }, { NULL, RUNTIME_CLASS( CAllServersView ) }, { NULL, RUNTIME_CLASS( CDomainView ) }, { NULL, RUNTIME_CLASS( CServerView ) }, { NULL, RUNTIME_CLASS( CMessageView ) }, { NULL, RUNTIME_CLASS( CWinStationView ) }, };
/////////////////////////
// CRightPane ctor
//
// - the view pointers are initially set to NULL
// - the default view type is BLANK
//
CRightPane::CRightPane() { m_CurrViewType = VIEW_BLANK;
} // end CRightPane ctor
////////////////////////////
// CRightPane::OnDraw
//
void CRightPane::OnDraw(CDC* pDC) {
} // end CRightPane::OnDraw
/////////////////////////
// CRightPane dtor
//
CRightPane::~CRightPane() { } // end CRightPane ctor
#ifdef _DEBUG
/////////////////////////////////
// CRightPane::AssertValid
//
void CRightPane::AssertValid() const { CView::AssertValid();
} // end CView::AssertValid
//////////////////////////
// CRightPane::Dump
//
void CRightPane::Dump(CDumpContext& dc) const { CView::Dump(dc);
} // end CRightPane::Dump
#endif //_DEBUG
/////////////////////////////////////
// CRightPane::OnInitialUpdate
//
// - each of the default view objects is created
// - the CBlankView object is initially the 'active' view in the right pane
//
void CRightPane::OnInitialUpdate() { CView::OnInitialUpdate(); CFrameWnd* pMainWnd = (CFrameWnd*)AfxGetMainWnd(); CWinAdminDoc* pDoc = (CWinAdminDoc*)pMainWnd->GetActiveDocument();
for(int vw = 0; vw < NUMBER_OF_VIEWS; vw++) { views[vw].m_pView = (CAdminView*)views[vw].m_pRuntimeClass->CreateObject(); views[vw].m_pView->Create(NULL, NULL, WS_CHILD, CRect(0, 0, 0, 0), this, vw); pDoc->AddView(views[vw].m_pView); }
pDoc->UpdateAllViews(NULL); } // end CRightPane::OnInitialUpdate
////////////////////////////
// CRightPane::OnSize
//
// - currently all views are sized to fit the view, whether they are 'active'
// or not... this may change to sizing only the view that is 'active' if
// it significantly impacts performance
//
void CRightPane::OnSize(UINT nType, int cx, int cy) { RECT rect; GetClientRect(&rect);
for(int i = 0; i < NUMBER_OF_VIEWS; i++) { if(views[i].m_pView && views[i].m_pView->GetSafeHwnd()) views[i].m_pView->MoveWindow(&rect, TRUE); }
CView::OnSize(nType, cx, cy);
} // end CRightPane::OnSize
/////////////////////////////////////
// CRightPane::OnAdminChangeView
//
// - if the new view type is different from the current
// view type, the new view type is made 'active', reset, and invalidated
// - if the new view type is the same as the current
// view type, the current view is simply reset using the new
// object pointer and then invalidated
//
// lParam contains pointer to CTreeNode of current item in tree
// wParam is TRUE if message caused by user clicking on tree item
//
LRESULT CRightPane::OnAdminChangeView(WPARAM wParam, LPARAM lParam) { CTreeNode* pNode = (CTreeNode*)lParam; ((CWinAdminDoc*)GetDocument())->SetCurrentPage(PAGE_CHANGING);
ODS( L"CRightPane::OnAdminChangeView\n" );
if( pNode == NULL ) { ODS( L"CRightPane!OnAdminChangeView pNode invalid\n" );
return 0; }
void *resetParam = pNode->GetTreeObject();
VIEW newView = VIEW_BLANK;
switch(pNode->GetNodeType()) {
case NODE_THIS_COMP: // FALL THROUGH
case NODE_FAV_LIST: resetParam = pNode; newView = VIEW_ALL_SERVERS; break;
case NODE_ALL_SERVERS: newView = VIEW_ALL_SERVERS; ODS( L"CRightPane::OnAdminChangeView = VIEW_ALL_SERVERS\n" ); break;
case NODE_DOMAIN: { CDomain *pDomain = (CDomain*)pNode->GetTreeObject(); // If we haven't fired off a background thread for this
// domain yet, do it now
if(!pDomain->GetThreadPointer()) { newView = VIEW_MESSAGE; ODS( L"CRightPane::OnAdminChangeView = VIEW_MESSAGE\n" ); // todo change message to let the user know that a dblclk action is required to
// start the enumeration process.
resetParam = (void*)IDS_DOMAIN_DBLCLK_MSG; // pDomain->StartEnumerating();
} else if(pDomain->IsState(DS_INITIAL_ENUMERATION)) { newView = VIEW_MESSAGE; ODS( L"CRightPane::OnAdminChangeView = VIEW_MESSAGE\n" ); resetParam = (void*)IDS_DOMAIN_FINDING_SERVERS; } else { newView = VIEW_DOMAIN; ODS( L"CRightPane::OnAdminChangeView = VIEW_DOMAIN\n" ); } } break;
case NODE_SERVER: { CServer *pServer = (CServer*)pNode->GetTreeObject(); if(pServer->GetThreadHandle() == NULL) { newView = VIEW_MESSAGE; ODS( L"CRightPane::OnAdminChangeView = VIEW_MESSAGE !pServer->GetThreadPointer\n" ); // If we just disconnected from this server, we don't
// want to reconnect
if( ( pServer->IsState( SS_NOT_CONNECTED ) || pServer->IsPreviousState(SS_DISCONNECTING) ) && !wParam) { resetParam = (void*)IDS_CLICK_TO_CONNECT; } else { resetParam = (void*)IDS_GATHERING_SERVER_INFO; pServer->Connect(); } } else if(!pServer->IsServerSane()) { newView = VIEW_MESSAGE; ODS( L"CRightPane::OnAdminChangeView = VIEW_MESSAGE !pServer->IsServerSane\n" ); resetParam = (void*)IDS_NOT_AUTHENTICATED; } else if(!pServer->IsState(SS_GOOD)) { newView = VIEW_MESSAGE; ODS( L"CRightPane::OnAdminChangeView = VIEW_MESSAGE !pServer->IsState(SS_GOOD)\n" ); resetParam = (void*)IDS_GATHERING_SERVER_INFO; } else { newView = VIEW_SERVER; ODS( L"CRightPane::OnAdminChangeView = VIEW_SERVER default\n" ); } } break;
case NODE_WINSTATION: { CWinStation *pWinStation = (CWinStation*)pNode->GetTreeObject(); if(pWinStation->IsConnected() || pWinStation->IsState(State_Disconnected) || pWinStation->IsState(State_Shadow)) { newView = VIEW_WINSTATION; ODS( L"CRightPane::OnAdminChangeView = VIEW_WINSTATION\n" ); } else if(pWinStation->IsState(State_Listen)) { newView = VIEW_MESSAGE; ODS( L"CRightPane::OnAdminChangeView = VIEW_MESSAGE\n" ); resetParam = (void *)IDS_LISTENER_MSG; } else { newView = VIEW_MESSAGE; ODS( L"CRightPane::OnAdminChangeView = VIEW_MESSAGE\n" ); resetParam = (void *)IDS_INACTIVE_MSG; } } break; }
if(m_CurrViewType != newView) { //views[newView].m_pView->Reset(resetParam);
views[m_CurrViewType].m_pView->ModifyStyle(WS_VISIBLE, WS_DISABLED); m_CurrViewType = newView; views[newView].m_pView->ModifyStyle(WS_DISABLED, WS_VISIBLE); views[newView].m_pView->Reset(resetParam); views[newView].m_pView->Invalidate(); } else { views[newView].m_pView->Reset(resetParam); }
((CWinAdminDoc*)GetDocument())->SetCurrentView(newView); return 0;
} // end CRightPane::OnAdminChangeView
/////////////////////////////////////
// CRightPane::OnAdminAddServer
//
LRESULT CRightPane::OnAdminAddServer(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// We only want to send this along if "All Listed Servers"
// or "Domain" is the current view
if(m_CurrViewType == VIEW_ALL_SERVERS || m_CurrViewType == VIEW_DOMAIN) views[m_CurrViewType].m_pView->SendMessage(WM_ADMIN_ADD_SERVER, wParam, lParam);
return 0;
} // end CRightPane::OnAdminAddServer
/////////////////////////////////////
// CRightPane::OnAdminRemoveServer
//
LRESULT CRightPane::OnAdminRemoveServer(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// ODS( L"CRightPane::OnAdminRemoveServer\n" );
// We only want to send this along if "All Listed Servers" or "Domain"
// is the current view
if(m_CurrViewType == VIEW_ALL_SERVERS || m_CurrViewType == VIEW_DOMAIN) { // ODS( L"view is ALL_SERVERS OR DOMAIN\n" );
views[m_CurrViewType].m_pView->SendMessage(WM_ADMIN_REMOVE_SERVER, wParam, lParam); }
return 0;
} // end CRightPane::OnAdminRemoveServer
/////////////////////////////////////
// CRightPane::OnAdminUpdateServer
//
LRESULT CRightPane::OnAdminUpdateServer(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// We only want to send this along if "All Listed Servers" or Domain
// the current view
if(m_CurrViewType == VIEW_ALL_SERVERS || m_CurrViewType == VIEW_DOMAIN) { views[m_CurrViewType].m_pView->SendMessage(WM_ADMIN_UPDATE_SERVER, wParam, lParam); } return 0;
} // end CRightPane::OnAdminUpdateServer
/////////////////////////////////////
// CRightPane::OnAdminUpdateProcesses
//
LRESULT CRightPane::OnAdminUpdateProcesses(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
BOOL bSendMessage = FALSE;
void *pCurrentSelectedNode = ((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->GetCurrentSelectedNode();
switch(m_CurrViewType) { case VIEW_ALL_SERVERS: bSendMessage = TRUE; break;
case VIEW_DOMAIN: if((CDomain*)((CServer*)lParam)->GetDomain() == (CDomain*)pCurrentSelectedNode) bSendMessage = TRUE; break; case VIEW_SERVER: if((void*)lParam == pCurrentSelectedNode) bSendMessage = TRUE; break;
case VIEW_WINSTATION: if((CServer*)lParam == (CServer*)((CWinStation*)pCurrentSelectedNode)->GetServer()) bSendMessage = TRUE; break; } if(bSendMessage) { views[m_CurrViewType].m_pView->SendMessage(WM_ADMIN_UPDATE_PROCESSES, wParam, lParam); }
return 0;
} // end CRightPane::OnAdminUpdateProcesses
/////////////////////////////////////
// CRightPane::OnAdminRemoveProcess
//
LRESULT CRightPane::OnAdminRemoveProcess(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// We only want to send this along if "All Listed Servers", VIEW_DOMAIN, or VIEW_SERVER is
// the current view
if(m_CurrViewType == VIEW_ALL_SERVERS || m_CurrViewType == VIEW_DOMAIN || m_CurrViewType == VIEW_WINSTATION) { views[m_CurrViewType].m_pView->SendMessage(WM_ADMIN_REMOVE_PROCESS, wParam, lParam); return 0; }
void *pCurrentSelectedNode = ((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->GetCurrentSelectedNode();
if(m_CurrViewType == VIEW_SERVER && ((CServer*)((CProcess*)lParam)->GetServer() == (CServer*)pCurrentSelectedNode)) views[m_CurrViewType].m_pView->SendMessage(WM_ADMIN_REMOVE_PROCESS, wParam, lParam);
return 0;
} // end CRightPane::OnAdminUpdateProcesses
/////////////////////////////////////
// CRightPane::OnAdminRedisplayProcesses
//
LRESULT CRightPane::OnAdminRedisplayProcesses(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
void *pCurrentSelectedNode = NULL;
if(m_CurrViewType == VIEW_ALL_SERVERS || m_CurrViewType == VIEW_DOMAIN || m_CurrViewType == VIEW_SERVER || m_CurrViewType == VIEW_WINSTATION) { if( m_CurrViewType == VIEW_ALL_SERVERS ) { pCurrentSelectedNode = ((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->GetCurrentSelectedNode(); }
views[m_CurrViewType].m_pView->SendMessage(WM_ADMIN_REDISPLAY_PROCESSES, ( WPARAM )m_CurrViewType , ( LPARAM )pCurrentSelectedNode ); }
return 0;
} // end CRightPane::OnAdminRedisplayProcesses
/////////////////////////////////////
// CRightPane::OnAdminUpdateWinStations
//
LRESULT CRightPane::OnAdminUpdateWinStations(WPARAM wParam, LPARAM lParam) { ASSERT(lParam); BOOL bSendMessage = FALSE;
void *pCurrentSelectedNode = ((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->GetCurrentSelectedNode();
switch(m_CurrViewType) {
case VIEW_ALL_SERVERS: ODS( L"CRightPane::OnAdminUpdateWinStations -- VIEW_ALL_SERVERS\n" ); bSendMessage = TRUE; break; case VIEW_DOMAIN: ODS( L"CRightPane::OnAdminUpdateWinStations -- VIEW_DOMAIN\n" ); if((CDomain*)((CServer*)lParam)->GetDomain() == (CDomain*)pCurrentSelectedNode) bSendMessage = TRUE; break; case VIEW_SERVER: ODS( L"CRightPane::OnAdminUpdateWinStations -- VIEW_SERVER\n" ); if((void*)lParam == pCurrentSelectedNode) bSendMessage = TRUE; break; case VIEW_WINSTATION: ODS( L"CRightPane::OnAdminUpdateWinStations -- VIEW_WINSTATION\n" ); if((CServer*)lParam == (CServer*)((CWinStation*)pCurrentSelectedNode)->GetServer()) bSendMessage = TRUE; break; } if(bSendMessage) { views[m_CurrViewType].m_pView->SendMessage(WM_ADMIN_UPDATE_WINSTATIONS, wParam, lParam); }
return 0;
} // end CRightPane::OnAdminUpdateWinStations
/////////////////////////////////////
// CRightPane::OnAdminUpdateServerInfo
//
LRESULT CRightPane::OnAdminUpdateServerInfo(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
BOOL bSendMessage = FALSE;
void *pCurrentSelectedNode = ((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->GetCurrentSelectedNode();
switch(m_CurrViewType) { case VIEW_DOMAIN: if((CDomain*)((CServer*)lParam)->GetDomain() == (CDomain*)pCurrentSelectedNode) bSendMessage = TRUE; break; case VIEW_SERVER: if((void*)lParam == pCurrentSelectedNode) bSendMessage = TRUE; break;
case VIEW_WINSTATION: if((CServer*)lParam == (CServer*)((CWinStation*)pCurrentSelectedNode)->GetServer()) bSendMessage = TRUE; break; } if(bSendMessage) { views[m_CurrViewType].m_pView->SendMessage(WM_ADMIN_UPDATE_SERVER_INFO, wParam, lParam); }
return 0;
} // end CRightPane::OnAdminUpdateServerInfo
/////////////////////////////////////
// CRightPane::OnAdminRedisplayLicenses
//
LRESULT CRightPane::OnAdminRedisplayLicenses(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
if(m_CurrViewType == VIEW_ALL_SERVERS) views[VIEW_ALL_SERVERS].m_pView->SendMessage(WM_ADMIN_REDISPLAY_LICENSES, wParam, lParam);
else if(m_CurrViewType == VIEW_DOMAIN && (CDomain*)((CServer*)lParam)->GetDomain() == (CDomain*)((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->GetCurrentSelectedNode()) views[VIEW_DOMAIN].m_pView->SendMessage(WM_ADMIN_REDISPLAY_LICENSES, wParam, lParam);
else if(m_CurrViewType == VIEW_SERVER && (CServer*)lParam == (CServer*)((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->GetCurrentSelectedNode()) views[VIEW_SERVER].m_pView->SendMessage(WM_ADMIN_REDISPLAY_LICENSES, wParam, lParam);
return 0;
} // end CRightPane::OnAdminRedisplayLicenses
/////////////////////////////////////
// CRightPane::OnSetFocus
//
void CRightPane::OnSetFocus(CWnd* pOldWnd) { CView::OnSetFocus(pOldWnd); views[m_CurrViewType].m_pView->SetFocus(); } // end CRightPane::OnSetFocus
LRESULT CRightPane::OnTabbedView(WPARAM wParam, LPARAM lParam) { return views[ m_CurrViewType ].m_pView->SendMessage( WM_ADMIN_TABBED_VIEW , 0 , 0 ); }
LRESULT CRightPane::OnShiftTabbedView( WPARAM , LPARAM ) { return views[ m_CurrViewType ].m_pView->SendMessage( WM_ADMIN_SHIFTTABBED_VIEW , 0 , 0 ); }
LRESULT CRightPane::OnCtrlTabbedView( WPARAM , LPARAM ) { return views[ m_CurrViewType ].m_pView->SendMessage( WM_ADMIN_CTRLTABBED_VIEW , 0 , 0 ); }
LRESULT CRightPane::OnCtrlShiftTabbedView( WPARAM , LPARAM ) { return views[ m_CurrViewType ].m_pView->SendMessage( WM_ADMIN_CTRLSHIFTTABBED_VIEW , 0 , 0 ); }
LRESULT CRightPane::OnNextPane( WPARAM , LPARAM ) { return views[ m_CurrViewType ].m_pView->SendMessage( WM_ADMIN_NEXTPANE_VIEW , 0 , 0 ); }
|