|
|
//Copyright (c) 1998 - 1999 Microsoft Corporation
/*++
Module Name:
LtView.cpp
Abstract: This Module contains the implementation of CLicMgrLeftView class (The View class used for the Left pane of the splitter)
Author:
Arathi Kundapur (v-akunda) 11-Feb-1998
Revision History:
--*/ #include "stdafx.h"
#include "LicMgr.h"
#include "defines.h"
#include "LSMgrDoc.h"
#include "LtView.h"
#include "TreeNode.h"
#include "LSServer.h"
#include "mainfrm.h"
#include "addkp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CLicMgrLeftView
IMPLEMENT_DYNCREATE(CLicMgrLeftView, CTreeView)
BEGIN_MESSAGE_MAP(CLicMgrLeftView, CTreeView) //{{AFX_MSG_MAP(CLicMgrLeftView)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged) ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemexpanding) ON_NOTIFY_REFLECT(TVN_KEYDOWN, OnKeydown) ON_NOTIFY_REFLECT(NM_RCLICK , OnRightClick ) ON_NOTIFY_REFLECT(NM_CLICK , OnLeftClick ) ON_COMMAND(ID_ADD_LICENSES, OnAddNewKeyPack) ON_WM_DESTROY() //}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview) ON_MESSAGE(WM_ADD_SERVER, OnAddServer) ON_MESSAGE(WM_DELETE_SERVER, OnDeleteServer) ON_MESSAGE(WM_UPDATE_SERVER, OnUpdateServer) ON_MESSAGE(WM_ADD_ALL_SERVERS, OnAddAllServers) ON_MESSAGE(WM_ADD_KEYPACK, OnAddKeyPack)
// all server menus
ON_WM_CONTEXTMENU( )
ON_COMMAND( ID_ALLSVR_CONNECT , OnServerConnect ) ON_COMMAND( ID_ALLSVR_REFRESHALL , OnRefreshAllServers ) ON_COMMAND( ID_ALLSVR_HELP , OnGeneralHelp ) // server menuitems
// ON_COMMAND( ID_LPK_CONNECT , OnServerConnect )
ON_COMMAND( ID_LPK_REFRESH , OnRefreshServer ) ON_COMMAND( ID_LPK_REFRESHALL , OnRefreshAllServers ) ON_COMMAND( ID_LPK_DOWNLOADLICENSES , OnDownloadKeepPack )
ON_COMMAND( ID_SVR_ACTIVATESERVER , OnRegisterServer ) ON_COMMAND( ID_LPK_ADVANCED_REPEATLASTDOWNLOAD , OnRepeatLastDownload ) ON_COMMAND( ID_LPK_ADVANCED_REACTIVATESERVER , OnReactivateServer ) ON_COMMAND( ID_LPK_ADVANCED_DEACTIVATESERVER , OnDeactivateServer ) ON_COMMAND( ID_LPK_PROPERTIES , OnServerProperties ) ON_COMMAND( ID_LPK_HELP , OnGeneralHelp )
// license pak items
// ON_COMMAND( ID_LICPAK_CONNECT , OnServerConnect )
ON_COMMAND( ID_LICPAK_REFRESH , OnRefreshServer ) // ON_COMMAND( ID_LICPAK_REFRESHALL , OnRefreshAllServers )
ON_COMMAND( ID_LICPAK_DOWNLOADLICENSES , OnDownloadKeepPack ) ON_COMMAND( ID_LICPAK_REPEATDOWNLOAD , OnRepeatLastDownload ) ON_COMMAND( ID_LICPAK_HELP , OnGeneralHelp )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLicMgrLeftView construction/destruction
CLicMgrLeftView::CLicMgrLeftView() { // TODO: add construction code here
m_ht = ( HTREEITEM )NULL; }
CLicMgrLeftView::~CLicMgrLeftView() { }
BOOL CLicMgrLeftView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CTreeView::PreCreateWindow(cs); }
/////////////////////////////////////////////////////////////////////////////
// CLicMgrLeftView drawing
void CLicMgrLeftView::OnDraw(CDC* pDC) { CLicMgrDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CLicMgrLeftView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); GetTreeCtrl().ModifyStyle(0,TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS); BuildImageList(); // TODO: You may populate your TreeView with items by directly accessing
// its tree control through a call to GetTreeCtrl().
}
/////////////////////////////////////////////////////////////////////////////
// CLicMgrLeftView printing
BOOL CLicMgrLeftView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation
return DoPreparePrinting(pInfo); }
void CLicMgrLeftView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing
}
void CLicMgrLeftView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CLicMgrLeftView diagnostics
#ifdef _DEBUG
void CLicMgrLeftView::AssertValid() const { CTreeView::AssertValid(); }
void CLicMgrLeftView::Dump(CDumpContext& dc) const { CTreeView::Dump(dc); }
CLicMgrDoc* CLicMgrLeftView::GetDocument() // non-debug version is inline
{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLicMgrDoc))); return (CLicMgrDoc*)m_pDocument; } #endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLicMgrLeftView message handlers
HTREEITEM CLicMgrLeftView::AddItemToTree(HTREEITEM hParent, CString Text, HTREEITEM hInsAfter, int iImage, LPARAM lParam) { HTREEITEM hItem = NULL; TV_ITEM tvItem = {0}; TV_INSERTSTRUCT tvInsert;
ASSERT(lParam); if(NULL == lParam) return hItem;
tvItem.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvItem.pszText = Text.GetBuffer(Text.GetLength()); tvItem.cchTextMax = Text.GetLength(); tvItem.iImage = iImage; tvItem.iSelectedImage = iImage; tvItem.lParam = lParam;
tvInsert.item = tvItem; tvInsert.hInsertAfter = hInsAfter; tvInsert.hParent = hParent;
hItem = GetTreeCtrl().InsertItem(&tvInsert);
// GetTreeCtrl().Expand(GetTreeCtrl().GetRootItem(), TVE_EXPAND);
return hItem;
}
LRESULT CLicMgrLeftView::OnAddServer(WPARAM wParam, LPARAM lParam) { LRESULT lResult = 0; CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument(); ASSERT(pDoc); if(NULL == pDoc) return lResult; CLicServer *pServer = (CLicServer*)lParam; ASSERT(pServer); if(NULL == pServer) return lResult;
HTREEITEM hServer = NULL; HTREEITEM hItem = NULL; CTreeNode* pNode = NULL;
HTREEITEM hRoot = GetTreeCtrl().GetRootItem(); if(!hRoot) goto cleanup;
// First make sure the server isn't already in the tree
// Get the first server under the domain
hItem = GetTreeCtrl().GetNextItem(hRoot, TVGN_CHILD); while(hItem) { // Get the data attached to the tree item
CTreeNode *node = (CTreeNode*)GetTreeCtrl().GetItemData(hItem); if(node) { // Is this the server we want to add
CLicServer *pServer = (CLicServer*)node->GetTreeObject(); if(pServer == (CLicServer*)lParam) return 0; } hItem = GetTreeCtrl().GetNextItem(hItem, TVGN_NEXT); }
// Add the server to the tree
// Create a CTreeNode object with info about this tree node
pNode = new CTreeNode(NODE_SERVER, pServer); if(pNode) { int iImage = 0;
if( pServer->GetServerType() == SERVER_TS5_ENFORCED ) { DWORD dwStatus = pServer->GetServerRegistrationStatus(); if( dwStatus == LSERVERSTATUS_REGISTER_INTERNET || dwStatus == LSERVERSTATUS_REGISTER_OTHER ) { iImage = 3; } else if( dwStatus == LSERVERSTATUS_WAITFORPIN ) { iImage = 4; } else if( dwStatus == LSERVERSTATUS_UNREGISTER ) { iImage = 5; } else { iImage = 6; } } hServer = AddItemToTree(hRoot, pServer->GetDisplayName(), TVI_SORT, iImage , (LPARAM)pNode); if(!hServer) delete pNode; // The server wants to know his tree item handle
pServer->SetTreeItem(hServer); }
cleanup: return lResult; } // OnAddServer
LRESULT CLicMgrLeftView::OnAddKeyPack(WPARAM wParam, LPARAM lParam) { LRESULT lResult = 0; CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument(); ASSERT(pDoc); if(NULL == pDoc) return lResult;
CLicServer *pServer = (CLicServer*)wParam; ASSERT(pServer); if(NULL == pServer) return lResult;
CKeyPack *pKeyPack = (CKeyPack*)lParam; ASSERT(pKeyPack); if(NULL == pKeyPack) return lResult;
HTREEITEM hKeyPackItem = NULL; TV_ITEM Item; memset((void *)&Item,0,sizeof(Item));
Item.mask = TVIF_HANDLE; HTREEITEM hServer = pServer->GetTreeItem(); if(NULL == hServer) return lResult; Item.hItem = hServer;
if(FALSE == GetTreeCtrl().GetItem(&Item)) return lResult;
if(Item.state & TVIS_EXPANDED) { CTreeNode *pNode = new CTreeNode(NODE_KEYPACK, pKeyPack); if(pNode) { hKeyPackItem = AddItemToTree(hServer, (LPCTSTR)pKeyPack->GetDisplayName(), hServer, 2, (LPARAM)pNode); if(!hKeyPackItem) delete pNode; } pKeyPack->SetTreeItem(hKeyPackItem); } return lResult; } // OnAddKeyPack
LRESULT CLicMgrLeftView::OnAddAllServers(WPARAM wParam, LPARAM lParam) { LRESULT lResult = 0; HTREEITEM hItem = NULL; CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument(); ASSERT(pDoc); if(NULL == pDoc) return lResult; CTreeNode* pNode = NULL; CAllServers *pAllServer = (CAllServers*)lParam; if(!pAllServer) goto cleanup ; hItem = pAllServer->GetTreeItem(); if(NULL != hItem) goto cleanup;
// Create a CTreeNode object with info about this tree node
pNode = new CTreeNode(NODE_ALL_SERVERS, pAllServer); if(pNode) { HTREEITEM hAllServers = AddItemToTree(NULL, pAllServer->GetName(), TVI_SORT,0 , (LPARAM)pNode); if(!hAllServers) delete pNode; // The server wants to know his tree item handle
pAllServer->SetTreeItem(hAllServers); //Set the Selection to this item
GetTreeCtrl().SelectItem(hAllServers); }
GetTreeCtrl().Expand(GetTreeCtrl().GetRootItem(), TVE_EXPAND); cleanup: return lResult ; } // OnAddAllServers
void CLicMgrLeftView::AddServerKeyPacks(CLicServer *pServer) { CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument(); ASSERT(pDoc); if(NULL == pDoc) return; POSITION pos; KeyPackList *pKeyPackList = NULL; HTREEITEM hLastNode = NULL;
ASSERT(pServer); if(NULL == pServer) return; HTREEITEM hServer = pServer->GetTreeItem(); if(NULL == hServer) goto cleanup; //Server Not in the Tree.
hLastNode= hServer;
// Get a pointer to the server's list of installed KeyPacks
pKeyPackList = pServer->GetKeyPackList(); // Iterate through the KeyPack list
pos = pKeyPackList->GetHeadPosition(); while(pos) { CKeyPack *pKeyPack = (CKeyPack *)pKeyPackList->GetNext(pos); CTreeNode *pNode = new CTreeNode(NODE_KEYPACK, pKeyPack); if(pNode) { hLastNode = AddItemToTree(hServer, (LPCTSTR)pKeyPack->GetDisplayName(), hLastNode, 2, (LPARAM)pNode); if(!hLastNode) delete pNode; } pKeyPack->SetTreeItem(hLastNode); } cleanup: return;
} // end AddKeyPacks
void CLicMgrLeftView::BuildImageList() { m_ImageList.Create(16, 16, TRUE, 18, 0); AddIconToImageList(IDI_ALL_SERVERS); AddIconToImageList(IDI_SERVER); AddIconToImageList(IDI_KEYPACK); AddIconToImageList(IDI_SERVERREG ); AddIconToImageList(IDI_SERVERM ); AddIconToImageList(IDI_SERVERX ); AddIconToImageList(IDI_SERVERQ );
GetTreeCtrl().SetImageList(&m_ImageList, TVSIL_NORMAL);
} // end BuildImageList
int CLicMgrLeftView::AddIconToImageList(int iconID) { HICON hIcon = ::LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(iconID)); return m_ImageList.Add(hIcon);
}
void CLicMgrLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here
//Check if the node selected is All-Servers,Server or the KeyPack.
//Accordingly change the right pane view.
CTreeCtrl& TreeCtrl = GetTreeCtrl(); HTREEITEM hCurr = TreeCtrl.GetSelectedItem(); if(NULL == hCurr) { return; } CTreeNode *pNode = (CTreeNode *)GetTreeCtrl().GetItemData(hCurr); if(NULL == pNode) { return; } CLicServer *pLicServer = NULL; CKeyPack * pKeyPack = NULL;
CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument(); ASSERT(pDoc); if(NULL == pDoc) return;
switch(pNode->GetNodeType()) { case NODE_ALL_SERVERS: AfxGetMainWnd()->SendMessage(WM_SEL_CHANGE,NODE_ALL_SERVERS,NULL); break; case NODE_SERVER: pLicServer = (CLicServer *)pNode->GetTreeObject(); if(NULL == pLicServer) break; if(FALSE == pLicServer->IsExpanded()) { SetCursor(LoadCursor(NULL,IDC_WAIT)); HRESULT hResult = pDoc->EnumerateKeyPacks(pLicServer,LSKEYPACK_SEARCH_LANGID, TRUE); if(hResult != S_OK) { ((CMainFrame *)AfxGetMainWnd())->EnumFailed(hResult,pLicServer); if(pLicServer && pLicServer->GetTreeItem()) { TreeCtrl.SelectItem(TreeCtrl.GetParentItem(pLicServer->GetTreeItem())); } break; } AddServerKeyPacks(pLicServer); } else { if(!pLicServer->GetKeyPackList()->IsEmpty()) { if(!TreeCtrl.ItemHasChildren(hCurr)) AddServerKeyPacks(pLicServer); }
} AfxGetMainWnd()->SendMessage(WM_SEL_CHANGE,NODE_SERVER,(LPARAM)pLicServer); break; case NODE_KEYPACK: pKeyPack = (CKeyPack *)pNode->GetTreeObject(); ASSERT(pKeyPack); if(NULL == pKeyPack) break; if(FALSE == pKeyPack->IsExpanded()) { SetCursor(LoadCursor(NULL,IDC_WAIT)); HRESULT hResult = pDoc->EnumerateLicenses(pKeyPack,LSLICENSE_SEARCH_KEYPACKID, TRUE); if(hResult != S_OK) { ((CMainFrame *)AfxGetMainWnd())->EnumFailed(hResult,pKeyPack->GetServer()); if(pKeyPack && pKeyPack->GetTreeItem()) { TreeCtrl.SelectItem(TreeCtrl.GetParentItem(pKeyPack->GetTreeItem())); } break; } } AfxGetMainWnd()->SendMessage(WM_SEL_CHANGE,NODE_KEYPACK,(LPARAM)pNode->GetTreeObject()); break; } *pResult = 0; }
void CLicMgrLeftView::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here
*pResult = 0; }
void CLicMgrLeftView::OnAddNewKeyPack() { // TODO: Add your command handler code here
HTREEITEM hTreeItem = GetTreeCtrl().GetSelectedItem(); // CAddKeyPack KeyPack;
if(NULL == hTreeItem) return; CTreeNode *pNode = (CTreeNode *)GetTreeCtrl().GetItemData(hTreeItem); if(NULL == pNode) return; if(NODE_SERVER == pNode->GetNodeType()) ((CMainFrame *)AfxGetMainWnd())->AddKeyPackDialog((PLICSERVER)pNode->GetTreeObject()); else { if(NODE_KEYPACK == pNode->GetNodeType()) { CKeyPack * pKeyPack = (CKeyPack *)pNode->GetTreeObject(); if(NULL == pKeyPack) return; ((CMainFrame *)AfxGetMainWnd())->AddKeyPackDialog(pKeyPack->GetServer()); } } return; }
void CLicMgrLeftView::OnDestroy() { //Get the Root Item
HTREEITEM hRoot = GetTreeCtrl().GetRootItem(); if(!hRoot) return; HTREEITEM hServerItem = GetTreeCtrl().GetNextItem(hRoot,TVGN_CHILD); while(hServerItem) { // Get the data attached to the tree item
CTreeNode *pServerNode = (CTreeNode*)GetTreeCtrl().GetItemData(hServerItem); if(pServerNode) { // Is this the server we want to add
HTREEITEM hKeyPackItem = GetTreeCtrl().GetNextItem(hServerItem,TVGN_CHILD); while(hKeyPackItem) { CTreeNode *pKeyPackNode = (CTreeNode*)GetTreeCtrl().GetItemData(hKeyPackItem); if(pKeyPackNode) delete pKeyPackNode; hKeyPackItem = GetTreeCtrl().GetNextItem(hKeyPackItem,TVGN_NEXT); } delete pServerNode; } hServerItem = GetTreeCtrl().GetNextItem(hServerItem, TVGN_NEXT); } CTreeNode * pRootNode = (CTreeNode*)GetTreeCtrl().GetItemData(hRoot); if(pRootNode) delete pRootNode;
return; }
LRESULT CLicMgrLeftView::OnDeleteServer(WPARAM wParam, LPARAM lParam) { LRESULT lResult = 0; CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument(); ASSERT(pDoc); if(NULL == pDoc) return lResult; CLicServer *pServer = (CLicServer*)lParam; ASSERT(pServer); if(NULL == pServer) return lResult;
HTREEITEM hServer = pServer->GetTreeItem();
DBGMSG( L"CLicMgrLeftView_OnDeleteServer GetTreeItem ret 0x%x\n" , hServer );
if(hServer == NULL) return lResult;
CTreeNode *pNode = (CTreeNode*)GetTreeCtrl().GetItemData(hServer);
DBGMSG( L"CLicMgrLeftView_OnDeleteServer GetItemData ret 0x%x\n" , pNode ); if(pNode) delete pNode;
GetTreeCtrl().DeleteItem(hServer);
return lResult; } // OnDeleteServer
LRESULT CLicMgrLeftView::OnUpdateServer(WPARAM wParam, LPARAM lParam) { LRESULT lResult = 0; CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument(); ASSERT(pDoc); if(NULL == pDoc) return lResult;
BOOL bIsExpanded = FALSE; BOOL bIsSelected = FALSE; BOOL bIsChild = FALSE; HTREEITEM hSelectedItem = NULL; CKeyPack * pSelectedPack = NULL;
CLicServer *pServer = (CLicServer*)lParam; ASSERT(pServer); if(NULL == pServer) return lResult;
HTREEITEM hServer = pServer->GetTreeItem(); if(hServer == NULL) return lResult;
// check to see if we need to remove any keypacks
// Get a pointer to the server's list of installed KeyPacks
// Get the data attached to the tree item
CTreeNode *pServerNode = (CTreeNode*)GetTreeCtrl().GetItemData(hServer);
if( pServerNode != NULL ) { HTREEITEM hKeyPackItem = GetTreeCtrl().GetNextItem(hServer,TVGN_CHILD); while( hKeyPackItem != NULL ) { CTreeNode *pKeyPackNode = (CTreeNode*)GetTreeCtrl().GetItemData(hKeyPackItem);
if( pKeyPackNode != NULL ) { DBGMSG( L"CLicMgrLeftView!OnUpdateServer removing a licpak\n" , 0 ); delete pKeyPackNode; }
hKeyPackItem = GetTreeCtrl().GetNextItem(hKeyPackItem,TVGN_NEXT); }
delete pServerNode; }
TV_ITEM Item; memset((void *)&Item,0,sizeof(Item));
Item.mask = TVIF_HANDLE | TVIF_STATE; Item.hItem = hServer;
if(FALSE == GetTreeCtrl().GetItem(&Item)) return lResult;
if(Item.state & TVIS_EXPANDED) bIsExpanded = TRUE;
if(Item.state & TVIS_SELECTED) bIsSelected = TRUE; else hSelectedItem = GetTreeCtrl().GetSelectedItem(); if(hSelectedItem) { if(hServer == GetTreeCtrl().GetParentItem(hSelectedItem)) { CString ProdDesc = GetTreeCtrl().GetItemText(hSelectedItem); KeyPackList * pkeyPackList = pServer->GetKeyPackList(); POSITION pos = pkeyPackList->GetHeadPosition(); while(pos) { CKeyPack * pKeyPack = (CKeyPack *)pkeyPackList->GetNext(pos); if(NULL == pKeyPack) { continue; } LSKeyPack sKeyPack = pKeyPack->GetKeyPackStruct(); if(0 == ProdDesc.CompareNoCase(sKeyPack.szProductDesc)) { pSelectedPack = pKeyPack; break; } } bIsChild = TRUE; } }
GetTreeCtrl().DeleteItem(hServer); SendMessage(WM_ADD_SERVER,0,(LPARAM)pServer); AddServerKeyPacks(pServer);
hServer = pServer->GetTreeItem();
if(bIsExpanded) GetTreeCtrl().Expand(hServer, TVE_EXPAND); if(bIsSelected) GetTreeCtrl().SelectItem(hServer); else { //Not good, find an alternative for this....
if(bIsChild) { if(pSelectedPack) GetTreeCtrl().SelectItem(pSelectedPack->GetTreeItem()); else { hSelectedItem = GetTreeCtrl().GetChildItem(hServer); if(hSelectedItem) GetTreeCtrl().SelectItem(hSelectedItem); } } }
return lResult; } // OnUpdateServer
void CLicMgrLeftView::SetSelection(LPARAM lParam,NODETYPE NodeType) { if(NULL == lParam) return; HTREEITEM hItem = NULL;
if(NODE_ALL_SERVERS == NodeType) hItem = ((CAllServers *)lParam)->GetTreeItem(); else if(NODE_SERVER == NodeType) hItem = ((CLicServer *)lParam)->GetTreeItem(); else if(NODE_KEYPACK == NodeType) hItem = ((CKeyPack *)lParam)->GetTreeItem();
if(hItem) GetTreeCtrl().SelectItem(hItem);
return;
}
void CLicMgrLeftView::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult) { LV_KEYDOWN* pLVKeyDown = (LV_KEYDOWN*)pNMHDR; // TODO: Add your control notification handler code here
if(pLVKeyDown->wVKey == VK_TAB) { CMainFrame * pMainFrame = ((CMainFrame *)AfxGetMainWnd()); pMainFrame->SelectView(LISTVIEW); }
*pResult = 0; }
//-----------------------------------------------------------------------------------------
afx_msg void CLicMgrLeftView::OnLeftClick(NMHDR* pNMHDR, LRESULT* pResult) { CPoint pt; GetCursorPos( &pt );
ScreenToClient( &pt );
DBGMSG( L"LICMGR@CLicMgrLeftView::OnLeftClick\n" , 0 );
HTREEITEM hTreeItem = GetTreeCtrl( ).GetSelectedItem( ); //GetTreeCtrl().HitTest( pt , &flag );
if( hTreeItem != NULL ) { CTreeNode *pNode = (CTreeNode *)GetTreeCtrl().GetItemData(hTreeItem); if(NULL == pNode) { return; }
ClientToScreen( &pt );
NODETYPE nt = pNode->GetNodeType();
if(NODE_SERVER == nt ) { DBGMSG( L"\tServer Node selected\n", 0 );
SetActiveServer( static_cast< CLicServer * >( pNode->GetTreeObject() ) );
} else if( nt == NODE_KEYPACK ) { CKeyPack *pKeyPack = static_cast< CKeyPack *>( pNode->GetTreeObject() );
if( pKeyPack != NULL ) { SetActiveServer( pKeyPack->GetServer( ) ); } } else { #ifdef DBG
if( NODE_ALL_SERVERS == nt ) { DBGMSG( L"\tAll servers selected\n" , 0 ); } #endif
SetActiveServer( NULL ); } } else { DBGMSG( L"\tTreeview item returned NULL\n" , 0 );
SetActiveServer( NULL ); }
}
//-----------------------------------------------------------------------------------------
afx_msg void CLicMgrLeftView::OnContextMenu( CWnd* pWnd, CPoint pt ) { CMenu menu;
CMenu *pContextmenu = NULL; DBGMSG( L"LICMGR@CLicMgrLeftView::OnContextMenu\n" , 0 ); DBGMSG( L"\tpoint x = %d " , pt.x ); DBGMSG( L"y = %d\n" , pt.y );
UINT flag;
HTREEITEM hTreeItem; CTreeCtrl& treectrl = GetTreeCtrl();
// maybe keyboard selected this item
if(pt.x == -1 && pt.y == -1) { hTreeItem = treectrl.GetSelectedItem( );
if( hTreeItem != NULL ) { RECT rect;
treectrl.GetItemRect( hTreeItem , &rect , FALSE );
pt.x = rect.left + (rect.right - rect.left)/2; pt.y = rect.top + (rect.bottom - rect.top)/2; } } else { // otherwise we're invoked by the mouse
ScreenToClient( &pt );
hTreeItem = treectrl.HitTest( pt , &flag ); }
if( hTreeItem != NULL ) { CTreeNode *pNode = (CTreeNode *)GetTreeCtrl().GetItemData(hTreeItem); if(NULL == pNode) { return; }
SetRightClickedItem( hTreeItem );
ClientToScreen( &pt );
// GetTreeCtrl().SelectItem( hTreeItem );
NODETYPE nt = pNode->GetNodeType();
if(NODE_SERVER == nt ) { DBGMSG( L"\tServer Node selected\n", 0 ); menu.LoadMenu( IDR_MENU_LPK );
pContextmenu = menu.GetSubMenu( 0 ); } else if( NODE_KEYPACK == nt ) { DBGMSG( L"\tLicense pack selected\n" , 0 );
menu.LoadMenu( IDR_MENU_LPK );
pContextmenu = menu.GetSubMenu( 1 ); } else if( NODE_ALL_SERVERS == nt ) { DBGMSG( L"\tAll servers selected\n" , 0 ); menu.LoadMenu( IDR_MENU_LPK );
pContextmenu = menu.GetSubMenu( 3 ); } else { DBGMSG( L"\tIn left pane no item selected\n" , 0 );
return; }
UI_initmenu( pContextmenu , nt );
if( pContextmenu != NULL ) { pContextmenu->TrackPopupMenu( TPM_LEFTALIGN , pt.x , pt.y , this ); }
} else { hTreeItem = GetTreeCtrl( ).GetSelectedItem( );
SetRightClickedItem( hTreeItem ); }
}
//-----------------------------------------------------------------------------------------
afx_msg void CLicMgrLeftView::OnRightClick(NMHDR* pNMHDR, LRESULT* pResult) { CPoint pt;
CMenu menu;
CMenu *pContextmenu = NULL;
GetCursorPos( &pt );
OnContextMenu( NULL , pt );
return; }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::UI_initmenu( CMenu *pMenu , NODETYPE nt ) { CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
if( pMainFrame != NULL ) { pMainFrame->UI_initmenu( pMenu , nt ); } }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::OnServerConnect( ) { CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
if( pMainFrame != NULL ) { pMainFrame->ConnectServer( ); }
}
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::OnRefreshAllServers( ) { CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
if( pMainFrame != NULL ) { pMainFrame->OnRefresh( ); } }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::OnRefreshServer( ) { CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
CLicServer *pServer = NULL;
if( pMainFrame != NULL ) { CTreeNode *pNode = (CTreeNode *)GetTreeCtrl().GetItemData( GetRightClickedItem() );
if( pNode == NULL ) { return; }
if( pNode->GetNodeType() == NODE_SERVER ) { pServer = static_cast< CLicServer * >( pNode->GetTreeObject() ); } else if( pNode->GetNodeType() == NODE_KEYPACK ) { CKeyPack *pKeyPack = static_cast< CKeyPack *>( pNode->GetTreeObject() );
if( pKeyPack != NULL ) { pServer = pKeyPack->GetServer( ); } }
if( pServer != NULL ) { pMainFrame->RefreshServer( pServer ); } }
} //-----------------------------------------------------------------------------------------
void CLicMgrLeftView::OnDownloadKeepPack() { BOOL bRefresh = FALSE;
DWORD dwStatus = WizardActionOnServer( WIZACTION_DOWNLOADLKP , &bRefresh ); if( bRefresh ) { // need to review this
OnRefreshServer( ); } DBGMSG( L"LICMGR : CLicMgrLeftView::OnDownloadKeepPack StartWizard returned 0x%x\n" , dwStatus ); }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::OnRegisterServer() { BOOL bRefresh;
DWORD dwStatus = WizardActionOnServer( WIZACTION_REGISTERLS , &bRefresh ); DBGMSG( L"LICMGR : CLicMgrLeftView::OnRegisterServer StartWizard returned 0x%x\n" , dwStatus ); }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::OnRepeatLastDownload() { BOOL bRefresh;
DWORD dwStatus = WizardActionOnServer( WIZACTION_DOWNLOADLASTLKP , &bRefresh ); DBGMSG( L"LICMGR : CLicMgrLeftView::OnRepeatLastDownload StartWizard returned 0x%x\n" , dwStatus ); }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::OnReactivateServer( ) { BOOL bRefresh;
DWORD dwStatus = WizardActionOnServer( WIZACTION_REREGISTERLS , &bRefresh ); DBGMSG( L"LICMGR : CLicMgrLeftView::OnReactivateServer StartWizard returned 0x%x\n" , dwStatus ); }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::OnDeactivateServer( ) { BOOL bRefresh;
DWORD dwStatus = WizardActionOnServer( WIZACTION_UNREGISTERLS , &bRefresh ); DBGMSG( L"LICMGR : CLicMgrLeftView::OnDeactivateServer StartWizard returned 0x%x\n" , dwStatus ); }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::OnServerProperties( ) { BOOL bRefresh;
DWORD dwStatus = WizardActionOnServer( WIZACTION_SHOWPROPERTIES , &bRefresh ); DBGMSG( L"LICMGR : CLicMgrLeftView::OnServerProperties StartWizard returned 0x%x\n" , dwStatus ); }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::OnGeneralHelp( ) { CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() ); if( pMainFrame != NULL ) { pMainFrame->OnHelp( ); } }
//-----------------------------------------------------------------------------------------
DWORD CLicMgrLeftView::WizardActionOnServer( WIZACTION wa , PBOOL pbRefresh ) { CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
if( pMainFrame != NULL ) { return pMainFrame->WizardActionOnServer( wa , pbRefresh , TREEVIEW ); }
return ERROR_INVALID_PARAMETER; }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::SetActiveServer( CLicServer *pServer ) { CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
#ifdef DBG
if( pServer != NULL ) { DBGMSG( L"CLicMgrLeftView::SetActiveServer %s\n" , pServer->GetName( ) ); }
#endif
if( pMainFrame != NULL ) { pMainFrame->SetActiveServer( pServer ); } }
//-----------------------------------------------------------------------------------------
void CLicMgrLeftView::SetRightClickedItem( HTREEITEM ht ) { m_ht = ht; CTreeNode *pNode = (CTreeNode *)GetTreeCtrl().GetItemData(ht); if(NULL == pNode) { SetActiveServer( NULL );
return; }
NODETYPE nt = pNode->GetNodeType();
if(NODE_SERVER == nt ) { SetActiveServer( static_cast< CLicServer * >( pNode->GetTreeObject() ) );
} else if( nt == NODE_KEYPACK ) { CKeyPack *pKeyPack = static_cast< CKeyPack *>( pNode->GetTreeObject() );
if( pKeyPack != NULL ) { SetActiveServer( pKeyPack->GetServer( ) ); } } else { SetActiveServer( NULL ); }
}
|