|
|
/*******************************************************************************
* * ltpane.cpp * * implementation of the CLeftPane class * * copyright notice: Copyright 1997, Citrix Systems Inc. * Copyright (c) 1998 - 1999 Microsoft Corporation * * $Author: donm $ Don Messerli * * $Log: N:\nt\private\utils\citrix\winutils\tsadmin\VCS\ltpane.cpp $ * * Rev 1.4 19 Feb 1998 17:40:48 donm * removed latest extension DLL support * * Rev 1.2 19 Jan 1998 16:47:48 donm * new ui behavior for domains and servers * * Rev 1.1 03 Nov 1997 15:24:40 donm * added Domains * * Rev 1.0 13 Oct 1997 22:33:18 donm * Initial revision. * *******************************************************************************/
#include "stdafx.h"
#include "winadmin.h"
#include "ltpane.h"
#include "admindoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
////////////////////////////
// MESSAGE MAP: CLeftPane
//
IMPLEMENT_DYNCREATE(CLeftPane, CView)
BEGIN_MESSAGE_MAP(CLeftPane, CView) //{{AFX_MSG_MAP(CLeftPane)
ON_MESSAGE(WM_ADMIN_EXPANDALL, OnExpandAll) ON_MESSAGE(WM_ADMIN_COLLAPSEALL, OnCollapseAll) ON_MESSAGE(WM_ADMIN_COLLAPSETOSERVERS, OnCollapseToServers) ON_MESSAGE(WM_ADMIN_COLLAPSETODOMAINS, OnCollapseToDomains) 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_ADD_WINSTATION, OnAdminAddWinStation) ON_MESSAGE(WM_ADMIN_UPDATE_WINSTATION, OnAdminUpdateWinStation) ON_MESSAGE(WM_ADMIN_REMOVE_WINSTATION, OnAdminRemoveWinStation) ON_MESSAGE(WM_ADMIN_UPDATE_DOMAIN, OnAdminUpdateDomain) ON_MESSAGE(WM_ADMIN_ADD_DOMAIN, OnAdminAddDomain) ON_MESSAGE(WM_EXT_ADD_APPLICATION, OnExtAddApplication) ON_MESSAGE(WM_EXT_ADD_APP_SERVER, OnExtAddAppServer) ON_MESSAGE(WM_EXT_REMOVE_APP_SERVER, OnExtRemoveAppServer) ON_MESSAGE(WM_ADMIN_VIEWS_READY, OnAdminViewsReady) ON_NOTIFY(TCN_SELCHANGE, IDC_TREE_TABS, OnTabSelChange) ON_WM_SIZE() //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////
// F'N: CLeftPane cto
//
// - the view pointers are initially set to NULL
//
CLeftPane::CLeftPane() { m_pTabs = NULL; m_pTabFont = NULL;
m_pServerTreeView = NULL; m_pAppTreeView = NULL;
m_CurrTreeViewType = TREEVIEW_SERVERS; m_CurrTreeView = (CView*)m_pServerTreeView; } // end CLeftPane ctor
////////////////////////////
// CLeftPane::OnDraw
//
void CLeftPane::OnDraw(CDC* pDC) {
} // end CLeftPane::OnDraw
/////////////////////////
// CLeftPane dtor
//
CLeftPane::~CLeftPane() { if(m_pTabs) delete m_pTabs; if(m_pTabFont) delete m_pTabFont;
} // end CLeftPane dtor
#ifdef _DEBUG
/////////////////////////////////
// CLeftPane::AssertValid
//
void CLeftPane::AssertValid() const { CView::AssertValid();
} // end CLeftPane::AssertValid
//////////////////////////
// CLeftPane::Dump
//
void CLeftPane::Dump(CDumpContext& dc) const { CView::Dump(dc);
} // end CLeftPane::Dump
#endif //_DEBUG
/////////////////////////////////////
// CLeftPane::OnInitialUpdate
//
// - each of the tree view objects is created
// - the CTreeView object is initially the 'active' view in the left pane
//
void CLeftPane::OnInitialUpdate() { CView::OnInitialUpdate(); CFrameWnd* pMainWnd = (CFrameWnd*)AfxGetMainWnd(); CWinAdminDoc* pDoc = (CWinAdminDoc*)pMainWnd->GetActiveDocument();
// create the Tabs
m_pTabs = new CTreeTabCtrl; if(!m_pTabs) return; m_pTabs->Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | TCS_BOTTOM | TCS_FORCEICONLEFT |TCS_FOCUSNEVER, CRect(0,0,0,0), this, IDC_TREE_TABS);
m_pTabFont = new CFont; if(m_pTabFont) { m_pTabFont->CreateStockObject(DEFAULT_GUI_FONT); m_pTabs->SetFont(m_pTabFont, TRUE); }
BuildImageList();
TCHAR szTemp[40]; CString tabString;
tabString.LoadString(IDS_TAB_SERVERS); wcscpy(szTemp,tabString);
TC_ITEM tc; tc.mask = TCIF_TEXT | TCIF_IMAGE; tc.pszText = szTemp; tc.iImage = m_idxServer; m_pTabs->InsertItem(0, &tc);
tabString.LoadString(IDS_PUBLISHED_APPS); // should create a string for this tab (with spaces_
wcscpy(szTemp,tabString); tc.pszText = szTemp; tc.iImage = m_idxApps; m_pTabs->InsertItem(1, &tc);
m_pTabs->SetCurSel(0); // set the 'Servers' tab as the current one
m_pServerTreeView = new CAdminTreeView(); if(m_pServerTreeView) m_pServerTreeView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(0, 0, 0, 0), m_pTabs, 0);
m_pAppTreeView = new CAppTreeView(); if(m_pAppTreeView) m_pAppTreeView->Create(NULL, NULL, WS_CHILD | WS_BORDER, CRect(0, 0, 0, 0), m_pTabs, 1);
m_CurrTreeViewType = TREEVIEW_SERVERS; m_CurrTreeView = m_pServerTreeView;
pDoc->AddView(m_pServerTreeView); pDoc->AddView(m_pAppTreeView); pDoc->UpdateAllViews(NULL);
} // end CLeftPane::OnInitialUpdate
/////////////////////////////////////
// CLeftPane::BuildImageList
//
// - calls m_imageList.Create(..) to create the image list
// - calls AddIconToImageList(..) to add the icons themselves and save
// off their indices
// - attaches the image list to the CTabCtrl
//
void CLeftPane::BuildImageList() { m_ImageList.Create(16, 16, TRUE, 2, 0);
m_idxServer = AddIconToImageList(IDI_SERVER); m_idxApps = AddIconToImageList(IDI_APPS);
m_pTabs->SetImageList(&m_ImageList);
} // end CLeftPane::BuildImageList
/////////////////////////////////////////
// CLeftPane::AddIconToImageList
//
// - loads the appropriate icon, adds it to m_ImageList, and returns
// the newly-added icon's index in the image list
//
int CLeftPane::AddIconToImageList(int iconID) { HICON hIcon = ::LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(iconID)); return m_ImageList.Add(hIcon);
} // end CLeftPane::AddIconToImageList
/////////////////////////////////////////
// CLeftPane::OnTabSelChange
//
void CLeftPane::OnTabSelChange(NMHDR* pNMHDR, LRESULT* pResult) { // find out which tab is now selected
int index = m_pTabs->GetCurSel(); DWORD_PTR node; // switch to the appropriate tree
switch(index) { case 0: // bring 'Servers' to the top
m_pServerTreeView->ModifyStyle(WS_DISABLED, WS_VISIBLE);
// hide the others
m_pAppTreeView->ModifyStyle(WS_VISIBLE, WS_DISABLED);
m_CurrTreeViewType = TREEVIEW_SERVERS; m_CurrTreeView = m_pServerTreeView;
m_pServerTreeView->Invalidate(); m_pServerTreeView->SetFocus(); node = m_pServerTreeView->GetCurrentNode();
break;
case 1: // bring 'Published Applications' to the top
m_pAppTreeView->ModifyStyle(WS_DISABLED, WS_VISIBLE);
// hide the others
m_pServerTreeView->ModifyStyle(WS_VISIBLE, WS_DISABLED);
m_CurrTreeViewType = TREEVIEW_APPS; m_CurrTreeView = m_pAppTreeView; m_pAppTreeView->Invalidate(); m_pAppTreeView->SetFocus(); node = m_pAppTreeView->GetCurrentNode();
break; }
// Tell the document that the current item in the tree has changed
((CWinAdminDoc*)GetDocument())->SetCurrentView(VIEW_CHANGING); ((CWinAdminDoc*)GetDocument())->SetTreeCurrent(((CTreeNode*)node)->GetTreeObject(), ((CTreeNode*)node)->GetNodeType());
CFrameWnd* pMainWnd = (CFrameWnd*)AfxGetMainWnd(); // FALSE signifies that this was not caused by a mouse click on a tree item
pMainWnd->PostMessage(WM_ADMIN_CHANGEVIEW, FALSE, node); *pResult = 0;
} // end CLeftPane::OnTabSelChange
////////////////////////////
// CLeftPane::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 CLeftPane::OnSize(UINT nType, int cx, int cy) { RECT rect; GetClientRect(&rect); if(m_pTabs) if(m_pTabs->GetSafeHwnd()) m_pTabs->MoveWindow(&rect, TRUE);
CView::OnSize(nType, cx, cy);
} // end CLeftPane::OnSize
LRESULT CLeftPane::OnExpandAll(WPARAM wParam, LPARAM lParam) { // Send to the currently visible tree
m_CurrTreeView->SendMessage(WM_ADMIN_EXPANDALL, wParam, lParam); return 0; } } // end CLeftPane::OnExpandAll
////////////////////////////
// CLeftPane::OnCollapseAll
//
LRESULT CLeftPane::OnCollapseAll(WPARAM wParam, LPARAM lParam) { // Send to the currently visible tree
m_CurrTreeView->SendMessage(WM_ADMIN_COLLAPSEALL, wParam, lParam); return 0;
} // end CLeftPane::OnCollapseAll
////////////////////////////
// CLeftPane::OnCollapseToServers
//
LRESULT CLeftPane::OnCollapseToServers(WPARAM wParam, LPARAM lParam) { // Send to the currently visible tree
m_CurrTreeView->SendMessage(WM_ADMIN_COLLAPSETOSERVERS, wParam, lParam); return 0;
} // end CLeftPane::OnCollapseToServers
////////////////////////////
// CLeftPane::OnCollapseToDomains
//
LRESULT CLeftPane::OnCollapseToDomains(WPARAM wParam, LPARAM lParam) { m_pServerTreeView->SendMessage(WM_ADMIN_COLLAPSETODOMAINS, wParam, lParam); return 0;
} // end CLeftPane::OnCollapseToDomains
////////////////////////////
// CLeftPane::OnCollapseToApplications
//
LRESULT CLeftPane::OnCollapseToApplications(WPARAM wParam, LPARAM lParam) { if(m_pAppTreeView) m_pAppTreeView->SendMessage(WM_ADMIN_COLLAPSETODOMAINS, wParam, lParam);
return 0;
} // end CLeftPane::OnCollapseToApplications
LRESULT CLeftPane::OnAdminAddServer(WPARAM wParam, LPARAM lParam) { m_pServerTreeView->SendMessage(WM_ADMIN_ADD_SERVER, wParam, lParam); return 0; }
LRESULT CLeftPane::OnAdminRemoveServer(WPARAM wParam, LPARAM lParam) { m_pServerTreeView->SendMessage(WM_ADMIN_REMOVE_SERVER, wParam, lParam); return 0; }
LRESULT CLeftPane::OnAdminUpdateServer(WPARAM wParam, LPARAM lParam) { m_pServerTreeView->SendMessage(WM_ADMIN_UPDATE_SERVER, wParam, lParam); return 0; }
////////////////////////////
// CLeftPane::OnAdminAddWinStation
//
LRESULT CLeftPane::OnAdminAddWinStation(WPARAM wParam, LPARAM lParam) { m_pServerTreeView->SendMessage(WM_ADMIN_ADD_WINSTATION, wParam, lParam); return 0;
} // end CLeftPane::OnAdminAddWinStation
////////////////////////////
// CLeftPane::OnAdminUpdateWinStation
//
LRESULT CLeftPane::OnAdminUpdateWinStation(WPARAM wParam, LPARAM lParam) { m_pServerTreeView->SendMessage(WM_ADMIN_UPDATE_WINSTATION, wParam, lParam); return 0;
} // end CLeftPane::OnAdminUpdateWinStation
////////////////////////////
// CLeftPane::OnAdminRemoveWinStation
//
LRESULT CLeftPane::OnAdminRemoveWinStation(WPARAM wParam, LPARAM lParam) { m_pServerTreeView->SendMessage(WM_ADMIN_REMOVE_WINSTATION, wParam, lParam); return 0;
} // end CLeftPane::OnAdminRemoveWinStation
////////////////////////////
// CLeftPane::OnAdminUpdateDomain
//
LRESULT CLeftPane::OnAdminUpdateDomain(WPARAM wParam, LPARAM lParam) { m_pServerTreeView->SendMessage(WM_ADMIN_UPDATE_DOMAIN, wParam, lParam);
return 0;
} // end CLeftPane::OnAdminUpdateDomain
////////////////////////////
// CLeftPane::OnAdminAddDomain
//
LRESULT CLeftPane::OnAdminAddDomain(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
return m_pServerTreeView->SendMessage(WM_ADMIN_ADD_DOMAIN, wParam, lParam);
} // end CLeftPane::OnAdminAddDomain
LRESULT CLeftPane::OnExtAddApplication(WPARAM wParam, LPARAM lParam) { m_pAppTreeView->SendMessage(WM_EXT_ADD_APPLICATION, wParam, lParam); return 0; }
LRESULT CLeftPane::OnExtAddAppServer(WPARAM wParam, LPARAM lParam) { m_pAppTreeView->SendMessage(WM_EXT_ADD_APP_SERVER, wParam, lParam); return 0; }
CTreeTabCtrl::CTreeTabCtrl() {
}
CTreeTabCtrl::~CTreeTabCtrl() {
}
BEGIN_MESSAGE_MAP(CTreeTabCtrl, CTabCtrl) //{{AFX_MSG_MAP(CTreeTabCtrl)
ON_WM_SIZE() // ON_NOTIFY_REFLECT(TCN_SELCHANGE, OnSelchange)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CTreeTabCtrl::Initialize() {
}
void CTreeTabCtrl::OnSize(UINT nType, int cx, int cy) { CTabCtrl::OnSize(nType, cx, cy); CRect rcTabCtrl(0,0,cx,cy);
AdjustRect(FALSE,&rcTabCtrl);
CWnd* pWnd = GetDlgItem(0); if(pWnd) { pWnd->MoveWindow(&rcTabCtrl); }
pWnd = GetDlgItem(1); if(pWnd) { pWnd->MoveWindow(&rcTabCtrl); } }
#ifdef _DEBUG
void CTreeTabCtrl::AssertValid() const {
}
void CTreeTabCtrl::Dump(CDumpContext& dc) const {
}
#endif
void CTreeTabCtrl::OnDraw(CDC* pDC) {
}
|