//****************************************************************************
// Module: NMSHARE.EXE
// File: CHWND.CPP
// Content:
//
//
// Copyright (c) Microsoft Corporation 1997
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//****************************************************************************
#include "precomp.h"
COBLIST * g_pListApp = (COBLIST *) NULL;
//****************************************************************************
//
// int AddApp(INmSharableApp * pApp)
//
//****************************************************************************
int AddApp(INmSharableApp * pApp)
{
TCHAR sz[MAX_PATH];
wsprintf(sz, TEXT("%08X"), pApp);
pApp->AddRef();
AddNode(pApp, &g_pListApp);
LV_ITEM lvItem;
ClearStruct(&lvItem);
lvItem.iItem = g_pListApp->GetItemCount();
lvItem.mask = LVIF_PARAM | LVIF_TEXT;
lvItem.pszText = sz;
lvItem.cchTextMax = lstrlen(sz);
lvItem.lParam = (LPARAM) pApp;
return ListView_InsertItem(ghwndApp, &lvItem);
}
//****************************************************************************
//
// int ItemFromPApp(INmSharableApp * pApp)
//
//****************************************************************************
int ItemFromPApp(INmSharableApp * pApp)
{
if (NULL == ghwndApp)
return -1;
LV_FINDINFO findInfo;
ClearStruct(&findInfo);
findInfo.flags = LVFI_PARAM;
findInfo.lParam = (LPARAM) pApp;
return ListView_FindItem(ghwndApp, -1, &findInfo);
}
//****************************************************************************
//
// VOID FreeAllApps(void)
//
//****************************************************************************
VOID FreeAllApps(void)
{
if (NULL != g_pListApp)
{
while (!g_pListApp->IsEmpty())
{
INmSharableApp * pApp = (INmSharableApp *) g_pListApp->RemoveHead();
ASSERT(NULL != pApp);
pApp->Release();
}
}
}
//****************************************************************************
//
// VOID UpdateApp(INmSharableApp * pApp)
//
//****************************************************************************
VOID UpdateApp(INmSharableApp * pApp)
{
HRESULT hr;
LPTSTR psz;
BSTR bstr;
HWND hwnd;
int iItem;
NM_SHAPP_STATE uState;
iItem = ItemFromPApp(pApp);
if (-1 == iItem)
{
iItem = AddApp(pApp);
if (-1 == iItem)
return;
}
hr = pApp->GetHwnd(&hwnd);
if (SUCCEEDED(hr))
{
TCHAR sz[MAX_PATH];
wsprintf(sz, TEXT("%08X"), hwnd);
ListView_SetItemText(ghwndApp, iItem, ILV_HWND, sz);
}
hr = pApp->GetState(&uState);
if (SUCCEEDED(hr))
{
ListView_SetItemText(ghwndApp, iItem, ILV_STATUS,
(NM_SHAPP_SHARED == uState) ? TEXT("Shared") : TEXT("Not Shared"));
}
hr = pApp->GetName(&bstr);
if (SUCCEEDED(hr))
{
psz = PszFromBstr(bstr);
SysFreeString(bstr);
ListView_SetItemText(ghwndApp, iItem, ILV_NAME, psz);
FreePlpv(&psz);
}
}
//****************************************************************************
//
// VOID UpdateAppList(void)
//
//****************************************************************************
VOID UpdateAppList(void)
{
// Update all apps
// - enumerate all
// - ensure all are in list
// - check data for each
}
//****************************************************************************
//
// LRESULT MsgNotifyAppList(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
//
//****************************************************************************
LRESULT MsgNotifyAppList(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LV_DISPINFO *pLvdi = (LV_DISPINFO *)lParam;
switch(pLvdi->hdr.code)
{
case NM_DBLCLK:
case NM_RETURN:
{
HRESULT hr;
NM_SHAPP_STATE uState;
int iItem = ListView_GetNextItem(ghwndApp, -1, LVNI_ALL | LVNI_SELECTED);
if (-1 == iItem)
break;
LV_ITEM lvi;
ClearStruct(&lvi);
lvi.iItem = iItem;
lvi.mask = LVIF_PARAM;
if (!ListView_GetItem(ghwndApp, &lvi))
break;
INmSharableApp * pApp = (INmSharableApp *) lvi.lParam;
ASSERT(NULL != pApp);
hr = pApp->GetState(&uState);
if (FAILED(hr))
break;
if (NM_SHAPP_NOT_SHARED == uState)
uState = NM_SHAPP_SHARED;
else
uState = NM_SHAPP_NOT_SHARED;
hr = pApp->SetState(uState);
break;
}
default:
break;
}
return 0;
}