Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1957 lines
52 KiB

  1. //Copyright (c) 1998 - 1999 Microsoft Corporation
  2. /*++
  3. Module Name:
  4. RtList.cpp
  5. Abstract:
  6. This Module contains the implementation of CRightList class
  7. (The View class used for the Right pane of the splitter)
  8. Author:
  9. Arathi Kundapur (v-akunda) 11-Feb-1998
  10. Revision History:
  11. --*/
  12. #include "stdafx.h"
  13. #include "LicMgr.h"
  14. #include "defines.h"
  15. #include "LSServer.h"
  16. #include "RtList.h"
  17. #include "Mainfrm.h"
  18. #include "LSmgrdoc.h"
  19. #ifdef _DEBUG
  20. #define new DEBUG_NEW
  21. #undef THIS_FILE
  22. static char THIS_FILE[] = __FILE__;
  23. #endif
  24. extern int GetStatusPosition( CLicense *pLic );
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CRightList
  27. IMPLEMENT_DYNCREATE(CRightList, CListView)
  28. CRightList::CRightList()
  29. {
  30. }
  31. CRightList::~CRightList()
  32. {
  33. m_ImageListLarge.DeleteImageList();
  34. m_ImageListSmall.DeleteImageList();
  35. }
  36. BEGIN_MESSAGE_MAP(CRightList, CListView)
  37. //{{AFX_MSG_MAP(CRightList)
  38. ON_MESSAGE(WM_SEL_CHANGE, OnSelChange)
  39. ON_COMMAND(ID_LARGE_ICONS, OnLargeIcons)
  40. ON_COMMAND(ID_SMALL_ICONS, OnSmallIcons)
  41. ON_COMMAND(ID_LIST, OnList)
  42. ON_COMMAND(ID_DETAILS, OnDetails)
  43. ON_MESSAGE(WM_ADD_SERVER, OnAddServer)
  44. ON_MESSAGE(WM_DELETE_SERVER, OnDeleteServer)
  45. ON_MESSAGE(WM_UPDATE_SERVER, OnUpdateServer)
  46. ON_MESSAGE(WM_ADD_KEYPACK, OnAddKeyPack)
  47. ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
  48. ON_NOTIFY_REFLECT(LVN_KEYDOWN, OnKeydown)
  49. ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnClick)
  50. ON_NOTIFY_REFLECT(NM_CLICK , OnLeftClick )
  51. // server menuitems
  52. // all server menus
  53. ON_WM_CONTEXTMENU()
  54. // ON_COMMAND( ID_LPK_CONNECT , OnServerConnect )
  55. ON_COMMAND( ID_LPK_REFRESHALL , OnRefreshAllServers )
  56. // server menuitems
  57. // ON_COMMAND( ID_LPK_CONNECT , OnServerConnect )
  58. ON_COMMAND( ID_LPK_REFRESH , OnRefreshServer )
  59. ON_COMMAND( ID_LPK_REFRESHALL , OnRefreshAllServers )
  60. ON_COMMAND( ID_LPK_DOWNLOADLICENSES , OnDownloadKeepPack )
  61. ON_COMMAND( ID_SVR_ACTIVATESERVER , OnRegisterServer )
  62. ON_COMMAND( ID_LPK_ADVANCED_REPEATLASTDOWNLOAD , OnRepeatLastDownload )
  63. ON_COMMAND( ID_LPK_ADVANCED_REACTIVATESERVER , OnReactivateServer )
  64. ON_COMMAND( ID_LPK_ADVANCED_DEACTIVATESERVER , OnDeactivateServer )
  65. ON_COMMAND( ID_LPK_PROPERTIES , OnServerProperties )
  66. ON_COMMAND( ID_LPK_HELP , OnGeneralHelp )
  67. // license pak items
  68. // ON_COMMAND( ID_LICPAK_CONNECT , OnServerConnect )
  69. ON_COMMAND( ID_LICPAK_REFRESH , OnRefreshServer )
  70. // ON_COMMAND( ID_LICPAK_REFRESHALL , OnRefreshAllServers )
  71. ON_COMMAND( ID_LICPAK_DOWNLOADLICENSES , OnDownloadKeepPack )
  72. ON_COMMAND( ID_LICPAK_REPEATDOWNLOAD , OnRepeatLastDownload )
  73. ON_COMMAND( ID_LICPAK_HELP , OnGeneralHelp )
  74. // license pak items
  75. // license items
  76. /* removed from spec
  77. ON_COMMAND( ID_LIC_CONNECT , OnServerConnect )
  78. ON_COMMAND( ID_LIC_REFRESH , OnRefreshServer )
  79. ON_COMMAND( ID_LIC_DOWNLOADLICENSES , OnDownloadKeepPack )
  80. ON_COMMAND( ID_LIC_HELP , OnGeneralHelp )
  81. */
  82. //}}AFX_MSG_MAP
  83. END_MESSAGE_MAP()
  84. /////////////////////////////////////////////////////////////////////////////
  85. // CRightList drawing
  86. void CRightList::OnDraw(CDC* pDC)
  87. {
  88. CDocument* pDoc = GetDocument();
  89. // TODO: add draw code here
  90. }
  91. /////////////////////////////////////////////////////////////////////////////
  92. // CRightList diagnostics
  93. #ifdef _DEBUG
  94. void CRightList::AssertValid() const
  95. {
  96. CListView::AssertValid();
  97. }
  98. void CRightList::Dump(CDumpContext& dc) const
  99. {
  100. CListView::Dump(dc);
  101. }
  102. #endif //_DEBUG
  103. /////////////////////////////////////////////////////////////////////////////
  104. // CRightList message handlers
  105. LRESULT CRightList::OnSelChange(WPARAM wParam, LPARAM lParam)
  106. {
  107. LRESULT lResult = 0;
  108. BOOL bChangeColumns = FALSE;
  109. CLicMgrDoc * pDoc = (CLicMgrDoc *)GetDocument();
  110. ASSERT(pDoc);
  111. if(NULL == pDoc)
  112. return lResult;
  113. CLicServer * pLicServer = NULL;
  114. CKeyPack * pKeyPack = NULL;
  115. CListCtrl& ListCtrl = GetListCtrl();
  116. ListCtrl.DeleteAllItems();
  117. NODETYPE CurNodeType = ((CLicMgrDoc *)GetDocument())->GetNodeType();
  118. if(CurNodeType != (NODETYPE)wParam)
  119. {
  120. bChangeColumns = TRUE;
  121. pDoc->SetNodeType((NODETYPE)wParam);
  122. }
  123. switch(wParam)
  124. {
  125. case NODE_ALL_SERVERS:
  126. if(bChangeColumns)
  127. SetServerColumns();
  128. AddServerstoList();
  129. SetActiveServer( NULL );
  130. break;
  131. case NODE_SERVER:
  132. pLicServer = (CLicServer *)lParam;
  133. ASSERT(pLicServer);
  134. if(NULL == pLicServer)
  135. break;
  136. if(bChangeColumns)
  137. SetKeyPackColumns();
  138. /* if(FALSE == pLicServer->IsExpanded())
  139. {
  140. SetCursor(LoadCursor(NULL,IDC_WAIT));
  141. HRESULT hResult = pDoc->EnumerateKeyPacks(pLicServer,LSKEYPACK_SEARCH_LANGID, TRUE);
  142. if(hResult != S_OK)
  143. {
  144. ((CMainFrame *)AfxGetMainWnd())->EnumFailed(hResult,pLicServer);
  145. break;
  146. }
  147. }*/
  148. SetActiveServer( pLicServer );
  149. AddKeyPackstoList((CLicServer *)lParam);
  150. SetCursor(LoadCursor(NULL,IDC_ARROW));
  151. break;
  152. case NODE_KEYPACK:
  153. pKeyPack = (CKeyPack *)lParam;
  154. ASSERT(pKeyPack);
  155. if(NULL == pKeyPack)
  156. break;
  157. if(bChangeColumns)
  158. SetLicenseColumns();
  159. /*if(FALSE == pKeyPack->IsExpanded())
  160. {
  161. SetCursor(LoadCursor(NULL,IDC_WAIT));
  162. HRESULT hResult = pDoc->EnumerateLicenses(pKeyPack,LSLICENSE_SEARCH_KEYPACKID, TRUE);
  163. if(hResult != S_OK)
  164. {
  165. ((CMainFrame *)AfxGetMainWnd())->EnumFailed(hResult,pKeyPack->GetServer());
  166. break;
  167. }
  168. }*/
  169. SetActiveServer( pKeyPack->GetServer( ) );
  170. ((CMainFrame *)AfxGetMainWnd())->AddLicensestoList(
  171. (CKeyPack *)lParam,
  172. &ListCtrl,
  173. FALSE
  174. );
  175. SetCursor(LoadCursor(NULL,IDC_ARROW));
  176. break;
  177. }
  178. return lResult;
  179. }
  180. HRESULT CRightList::AddServerstoList()
  181. {
  182. CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument();
  183. ASSERT(pDoc);
  184. if(NULL == pDoc)
  185. {
  186. return E_FAIL;
  187. }
  188. //Get the List Control
  189. CListCtrl& ListCtrl = GetListCtrl();
  190. CString TempString;
  191. CString StatusString;
  192. LicServerList * licserverlist = NULL;
  193. int nIndex = 0;
  194. CAllServers *pAllServer = pDoc->GetAllServers();
  195. if(NULL == pAllServer)
  196. {
  197. goto cleanup;
  198. }
  199. licserverlist = pAllServer->GetLicServerList();
  200. LV_ITEM lvI;
  201. lvI.mask = LVIF_TEXT |LVIF_IMAGE |LVIF_STATE | LVIF_PARAM;
  202. lvI.state = 0;
  203. lvI.stateMask =0;
  204. // lvI.iImage = 0;
  205. POSITION pos;
  206. pos = licserverlist->GetHeadPosition();
  207. while(pos)
  208. {
  209. //Display the Server Name
  210. DWORD dwServerStatus;
  211. lvI.iItem = nIndex;
  212. lvI.iSubItem = 0;
  213. CLicServer * pLicServer = licserverlist->GetNext(pos);
  214. lvI.lParam = (LPARAM)pLicServer;
  215. TempString = pLicServer->GetName();
  216. lvI.pszText = TempString.GetBuffer(TempString.GetLength());
  217. lvI.cchTextMax =lstrlen(lvI.pszText + 1);
  218. dwServerStatus = pLicServer->GetServerRegistrationStatus();
  219. if(pLicServer->GetServerType() == SERVER_TS5_ENFORCED)
  220. {
  221. if( dwServerStatus == LSERVERSTATUS_REGISTER_INTERNET
  222. ||
  223. dwServerStatus == LSERVERSTATUS_REGISTER_OTHER )
  224. {
  225. StatusString.LoadString(IDS_SERVER_REGISTERED);
  226. lvI.iImage = 3;
  227. }
  228. else if( dwServerStatus == LSERVERSTATUS_WAITFORPIN )
  229. {
  230. StatusString.LoadString(IDS_SERVER_WAITFORPIN);
  231. lvI.iImage = 4;
  232. }
  233. else if( dwServerStatus == LSERVERSTATUS_UNREGISTER )
  234. {
  235. lvI.iImage = 5;
  236. StatusString.LoadString(IDS_SERVER_UNREGISTER);
  237. }
  238. else
  239. {
  240. lvI.iImage = 6;
  241. StatusString.LoadString( IDS_UNKNOWN );
  242. }
  243. }
  244. else
  245. {
  246. StatusString.LoadString(IDS_SERVER_NOTREQUIRE);
  247. lvI.iImage = 0;
  248. }
  249. //
  250. // Display registration status
  251. //
  252. nIndex = ListCtrl.InsertItem(&lvI);
  253. // ListCtrl.SetItemText(nIndex,1,(LPCTSTR)pLicServer->GetScope());
  254. ListCtrl.SetItemText(nIndex, 1, (LPCTSTR)StatusString);
  255. nIndex ++;
  256. }
  257. ListCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);
  258. cleanup:
  259. return S_OK;
  260. }
  261. //----------------------------------------------------------------------
  262. HRESULT
  263. CRightList::AddKeyPackstoList(
  264. CLicServer * pServer,
  265. BOOL bRefresh
  266. )
  267. /*++
  268. Abstract:
  269. Parameter:
  270. bRefresh : TRUE if refresh licenses, FALSE otherwise.
  271. --*/
  272. {
  273. ASSERT(pServer);
  274. CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument();
  275. ASSERT(pDoc);
  276. if(NULL == pDoc || NULL == pServer)
  277. {
  278. return E_FAIL;
  279. }
  280. CListCtrl& ListCtrl = GetListCtrl();
  281. ULONG nIndex = 0;
  282. POSITION pos;
  283. int nSubItemIndex = 1;
  284. CString TempString;
  285. DWORD dwLicenses = 0;
  286. if(bRefresh == TRUE)
  287. {
  288. if(pServer->RefreshCachedKeyPack() != S_OK)
  289. {
  290. return E_FAIL;
  291. }
  292. }
  293. KeyPackList * keypacklist = pServer->GetKeyPackList();
  294. ULONG nNumKeyPacks = (ULONG)keypacklist->GetCount();
  295. if(0 == nNumKeyPacks)
  296. {
  297. goto cleanup;
  298. }
  299. pos = keypacklist->GetHeadPosition();
  300. for(nIndex = 0; nIndex < nNumKeyPacks; nIndex++)
  301. {
  302. CKeyPack * pKeyPack = keypacklist->GetNext(pos);
  303. if(NULL == pKeyPack)
  304. {
  305. continue;
  306. }
  307. AddKeyPack(ListCtrl, nIndex, pKeyPack);
  308. }
  309. ListCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);
  310. cleanup:
  311. return S_OK;
  312. }
  313. HRESULT CRightList::SetServerColumns()
  314. {
  315. CListCtrl& ListCtrl = GetListCtrl();
  316. for(int index = 0; index < MAX_COLUMNS; index++)
  317. {
  318. ListCtrl.DeleteColumn(0);
  319. }
  320. LV_COLUMN lvC;
  321. CString ColumnText;
  322. lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM ;
  323. lvC.fmt = LVCFMT_LEFT;
  324. lvC.cx = 125;
  325. for(index = 0; index < NUM_SERVER_COLUMNS; index ++)
  326. {
  327. lvC.iSubItem = index;
  328. ColumnText.LoadString(IDS_SERVER_COLUMN1 + index);
  329. lvC.pszText = ColumnText.GetBuffer(ColumnText.GetLength());
  330. GetListCtrl().InsertColumn(index, &lvC);
  331. }
  332. return S_OK;
  333. }
  334. HRESULT CRightList::SetKeyPackColumns()
  335. {
  336. CListCtrl& ListCtrl = GetListCtrl();
  337. for(int index = 0; index < MAX_COLUMNS; index++)
  338. {
  339. ListCtrl.DeleteColumn(0);
  340. }
  341. LV_COLUMN lvC;
  342. CString ColumnText;
  343. lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM ;
  344. lvC.fmt = LVCFMT_LEFT;
  345. lvC.cx = KEYPACK_DISPNAME_WIDTH;
  346. for(index = 0; index < NUM_KEYPACK_COLUMNS; index ++)
  347. {
  348. lvC.iSubItem = index;
  349. ColumnText.LoadString(IDS_KEYPACK_COLUMN1 + index);
  350. lvC.pszText = ColumnText.GetBuffer(ColumnText.GetLength());
  351. ListCtrl.InsertColumn(index, &lvC);
  352. lvC.cx = KEYPACK_OTHERS_WIDTH;
  353. }
  354. return S_OK;
  355. }
  356. HRESULT CRightList::SetLicenseColumns()
  357. {
  358. CListCtrl& ListCtrl = GetListCtrl();
  359. for(int index = 0; index < MAX_COLUMNS; index++)
  360. {
  361. ListCtrl.DeleteColumn(0);
  362. }
  363. LV_COLUMN lvC;
  364. CString ColumnText;
  365. lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM ;
  366. lvC.fmt = LVCFMT_LEFT;
  367. lvC.cx = 125;
  368. for(index = 0; index < NUM_LICENSE_COLUMNS; index ++)
  369. {
  370. lvC.iSubItem = index;
  371. ColumnText.LoadString(IDS_LICENSE_COLUMN1 + index);
  372. lvC.pszText = ColumnText.GetBuffer(ColumnText.GetLength());
  373. ListCtrl.InsertColumn(index, &lvC);
  374. }
  375. return S_OK;
  376. }
  377. void CRightList::OnInitialUpdate()
  378. {
  379. CListView::OnInitialUpdate();
  380. CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd();
  381. ASSERT(pMainFrame);
  382. if(NULL == pMainFrame)
  383. return;
  384. //Create and set the image lists
  385. m_ImageListSmall.Create( SM_BITMAP_WIDTH,SM_BITMAP_HEIGHT,TRUE, 7, 7);
  386. m_ImageListLarge.Create( LG_BITMAP_WIDTH,LG_BITMAP_HEIGHT,TRUE, 7, 7);
  387. HICON hIcon = NULL;
  388. DWORD rgdwIDs[] = { IDI_SERVER , IDI_KEYPACK , IDI_LICENSE , IDI_SERVERREG , IDI_SERVERM , IDI_SERVERX , IDI_SERVERQ , (DWORD)-1 };
  389. int index = 0;
  390. while( rgdwIDs[ index ] != ( DWORD )-1 )
  391. {
  392. hIcon = ::LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE( rgdwIDs[ index ] ) );
  393. if (NULL == hIcon)
  394. {
  395. ASSERT(!"LoadIcon Failed");
  396. continue;
  397. }
  398. m_ImageListSmall.Add(hIcon);
  399. m_ImageListLarge.Add(hIcon);
  400. /*
  401. if ((m_ImageListSmall.Add(hIcon) == -1) || (m_ImageListLarge.Add(hIcon) == -1))
  402. {
  403. continue;
  404. }
  405. }
  406. */
  407. ++index;
  408. }
  409. GetListCtrl().SetImageList(&m_ImageListSmall,LVSIL_SMALL);
  410. GetListCtrl().SetImageList(&m_ImageListLarge,LVSIL_NORMAL);
  411. //Set the style
  412. GetListCtrl().ModifyStyle(0,LVS_REPORT | LVS_AUTOARRANGE | LVS_SINGLESEL | LVS_SORTASCENDING,0);
  413. GetListCtrl().SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE , LVS_EX_FULLROWSELECT , LVS_EX_FULLROWSELECT );
  414. //Select details view by default
  415. CMenu *pMenu = pMainFrame->GetMenu();
  416. if(pMenu)
  417. pMenu->CheckMenuRadioItem(ID_DETAILS,ID_LIST, ID_DETAILS,MF_BYCOMMAND);
  418. pMainFrame->PressButton(ID_DETAILS,TRUE);
  419. //Display the server
  420. pMainFrame->ConnectAndDisplay();
  421. }
  422. void CRightList::OnLargeIcons()
  423. {
  424. // TODO: Add your command handler code here
  425. CListCtrl &ListCtrl = GetListCtrl();
  426. ListCtrl.ModifyStyle(LVS_LIST|LVS_REPORT | LVS_SMALLICON,LVS_ICON,0);
  427. CMenu *pMenu = AfxGetMainWnd()->GetMenu();
  428. if(pMenu)
  429. pMenu->CheckMenuRadioItem(ID_LARGE_ICONS,ID_LIST,ID_LARGE_ICONS,MF_BYCOMMAND);
  430. CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd();
  431. ASSERT(pMainFrame);
  432. if(NULL == pMainFrame)
  433. return;
  434. pMainFrame->PressButton(ID_LARGE_ICONS,TRUE);
  435. pMainFrame->PressButton(ID_SMALL_ICONS,FALSE);
  436. pMainFrame->PressButton(ID_LIST,FALSE);
  437. pMainFrame->PressButton(ID_DETAILS,FALSE);
  438. return;
  439. }
  440. void CRightList::OnSmallIcons()
  441. {
  442. // TODO: Add your command handler code here
  443. CListCtrl &ListCtrl = GetListCtrl();
  444. ListCtrl.ModifyStyle(LVS_LIST|LVS_ICON | LVS_REPORT,LVS_SMALLICON,0);
  445. CMenu *pMenu = AfxGetMainWnd()->GetMenu();
  446. if(pMenu)
  447. pMenu->CheckMenuRadioItem(ID_LARGE_ICONS,ID_LIST,ID_SMALL_ICONS,MF_BYCOMMAND);
  448. CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd();
  449. ASSERT(pMainFrame);
  450. if(NULL == pMainFrame)
  451. return;
  452. pMainFrame->PressButton(ID_LARGE_ICONS,FALSE);
  453. pMainFrame->PressButton(ID_SMALL_ICONS,TRUE);
  454. pMainFrame->PressButton(ID_LIST,FALSE);
  455. pMainFrame->PressButton(ID_DETAILS,FALSE);
  456. return;
  457. }
  458. void CRightList::OnList()
  459. {
  460. // TODO: Add your command handler code here
  461. CListCtrl &ListCtrl = GetListCtrl();
  462. ListCtrl.ModifyStyle(LVS_REPORT|LVS_ICON | LVS_SMALLICON,LVS_LIST,0);
  463. CMenu *pMenu = AfxGetMainWnd()->GetMenu();
  464. if(pMenu)
  465. pMenu->CheckMenuRadioItem(ID_LARGE_ICONS,ID_LIST,ID_LIST,MF_BYCOMMAND);
  466. CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd();
  467. ASSERT(pMainFrame);
  468. if(NULL == pMainFrame)
  469. return;
  470. pMainFrame->PressButton(ID_LARGE_ICONS,FALSE);
  471. pMainFrame->PressButton(ID_SMALL_ICONS,FALSE);
  472. pMainFrame->PressButton(ID_LIST,TRUE);
  473. pMainFrame->PressButton(ID_DETAILS,FALSE);
  474. return;
  475. }
  476. void CRightList::OnDetails()
  477. {
  478. // TODO: Add your command handler code here
  479. CListCtrl &ListCtrl = GetListCtrl();
  480. ListCtrl.ModifyStyle(LVS_LIST|LVS_ICON | LVS_SMALLICON,LVS_REPORT,0);
  481. CMenu *pMenu = AfxGetMainWnd()->GetMenu();
  482. if(pMenu)
  483. pMenu->CheckMenuRadioItem(ID_LARGE_ICONS,ID_LIST,ID_DETAILS,MF_BYCOMMAND);
  484. CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd();
  485. ASSERT(pMainFrame);
  486. if(NULL == pMainFrame)
  487. return;
  488. pMainFrame->PressButton(ID_LARGE_ICONS,FALSE);
  489. pMainFrame->PressButton(ID_SMALL_ICONS,FALSE);
  490. pMainFrame->PressButton(ID_LIST,FALSE);
  491. pMainFrame->PressButton(ID_DETAILS,TRUE);
  492. return;
  493. }
  494. LRESULT CRightList::OnAddServer(WPARAM wParam, LPARAM lParam)
  495. {
  496. LRESULT lResult = 0;
  497. CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument();
  498. ASSERT(pDoc);
  499. if(NULL == pDoc)
  500. {
  501. return lResult;
  502. }
  503. if(NODE_ALL_SERVERS != pDoc->GetNodeType())
  504. {
  505. return lResult;
  506. }
  507. CListCtrl& ListCtrl = GetListCtrl();
  508. CLicServer *pServer = (CLicServer*)lParam;
  509. ASSERT(pServer);
  510. if(NULL == pServer)
  511. {
  512. return lResult;
  513. }
  514. LV_ITEM lvI;
  515. lvI.iImage = 0;
  516. if( pServer->GetServerType() == SERVER_TS5_ENFORCED )
  517. {
  518. DWORD dwStatus = pServer->GetServerRegistrationStatus( );
  519. if( dwStatus == LSERVERSTATUS_REGISTER_INTERNET || dwStatus == LSERVERSTATUS_REGISTER_OTHER )
  520. {
  521. lvI.iImage = 3;
  522. }
  523. else if( dwStatus == LSERVERSTATUS_WAITFORPIN )
  524. {
  525. lvI.iImage = 4;
  526. }
  527. else if( dwStatus == LSERVERSTATUS_UNREGISTER )
  528. {
  529. lvI.iImage = 5;
  530. }
  531. else
  532. {
  533. lvI.iImage = 6;
  534. }
  535. }
  536. CString Name;
  537. int nIndex = GetListCtrl().GetItemCount();
  538. // Insert Server Name;
  539. lvI.mask = LVIF_TEXT |LVIF_IMAGE |LVIF_STATE | LVIF_PARAM;
  540. lvI.state = 0;
  541. lvI.stateMask =0;
  542. lvI.iSubItem = 0;
  543. //lvI.iImage = 0;
  544. lvI.iItem = nIndex;
  545. lvI.lParam = (LPARAM)pServer;
  546. Name = pServer->GetName();
  547. lvI.pszText = Name.GetBuffer(Name.GetLength());
  548. lvI.cchTextMax =lstrlen(lvI.pszText + 1);
  549. nIndex = ListCtrl.InsertItem(&lvI);
  550. //Insert Server Scope
  551. //ListCtrl.SetItemText(nIndex,1,pServer->GetScope());
  552. CString TempString;
  553. if(pServer->GetServerType() == SERVER_TS5_ENFORCED)
  554. {
  555. if(pServer->GetServerRegistrationStatus() == LSERVERSTATUS_REGISTER_INTERNET
  556. ||
  557. pServer->GetServerRegistrationStatus() == LSERVERSTATUS_REGISTER_OTHER )
  558. {
  559. VERIFY(TempString.LoadString(IDS_SERVER_REGISTERED) == TRUE);
  560. }
  561. else if( pServer->GetServerRegistrationStatus() == LSERVERSTATUS_WAITFORPIN )
  562. {
  563. VERIFY(TempString.LoadString(IDS_SERVER_WAITFORPIN) == TRUE);
  564. }
  565. else if( pServer->GetServerRegistrationStatus() == LSERVERSTATUS_UNREGISTER )
  566. {
  567. VERIFY(TempString.LoadString(IDS_SERVER_UNREGISTER) == TRUE);
  568. }
  569. else
  570. {
  571. VERIFY(TempString.LoadString(IDS_UNKNOWN ) == TRUE);
  572. }
  573. }
  574. else
  575. {
  576. VERIFY(TempString.LoadString(IDS_SERVER_NOTREQUIRE) == TRUE);
  577. }
  578. ListCtrl.SetItemText(nIndex, 1, (LPCTSTR)TempString);
  579. if(nIndex == 0)
  580. {
  581. ListCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);
  582. }
  583. return lResult;
  584. } // OnAddServer
  585. LRESULT CRightList::OnAddKeyPack(WPARAM wParam, LPARAM lParam)
  586. {
  587. LRESULT lResult = 0;
  588. CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument();
  589. ASSERT(pDoc);
  590. if(NULL == pDoc)
  591. return lResult;
  592. if(NODE_SERVER != pDoc->GetNodeType())
  593. return lResult;
  594. CListCtrl& ListCtrl = GetListCtrl();
  595. int nIndex = ListCtrl.GetItemCount();
  596. CKeyPack *pKeyPack = (CKeyPack*)lParam;
  597. ASSERT(pKeyPack);
  598. if(NULL == pKeyPack)
  599. return lResult;
  600. AddKeyPack(ListCtrl,nIndex,pKeyPack);
  601. if(nIndex == 0)
  602. ListCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);
  603. return lResult;
  604. } // OnAddKeyPack
  605. void CRightList::AddKeyPack(CListCtrl& ListCtrl,int nIndex, CKeyPack * pKeyPack)
  606. {
  607. if(NULL == pKeyPack)
  608. {
  609. return;
  610. }
  611. LSKeyPack sKeyPack;
  612. int nSubItemIndex = 1;
  613. DWORD dwLicenses = 0;
  614. CLicMgrDoc * pDoc = (CLicMgrDoc *)GetDocument();
  615. ASSERT(pDoc);
  616. if(NULL == pDoc)
  617. {
  618. return;
  619. }
  620. CString TempString;
  621. DWORD dwIssuedLicenses = 0;
  622. LV_ITEM lvI;
  623. lvI.mask = LVIF_TEXT |LVIF_IMAGE |LVIF_STATE | LVIF_PARAM;
  624. lvI.state = 0;
  625. lvI.stateMask =0;
  626. lvI.iItem = 0;
  627. lvI.iSubItem = 0;
  628. lvI.iImage = 1;
  629. lvI.iItem = nIndex;
  630. lvI.lParam = (LPARAM)pKeyPack;
  631. TempString = pKeyPack->GetDisplayName();
  632. lvI.pszText = TempString.GetBuffer(TempString.GetLength());
  633. lvI.cchTextMax =lstrlen(lvI.pszText + 1);
  634. nIndex = ListCtrl.InsertItem(&lvI);
  635. sKeyPack = pKeyPack->GetKeyPackStruct();
  636. //Set the KeyPack Type.
  637. if(NUM_KEYPACK_TYPE <= sKeyPack.ucKeyPackType)
  638. {
  639. TempString.LoadString(IDS_LSKEYPACKTYPE_UNKNOWN );
  640. }
  641. else
  642. {
  643. if(LSKEYPACKTYPE_FREE == sKeyPack.ucKeyPackType)
  644. {
  645. TempString.LoadString(IDS_LSKEYPACKTYPE_FREE );
  646. }
  647. else
  648. {
  649. TempString.LoadString(IDS_LSKEYPACKTYPE_UNKNOWN+ sKeyPack.ucKeyPackType);
  650. }
  651. }
  652. ListCtrl.SetItemText(nIndex,nSubItemIndex,(LPCTSTR)TempString);
  653. nSubItemIndex++;
  654. //Set the Activation date, Now called Registered on
  655. #ifdef SPANISH
  656. if(LSKEYPACKTYPE_TEMPORARY != sKeyPack.ucKeyPackType)
  657. {
  658. TempString = pDoc->TimeToString(&sKeyPack.dwActivateDate);
  659. if(TempString.IsEmpty())
  660. {
  661. TempString.LoadString(IDS_UNKNOWN);
  662. }
  663. }
  664. else
  665. {
  666. TempString.LoadString(IDS_DASH);
  667. }
  668. ListCtrl.SetItemText(nIndex,nSubItemIndex,(LPCTSTR)TempString);
  669. nSubItemIndex++;
  670. #endif
  671. //Set Total licenses.
  672. //
  673. // HueiWang 7/7/98 - per marketing request
  674. //
  675. if(LSKEYPACKTYPE_TEMPORARY == sKeyPack.ucKeyPackType)
  676. {
  677. TempString.LoadString(IDS_DASH);
  678. }
  679. else
  680. {
  681. if(LSKEYPACKTYPE_FREE == sKeyPack.ucKeyPackType)
  682. {
  683. TempString.LoadString(IDS_UNLIMITED);
  684. }
  685. else
  686. {
  687. TempString.Format(_T("%d"),sKeyPack.dwTotalLicenseInKeyPack);
  688. }
  689. }
  690. ListCtrl.SetItemText(nIndex,nSubItemIndex,(LPCTSTR)TempString);
  691. nSubItemIndex++;
  692. //Set Available licenses.
  693. if(LSKEYPACKTYPE_TEMPORARY == sKeyPack.ucKeyPackType)
  694. {
  695. TempString.LoadString(IDS_DASH);
  696. }
  697. else
  698. {
  699. if( LSKEYPACKSTATUS_RETURNED == sKeyPack.ucKeyPackStatus ||
  700. LSKEYPACKSTATUS_REVOKED == sKeyPack.ucKeyPackStatus )
  701. {
  702. TempString.Format(_T("%d"), 0);
  703. }
  704. else if(LSKEYPACKTYPE_FREE == sKeyPack.ucKeyPackType)
  705. {
  706. TempString.LoadString(IDS_UNLIMITED);
  707. }
  708. else
  709. {
  710. TempString.Format(_T("%d"),sKeyPack.dwNumberOfLicenses);
  711. }
  712. }
  713. ListCtrl.SetItemText(nIndex,nSubItemIndex,(LPCTSTR)TempString);
  714. nSubItemIndex++;
  715. //Set Issued licenses.
  716. if(LSKEYPACKTYPE_TEMPORARY == sKeyPack.ucKeyPackType ||
  717. LSKEYPACKTYPE_FREE == sKeyPack.ucKeyPackType )
  718. {
  719. dwLicenses = sKeyPack.dwNumberOfLicenses;
  720. }
  721. else
  722. {
  723. dwLicenses = sKeyPack.dwTotalLicenseInKeyPack - sKeyPack.dwNumberOfLicenses;
  724. }
  725. TempString.Format(_T("%d"),dwLicenses);
  726. ListCtrl.SetItemText(nIndex,nSubItemIndex,(LPCTSTR)TempString);
  727. nSubItemIndex++;
  728. TempString.Empty( );
  729. switch( sKeyPack.ucKeyPackStatus )
  730. {
  731. case LSKEYPACKSTATUS_UNKNOWN:
  732. TempString.LoadString( IDS_KEYPACKSTATUS_UNKNOWN );
  733. break;
  734. case LSKEYPACKSTATUS_TEMPORARY:
  735. TempString.LoadString( IDS_KEYPACKSTATUS_TEMPORARY );
  736. break;
  737. case LSKEYPACKSTATUS_ACTIVE:
  738. case LSKEYPACKSTATUS_PENDING:
  739. //case LSKEYPACKSTATUS_RESTORE:
  740. TempString.LoadString( IDS_KEYPACKSTATUS_ACTIVE );
  741. break;
  742. case LSKEYPACKSTATUS_RETURNED:
  743. TempString.LoadString( IDS_KEYPACKSTATUS_RETURNED );
  744. break;
  745. case LSKEYPACKSTATUS_REVOKED:
  746. TempString.LoadString( IDS_KEYPACKSTATUS_REVOKED );
  747. break;
  748. }
  749. if( TempString.IsEmpty() )
  750. {
  751. TempString.LoadString(IDS_UNKNOWN);
  752. }
  753. ListCtrl.SetItemText(nIndex,nSubItemIndex,(LPCTSTR)TempString);
  754. return;
  755. }
  756. LRESULT CRightList::OnDeleteServer(WPARAM wParam, LPARAM lParam)
  757. {
  758. LRESULT lResult = 0;
  759. DBGMSG( L"CRightList_OnDeleteServer\n" , 0 );
  760. CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument();
  761. ASSERT(pDoc);
  762. if(NULL == pDoc)
  763. return lResult;
  764. CLicServer *pServer = (CLicServer*)lParam;
  765. ASSERT(pServer);
  766. if(NULL == pServer)
  767. return lResult;
  768. CListCtrl& ListCtrl = GetListCtrl();
  769. if(0 == ListCtrl.GetItemCount())
  770. return lResult;
  771. int nIndex = 0;
  772. CKeyPack * pKeyPack = NULL;
  773. LV_ITEM Item;
  774. ZeroMemory((LPVOID)&Item,sizeof(Item));
  775. switch(pDoc->GetNodeType())
  776. {
  777. case NODE_ALL_SERVERS:
  778. DBGMSG( L"\tNODE_ALL_SERVERS\n",0 );
  779. LV_FINDINFO FindInfo;
  780. FindInfo.flags = LVFI_PARAM;
  781. FindInfo.psz = NULL;
  782. FindInfo.lParam = (LPARAM)pServer;
  783. nIndex = ListCtrl.FindItem(&FindInfo);
  784. if(-1 == nIndex)
  785. return lResult;
  786. ListCtrl.DeleteItem(nIndex);
  787. break;
  788. case NODE_SERVER:
  789. DBGMSG( L"\tNODE_SERVER\n",0 );
  790. Item.iItem = 0;
  791. Item.mask = LVIF_PARAM;
  792. nIndex = ListCtrl.GetItem(&Item);
  793. if(-1 == nIndex)
  794. break;
  795. pKeyPack = (CKeyPack *)Item.lParam;
  796. if(NULL == pKeyPack)
  797. break;
  798. if(pServer == pKeyPack->GetServer())
  799. ListCtrl.DeleteAllItems();
  800. break;
  801. case NODE_KEYPACK:
  802. DBGMSG( L"\tNODE_KEYPACK\n",0 );
  803. Item.iItem = 0;
  804. Item.mask = LVIF_PARAM;
  805. nIndex = ListCtrl.GetItem(&Item);
  806. if(-1 == nIndex)
  807. break;
  808. CLicense * pLicense = (CLicense *)Item.lParam;
  809. if(NULL == pLicense)
  810. break;
  811. pKeyPack = pLicense->GetKeyPack();
  812. if(NULL == pKeyPack)
  813. break;
  814. if(pServer == pKeyPack->GetServer())
  815. ListCtrl.DeleteAllItems();
  816. break;
  817. }
  818. return lResult;
  819. } // OnDeleteServer
  820. LRESULT CRightList::OnUpdateServer(WPARAM wParam, LPARAM lParam)
  821. {
  822. LRESULT lResult = 0;
  823. int item;
  824. CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument();
  825. ASSERT(pDoc);
  826. if(NULL == pDoc)
  827. {
  828. return lResult;
  829. }
  830. CLicServer *pServer = (CLicServer*)lParam;
  831. ASSERT(pServer);
  832. if(NULL == pServer)
  833. {
  834. return lResult;
  835. }
  836. CListCtrl& ListCtrl = GetListCtrl();
  837. if(0 == ListCtrl.GetItemCount())
  838. {
  839. return lResult;
  840. }
  841. int nIndex = 0;
  842. CKeyPack * pKeyPack = NULL;
  843. LV_ITEM Item;
  844. ZeroMemory((LPVOID)&Item,sizeof(Item));
  845. Item.mask = LVIF_IMAGE;
  846. CString sServerName;
  847. if(pServer->UseIpAddress())
  848. sServerName = pServer->GetIpAddress();
  849. else
  850. sServerName = pServer->GetName();
  851. switch(pDoc->GetNodeType())
  852. {
  853. case NODE_ALL_SERVERS:
  854. for( item = 0; item < ListCtrl.GetItemCount( ); ++item )
  855. {
  856. CString sItemName = ListCtrl.GetItemText(item, 0);
  857. //We'll only refresh the server we were asked to refresh
  858. if(sServerName != sItemName)
  859. continue;
  860. // update status of registration
  861. CString TempString;
  862. if(pServer->GetServerType() == SERVER_TS5_ENFORCED)
  863. {
  864. if(pServer->GetServerRegistrationStatus() == LSERVERSTATUS_REGISTER_INTERNET
  865. ||
  866. pServer->GetServerRegistrationStatus() == LSERVERSTATUS_REGISTER_OTHER )
  867. {
  868. TempString.LoadString(IDS_SERVER_REGISTERED);
  869. Item.iImage = 3;
  870. }
  871. else if( pServer->GetServerRegistrationStatus() == LSERVERSTATUS_WAITFORPIN )
  872. {
  873. TempString.LoadString( IDS_SERVER_WAITFORPIN );
  874. Item.iImage = 4;
  875. }
  876. else if( pServer->GetServerRegistrationStatus() == LSERVERSTATUS_UNREGISTER )
  877. {
  878. TempString.LoadString(IDS_SERVER_UNREGISTER);
  879. Item.iImage = 5;
  880. }
  881. else
  882. {
  883. TempString.LoadString(IDS_UNKNOWN);
  884. Item.iImage = 6;
  885. }
  886. }
  887. else
  888. {
  889. TempString.LoadString(IDS_SERVER_NOTREQUIRE);
  890. }
  891. Item.iItem = item;
  892. ListCtrl.SetItem( &Item );
  893. ListCtrl.SetItemText(item, 1, (LPCTSTR)TempString);
  894. }
  895. break;
  896. case NODE_SERVER:
  897. Item.iItem = 0;
  898. Item.mask = LVIF_PARAM;
  899. nIndex = ListCtrl.GetItem(&Item);
  900. if(-1 == nIndex)
  901. {
  902. break;
  903. }
  904. pKeyPack = (CKeyPack *)Item.lParam;
  905. if(NULL == pKeyPack)
  906. {
  907. break;
  908. }
  909. if(pServer == pKeyPack->GetServer())
  910. {
  911. ListCtrl.DeleteAllItems();
  912. AddKeyPackstoList(pServer, TRUE);
  913. }
  914. break;
  915. case NODE_KEYPACK:
  916. Item.iItem = 0;
  917. Item.mask = LVIF_PARAM;
  918. nIndex = ListCtrl.GetItem(&Item);
  919. if(-1 == nIndex)
  920. {
  921. break;
  922. }
  923. CLicense * pLicense = (CLicense *)Item.lParam;
  924. if(NULL == pLicense)
  925. {
  926. break;
  927. }
  928. pKeyPack = pLicense->GetKeyPack();
  929. if(NULL == pKeyPack)
  930. {
  931. break;
  932. }
  933. if(pServer == pKeyPack->GetServer())
  934. {
  935. ListCtrl.DeleteAllItems();
  936. ((CMainFrame *)AfxGetMainWnd())->AddLicensestoList(pKeyPack, &ListCtrl, TRUE);
  937. }
  938. break;
  939. }
  940. return lResult;
  941. } // OnUpdateServer
  942. //-----------------------------------------------------------------------------------------------------
  943. void CRightList::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
  944. {
  945. // TODO: Add your control notification handler code here
  946. // TODO: Add your control notification handler code here
  947. CListCtrl& listctrl = GetListCtrl();
  948. //Get the selected item
  949. int nSelected = listctrl.GetNextItem(-1, LVNI_SELECTED);
  950. if(-1 == nSelected)
  951. return;
  952. //Get the Data associated with the item.
  953. #ifdef _WIN64
  954. DWORD_PTR dCurrSel;
  955. #else
  956. DWORD dCurrSel;
  957. #endif
  958. dCurrSel = listctrl.GetItemData(nSelected);
  959. if(LB_ERR == dCurrSel)
  960. return;
  961. switch(((CLicMgrDoc *)GetDocument())->GetNodeType())
  962. {
  963. case NODE_ALL_SERVERS:
  964. ((CMainFrame *)AfxGetMainWnd())->SetTreeViewSel(dCurrSel,NODE_SERVER);
  965. break;
  966. case NODE_SERVER:
  967. ((CMainFrame *)AfxGetMainWnd())->SetTreeViewSel(dCurrSel,NODE_KEYPACK);
  968. break;
  969. }
  970. *pResult = 0;
  971. }
  972. //-----------------------------------------------------------------------------------------------------
  973. void CRightList::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult)
  974. {
  975. LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
  976. // TODO: Add your control notification handler code here
  977. CMainFrame * pMainFrame = ((CMainFrame *)AfxGetMainWnd());
  978. if(pLVKeyDow->wVKey == VK_RETURN)
  979. {
  980. OnDblclk(pNMHDR,pResult);
  981. pMainFrame->SelectView(LISTVIEW);
  982. }
  983. if(pLVKeyDow->wVKey == VK_TAB)
  984. {
  985. pMainFrame->SelectView(TREEVIEW);
  986. }
  987. *pResult = 0;
  988. }
  989. /*
  990. * Column Sorting.
  991. */
  992. BOOL fColSortDir[MAX_COLUMNS * NODE_NONE];
  993. int CALLBACK CompareAllServers(LPARAM, LPARAM, LPARAM);
  994. int CALLBACK CompareServer(LPARAM, LPARAM, LPARAM);
  995. int CALLBACK CompareKeyPack(LPARAM, LPARAM, LPARAM);
  996. VOID
  997. CRightList::OnColumnClick(
  998. NMHDR* pNMHDR,
  999. LRESULT* pResult
  1000. )
  1001. {
  1002. NM_LISTVIEW* pnmlv = (NM_LISTVIEW*)pNMHDR;
  1003. NODETYPE curType = ((CLicMgrDoc*)GetDocument())->GetNodeType();
  1004. switch(curType) {
  1005. case NODE_ALL_SERVERS:
  1006. GetListCtrl().SortItems(CompareAllServers, pnmlv->iSubItem);
  1007. break;
  1008. case NODE_SERVER:
  1009. GetListCtrl().SortItems(CompareServer, pnmlv->iSubItem);
  1010. break;
  1011. case NODE_KEYPACK:
  1012. GetListCtrl().SortItems(CompareKeyPack, pnmlv->iSubItem);
  1013. break;
  1014. }
  1015. fColSortDir[curType * MAX_COLUMNS + pnmlv->iSubItem] =
  1016. !fColSortDir[curType * MAX_COLUMNS + pnmlv->iSubItem];
  1017. }
  1018. /*
  1019. * Compare Functions.
  1020. */
  1021. int CALLBACK
  1022. CompareAllServers(
  1023. LPARAM lParam1,
  1024. LPARAM lParam2,
  1025. LPARAM lParamSort
  1026. )
  1027. {
  1028. CLicServer* pItem1 = (CLicServer*)lParam1;
  1029. CLicServer* pItem2 = (CLicServer*)lParam2;
  1030. int retVal = 0;
  1031. int iCol = (NODE_ALL_SERVERS * MAX_COLUMNS) + (int)lParamSort;
  1032. int dir;
  1033. switch(lParamSort) {
  1034. case 0:
  1035. case 1:
  1036. retVal = pItem1->GetName().CompareNoCase(pItem2->GetName());
  1037. break;
  1038. default:
  1039. return(0);
  1040. }
  1041. dir = fColSortDir[iCol] ? 1 : -1;
  1042. return(dir * retVal);
  1043. }
  1044. int CALLBACK
  1045. CompareServer(
  1046. LPARAM lParam1,
  1047. LPARAM lParam2,
  1048. LPARAM lParamSort
  1049. )
  1050. {
  1051. CKeyPack* pItem1 = (CKeyPack*)lParam1;
  1052. CKeyPack* pItem2 = (CKeyPack*)lParam2;
  1053. CString szTemp1;
  1054. CString szTemp2;
  1055. int retVal = 0;
  1056. int iCol = (NODE_SERVER * MAX_COLUMNS) + (int)lParamSort;
  1057. int dir;
  1058. int tmp1, tmp2;
  1059. switch(lParamSort) {
  1060. case 0:
  1061. retVal = _tcsicmp(pItem1->GetDisplayName(), pItem2->GetDisplayName());
  1062. break;
  1063. case 1:
  1064. tmp1 = pItem1->GetKeyPackStruct().ucKeyPackType;
  1065. tmp2 = pItem2->GetKeyPackStruct().ucKeyPackType;
  1066. if (tmp1 >= NUM_KEYPACK_TYPE) {
  1067. szTemp1.LoadString(IDS_LSKEYPACKTYPE_UNKNOWN);
  1068. } else if(tmp1 == LSKEYPACKTYPE_FREE) {
  1069. szTemp1.LoadString(IDS_LSKEYPACKTYPE_FREE);
  1070. } else {
  1071. szTemp1.LoadString(IDS_LSKEYPACKTYPE_UNKNOWN + tmp1);
  1072. }
  1073. if (tmp2 >= NUM_KEYPACK_TYPE) {
  1074. szTemp2.LoadString(IDS_LSKEYPACKTYPE_UNKNOWN);
  1075. } else if(tmp2 == LSKEYPACKTYPE_FREE) {
  1076. szTemp2.LoadString(IDS_LSKEYPACKTYPE_FREE);
  1077. } else {
  1078. szTemp2.LoadString(IDS_LSKEYPACKTYPE_UNKNOWN + tmp2);
  1079. }
  1080. retVal = _tcsicmp(szTemp1, szTemp2);
  1081. break;
  1082. case 2:
  1083. tmp1 = pItem1->GetKeyPackStruct().ucKeyPackType;
  1084. tmp2 = pItem2->GetKeyPackStruct().ucKeyPackType;
  1085. if (tmp1 == LSKEYPACKTYPE_FREE) {
  1086. retVal = 1;
  1087. } else if (tmp1 == LSKEYPACKTYPE_TEMPORARY) {
  1088. retVal = -1;
  1089. } else {
  1090. if (tmp2 == LSKEYPACKTYPE_FREE) {
  1091. retVal = -1;
  1092. } else if (tmp2 == LSKEYPACKTYPE_TEMPORARY) {
  1093. retVal = 1;
  1094. } else {
  1095. retVal = pItem1->GetKeyPackStruct().dwTotalLicenseInKeyPack -
  1096. pItem2->GetKeyPackStruct().dwTotalLicenseInKeyPack;
  1097. }
  1098. }
  1099. break;
  1100. case 3:
  1101. tmp1 = pItem1->GetKeyPackStruct().ucKeyPackType;
  1102. tmp2 = pItem2->GetKeyPackStruct().ucKeyPackType;
  1103. if (tmp1 == LSKEYPACKTYPE_FREE) {
  1104. retVal = 1;
  1105. } else if (tmp1 == LSKEYPACKTYPE_TEMPORARY) {
  1106. retVal = -1;
  1107. } else {
  1108. if (tmp2 == LSKEYPACKTYPE_FREE) {
  1109. retVal = -1;
  1110. } else if (tmp2 == LSKEYPACKTYPE_TEMPORARY) {
  1111. retVal = 1;
  1112. } else {
  1113. retVal = pItem1->GetKeyPackStruct().dwNumberOfLicenses -
  1114. pItem2->GetKeyPackStruct().dwNumberOfLicenses;
  1115. }
  1116. }
  1117. break;
  1118. case 4:
  1119. DWORD sort1, sort2;
  1120. tmp1 = pItem1->GetKeyPackStruct().ucKeyPackType;
  1121. tmp2 = pItem2->GetKeyPackStruct().ucKeyPackType;
  1122. if ((tmp1 == LSKEYPACKTYPE_TEMPORARY) || (tmp1 == LSKEYPACKTYPE_FREE)) {
  1123. sort1 = pItem1->GetKeyPackStruct().dwNumberOfLicenses;
  1124. } else {
  1125. sort1 = pItem1->GetKeyPackStruct().dwTotalLicenseInKeyPack -
  1126. pItem1->GetKeyPackStruct().dwNumberOfLicenses;
  1127. }
  1128. if ((tmp2 == LSKEYPACKTYPE_TEMPORARY) || (tmp2 == LSKEYPACKTYPE_FREE)) {
  1129. sort2 = pItem2->GetKeyPackStruct().dwNumberOfLicenses;
  1130. } else {
  1131. sort2 = pItem2->GetKeyPackStruct().dwTotalLicenseInKeyPack -
  1132. pItem2->GetKeyPackStruct().dwNumberOfLicenses;
  1133. }
  1134. retVal = sort1 - sort2;
  1135. break;
  1136. default:
  1137. return(0);
  1138. }
  1139. dir = fColSortDir[iCol] ? 1 : -1;
  1140. return(dir * retVal);
  1141. }
  1142. int CALLBACK
  1143. CompareKeyPack(
  1144. LPARAM lParam1,
  1145. LPARAM lParam2,
  1146. LPARAM lParamSort
  1147. )
  1148. {
  1149. CLicense* pItem1 = (CLicense*)lParam1;
  1150. CLicense* pItem2 = (CLicense*)lParam2;
  1151. int retVal = 0;
  1152. int iCol = (NODE_KEYPACK * MAX_COLUMNS) + (int)lParamSort;
  1153. int dir;
  1154. switch(lParamSort) {
  1155. case 0:
  1156. retVal = _tcsicmp(pItem1->GetLicenseStruct().szMachineName,
  1157. pItem2->GetLicenseStruct().szMachineName);
  1158. break;
  1159. case 1:
  1160. retVal = pItem1->GetLicenseStruct().ftIssueDate -
  1161. pItem2->GetLicenseStruct().ftIssueDate;
  1162. break;
  1163. case 2:
  1164. retVal = pItem1->GetLicenseStruct().ftExpireDate -
  1165. pItem2->GetLicenseStruct().ftExpireDate;
  1166. break;
  1167. default:
  1168. return(0);
  1169. }
  1170. dir = fColSortDir[iCol] ? 1 : -1;
  1171. return(dir * retVal);
  1172. }
  1173. afx_msg void CRightList::OnLeftClick( NMHDR* pNMHDR, LRESULT* pResult )
  1174. {
  1175. CPoint pt;
  1176. DWORD_PTR itemData;
  1177. GetCursorPos( &pt );
  1178. ScreenToClient( &pt );
  1179. UINT flag;
  1180. CListCtrl& listctrl = GetListCtrl();
  1181. int iItem = listctrl.HitTest( pt , &flag );
  1182. itemData = listctrl.GetItemData( iItem );
  1183. if( itemData == LB_ERR )
  1184. {
  1185. int iItem = listctrl.GetNextItem(-1, LVNI_SELECTED | LVNI_FOCUSED );
  1186. if( iItem != LB_ERR )
  1187. {
  1188. itemData = listctrl.GetItemData( iItem );
  1189. }
  1190. else
  1191. {
  1192. DBGMSG( L"\tno item selected\n", 0 );
  1193. return;
  1194. }
  1195. }
  1196. CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument();
  1197. if(NULL == pDoc)
  1198. {
  1199. return;
  1200. }
  1201. NODETYPE nt = pDoc->GetNodeType();
  1202. switch( nt )
  1203. {
  1204. case NODE_ALL_SERVERS:
  1205. {
  1206. CLicServer *pServer = reinterpret_cast< CLicServer* >( itemData );
  1207. SetActiveServer( pServer );
  1208. if( NULL == pServer )
  1209. {
  1210. DBGMSG( L"\tno item selected\n", 0 );
  1211. break;
  1212. }
  1213. DBGMSG( L"\tServer item selected\n", 0 );
  1214. }
  1215. break;
  1216. case NODE_SERVER:
  1217. {
  1218. CKeyPack *pKeyPack = reinterpret_cast< CKeyPack * >( itemData );
  1219. if(NULL == pKeyPack)
  1220. {
  1221. DBGMSG( L"\tno item selected\n", 0 );
  1222. SetActiveServer( NULL );
  1223. break;
  1224. }
  1225. SetActiveServer( pKeyPack->GetServer( ) );
  1226. DBGMSG( L"\tLicense pak item selected\n", 0 );
  1227. }
  1228. break;
  1229. case NODE_KEYPACK:
  1230. {
  1231. CLicense * pLicense = reinterpret_cast< CLicense * >( itemData );
  1232. if( pLicense != NULL )
  1233. {
  1234. CKeyPack *pKeyPack = pLicense->GetKeyPack( );
  1235. if( pKeyPack != NULL )
  1236. {
  1237. SetActiveServer( pKeyPack->GetServer( ) );
  1238. break;
  1239. }
  1240. }
  1241. SetActiveServer( NULL );
  1242. }
  1243. break;
  1244. }
  1245. }
  1246. //------------------------------------------------------------------------
  1247. afx_msg void CRightList::OnContextMenu( CWnd* pWnd, CPoint pt )
  1248. {
  1249. CMenu menu;
  1250. CMenu *pContextMenu = NULL;
  1251. DWORD_PTR itemData;
  1252. DBGMSG( L"LICMGR @ CRightList::OnContextMenu\n" , 0 );
  1253. DBGMSG( L"\tpoint x = %d " , pt.x );
  1254. DBGMSG( L"y = %d\n" , pt.y );
  1255. UINT flag;
  1256. int nItem = -1;
  1257. CListCtrl& listctrl = GetListCtrl();
  1258. // maybe keyboard selected this item
  1259. if(pt.x == -1 && pt.y == -1)
  1260. {
  1261. if( listctrl.GetSelectedCount( ) > 0 )
  1262. {
  1263. RECT rect;
  1264. nItem = listctrl.GetNextItem( nItem , LVNI_SELECTED );
  1265. if( nItem != ( int )LB_ERR )
  1266. {
  1267. listctrl.GetItemRect( nItem , &rect , LVIR_BOUNDS );
  1268. pt.x = rect.left + (rect.right - rect.left)/2;
  1269. pt.y = rect.top + (rect.bottom - rect.top)/2;
  1270. }
  1271. }
  1272. }
  1273. else
  1274. {
  1275. // otherwise we're invoked by the mouse
  1276. ScreenToClient( &pt );
  1277. nItem = listctrl.HitTest( pt , &flag );
  1278. }
  1279. itemData = listctrl.GetItemData( nItem );
  1280. CLicMgrDoc * pDoc =(CLicMgrDoc *)GetDocument();
  1281. if(NULL == pDoc)
  1282. {
  1283. return;
  1284. }
  1285. ClientToScreen( &pt );
  1286. NODETYPE nt = pDoc->GetNodeType();
  1287. switch( nt )
  1288. {
  1289. case NODE_ALL_SERVERS:
  1290. {
  1291. CLicServer *pServer = reinterpret_cast< CLicServer* >( itemData );
  1292. SetActiveServer( pServer );
  1293. if( NULL == pServer )
  1294. {
  1295. DBGMSG( L"\tno item selected\n", 0 );
  1296. break;
  1297. }
  1298. DBGMSG( L"\tServer item selected\n", 0 );
  1299. menu.LoadMenu( IDR_MENU_LPK );
  1300. pContextMenu = menu.GetSubMenu( 0 );
  1301. nt = NODE_SERVER;
  1302. }
  1303. break;
  1304. case NODE_SERVER:
  1305. {
  1306. nt = NODE_KEYPACK;
  1307. CKeyPack *pKeyPack = reinterpret_cast< CKeyPack * >( itemData );
  1308. if(NULL == pKeyPack)
  1309. {
  1310. DBGMSG( L"\tno item selected\n", 0 );
  1311. // SetActiveServer( NULL );
  1312. break;
  1313. }
  1314. SetActiveServer( pKeyPack->GetServer( ) );
  1315. DBGMSG( L"\tLicense pak item selected\n", 0 );
  1316. menu.LoadMenu( IDR_MENU_LPK );
  1317. pContextMenu = menu.GetSubMenu( 1 );
  1318. }
  1319. break;
  1320. case NODE_KEYPACK:
  1321. {
  1322. CLicense * pLicense = reinterpret_cast< CLicense * >( itemData );
  1323. if( pLicense == NULL )
  1324. {
  1325. DBGMSG( L"\tno item selected\n", 0 );
  1326. // SetActiveServer( NULL );
  1327. break;
  1328. }
  1329. CKeyPack *pKeyPack = pLicense->GetKeyPack( );
  1330. if( pKeyPack != NULL )
  1331. {
  1332. SetActiveServer( pKeyPack->GetServer( ) );
  1333. }
  1334. else
  1335. {
  1336. // impossible! a license with out a home
  1337. ASSERT( 0 );
  1338. }
  1339. /*
  1340. nt = NODE_NONE; // its safe
  1341. CLicense * pLicense = reinterpret_cast< CLicense * >( itemData );
  1342. if( pLicense == NULL )
  1343. {
  1344. DBGMSG( L"\tno item selected\n", 0 );
  1345. break;
  1346. }
  1347. DBGMSG( L"\tLicense item selected\n", 0 );
  1348. menu.LoadMenu( IDR_MENU_LPK );
  1349. pContextMenu = menu.GetSubMenu( 2 );
  1350. */
  1351. }
  1352. break;
  1353. }
  1354. UI_initmenu( pContextMenu , nt );
  1355. if( pContextMenu != NULL )
  1356. {
  1357. pContextMenu->TrackPopupMenu( TPM_LEFTALIGN , pt.x , pt.y , this );
  1358. }
  1359. }
  1360. //----------------------------------------------------------------------------
  1361. void CRightList::UI_initmenu( CMenu *pMenu , NODETYPE nt )
  1362. {
  1363. CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
  1364. if( pMainFrame != NULL )
  1365. {
  1366. pMainFrame->UI_initmenu( pMenu , nt );
  1367. }
  1368. }
  1369. //----------------------------------------------------------------------------
  1370. DWORD CRightList::WizardActionOnServer( WIZACTION wa , PBOOL pbRefresh )
  1371. {
  1372. CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
  1373. if( pMainFrame != NULL )
  1374. {
  1375. return pMainFrame->WizardActionOnServer( wa , pbRefresh , LISTVIEW );
  1376. }
  1377. return ERROR_INVALID_PARAMETER;
  1378. }
  1379. //-----------------------------------------------------------------------------------------
  1380. void CRightList::OnServerConnect( )
  1381. {
  1382. CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
  1383. if( pMainFrame != NULL )
  1384. {
  1385. pMainFrame->ConnectServer( );
  1386. }
  1387. }
  1388. //-----------------------------------------------------------------------------------------
  1389. void CRightList::OnRefreshAllServers( )
  1390. {
  1391. CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
  1392. if( pMainFrame != NULL )
  1393. {
  1394. pMainFrame->OnRefresh( );
  1395. }
  1396. }
  1397. //-----------------------------------------------------------------------------------------
  1398. void CRightList::OnRefreshServer( )
  1399. {
  1400. CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
  1401. CLicServer *pServer = NULL;
  1402. if( pMainFrame != NULL )
  1403. {
  1404. CListCtrl& listctrl = GetListCtrl();
  1405. CLicMgrDoc * pDoc = (CLicMgrDoc *)GetDocument();
  1406. ASSERT(pDoc);
  1407. if(NULL == pDoc)
  1408. {
  1409. return;
  1410. }
  1411. int nSelected = listctrl.GetNextItem(-1, LVNI_SELECTED);
  1412. if( -1 != nSelected)
  1413. {
  1414. DWORD_PTR dCurrSel = listctrl.GetItemData( nSelected );
  1415. if( NODE_ALL_SERVERS == pDoc->GetNodeType() )
  1416. {
  1417. pServer = reinterpret_cast< CLicServer * >( dCurrSel );
  1418. }
  1419. else if( pDoc->GetNodeType() == NODE_SERVER )
  1420. {
  1421. CKeyPack *pKeyPack = reinterpret_cast< CKeyPack *>( dCurrSel );
  1422. if( pKeyPack != NULL )
  1423. {
  1424. pServer = pKeyPack->GetServer( );
  1425. }
  1426. }
  1427. else if( pDoc->GetNodeType( ) == NODE_KEYPACK )
  1428. {
  1429. CLicense * pLicense = reinterpret_cast< CLicense * >( dCurrSel );
  1430. pServer = ( pLicense->GetKeyPack() )->GetServer( );
  1431. }
  1432. }
  1433. if( pServer != NULL )
  1434. {
  1435. pMainFrame->RefreshServer( pServer );
  1436. }
  1437. }
  1438. }
  1439. //-----------------------------------------------------------------------------------------
  1440. void CRightList::OnDownloadKeepPack()
  1441. {
  1442. BOOL bRefresh;
  1443. DWORD dwStatus = WizardActionOnServer( WIZACTION_DOWNLOADLKP , &bRefresh );
  1444. DBGMSG( L"LICMGR : CRightList::OnDownloadKeepPack StartWizard returned 0x%x\n" , dwStatus );
  1445. }
  1446. //-----------------------------------------------------------------------------------------
  1447. void CRightList::OnRegisterServer()
  1448. {
  1449. BOOL bRefresh;
  1450. DWORD dwStatus = WizardActionOnServer( WIZACTION_REGISTERLS , &bRefresh );
  1451. DBGMSG( L"LICMGR : CRightList::OnRegisterServer StartWizard returned 0x%x\n" , dwStatus );
  1452. }
  1453. //-----------------------------------------------------------------------------------------
  1454. void CRightList::OnRepeatLastDownload()
  1455. {
  1456. BOOL bRefresh;
  1457. DWORD dwStatus = WizardActionOnServer( WIZACTION_DOWNLOADLASTLKP , &bRefresh );
  1458. DBGMSG( L"LICMGR : CRightList::OnRepeatLastDownload StartWizard returned 0x%x\n" , dwStatus );
  1459. }
  1460. //-----------------------------------------------------------------------------------------
  1461. void CRightList::OnReactivateServer( )
  1462. {
  1463. BOOL bRefresh;
  1464. DWORD dwStatus = WizardActionOnServer( WIZACTION_REREGISTERLS , &bRefresh );
  1465. DBGMSG( L"LICMGR : CRightList::OnReactivateServer StartWizard returned 0x%x\n" , dwStatus );
  1466. }
  1467. //-----------------------------------------------------------------------------------------
  1468. void CRightList::OnDeactivateServer( )
  1469. {
  1470. BOOL bRefresh;
  1471. DWORD dwStatus = WizardActionOnServer( WIZACTION_UNREGISTERLS , &bRefresh );
  1472. DBGMSG( L"LICMGR : CRightList::OnDeactivateServer StartWizard returned 0x%x\n" , dwStatus );
  1473. }
  1474. //-----------------------------------------------------------------------------------------
  1475. void CRightList::OnServerProperties( )
  1476. {
  1477. BOOL bRefresh;
  1478. DWORD dwStatus = WizardActionOnServer( WIZACTION_SHOWPROPERTIES , &bRefresh );
  1479. DBGMSG( L"LICMGR : CRightList::OnServerProperties StartWizard returned 0x%x\n" , dwStatus );
  1480. }
  1481. //-----------------------------------------------------------------------------------------
  1482. void CRightList::OnGeneralHelp( )
  1483. {
  1484. CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
  1485. if( pMainFrame != NULL )
  1486. {
  1487. pMainFrame->OnHelp( );
  1488. }
  1489. }
  1490. //-----------------------------------------------------------------------------------------
  1491. void CRightList::SetActiveServer( CLicServer *pServer )
  1492. {
  1493. CMainFrame *pMainFrame = static_cast< CMainFrame * >( AfxGetMainWnd() );
  1494. if( pServer != NULL )
  1495. {
  1496. DBGMSG( L"LICMGR : CRightList::SetActiveServer %s\n" , (LPCTSTR)pServer->GetName( ) );
  1497. }
  1498. if( pMainFrame != NULL )
  1499. {
  1500. pMainFrame->SetActiveServer( pServer );
  1501. }
  1502. }