mirror of https://github.com/lianthony/NT4.0
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.
409 lines
8.3 KiB
409 lines
8.3 KiB
/*++
|
|
|
|
Module Name:
|
|
|
|
reslist.cpp
|
|
|
|
Abstract:
|
|
|
|
This is a class that maintains a List View controll
|
|
with a devices resources.
|
|
|
|
Author:
|
|
|
|
Dieter Achtelstetter (A-DACH) 8/28/1995
|
|
|
|
NOTE:
|
|
|
|
|
|
--*/
|
|
|
|
|
|
|
|
//
|
|
//---- Includes
|
|
//
|
|
#define WINVER 0x0400
|
|
|
|
#include <windows.h>
|
|
#include <wingdi.h>
|
|
#include <stdio.h>
|
|
#include <windef.h>
|
|
#include <winnt.h>
|
|
#include <winbase.h>
|
|
#include <winuser.h>
|
|
#include <CPL.H>
|
|
#include <stdlib.h>
|
|
#include <winsvc.h>
|
|
#include <string.h>
|
|
#include <commctrl.h>
|
|
#include "resource.h"
|
|
#include "..\pcmcia\pcminfo\getconf.h"
|
|
#include "reslist.h"
|
|
#include "uni.h"
|
|
|
|
|
|
extern HINSTANCE hinst;
|
|
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:SetResourceList
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
BOOL
|
|
RESOURCELISTC::ChangeSelectedResource(
|
|
VOID)
|
|
{
|
|
return(FALSE);
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:SetResourceList
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PRESOURCE_ITEM
|
|
RESOURCELISTC::GetSelection(
|
|
VOID)
|
|
{
|
|
LV_ITEM LvI;
|
|
|
|
//
|
|
//--- Get selcted Item
|
|
//
|
|
LvI.iItem = ListView_GetNextItem(hListView, -1, LVNI_SELECTED);
|
|
|
|
if ( LvI.iItem != -1 )
|
|
{
|
|
//
|
|
//---- Get LPRAM of selected item
|
|
//
|
|
LvI.mask = LVIF_PARAM;
|
|
LvI.iSubItem = 0;
|
|
|
|
LvI.lParam = NULL;
|
|
|
|
if(ListView_GetItem(hListView, &LvI ))
|
|
{
|
|
//
|
|
// Return Lparam
|
|
//
|
|
return((PRESOURCE_ITEM) LvI.lParam);
|
|
}
|
|
|
|
}
|
|
//
|
|
//--- No item selected
|
|
//
|
|
return(NULL);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:SetResourceList
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
BOOL
|
|
RESOURCELISTC::Notify(
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
LPNMHDR pNmh = (LPNMHDR)lParam;
|
|
|
|
if(wParam == (WPARAM)ListViewID)
|
|
{
|
|
LV_DISPINFO *pLvdi = (LV_DISPINFO*) lParam;
|
|
NM_LISTVIEW *pLvnm = (NM_LISTVIEW*) lParam;
|
|
PRESOURCE_ITEM pRes = (PRESOURCE_ITEM) pLvdi->item.lParam;
|
|
|
|
switch(pNmh->code)
|
|
{
|
|
//
|
|
//--- Handle display stuff
|
|
//
|
|
case LVN_GETDISPINFO:
|
|
|
|
switch(pLvdi->item.iSubItem)
|
|
{
|
|
case 0:
|
|
pLvdi->item.pszText = pRes->LabelString();
|
|
return(TRUE);
|
|
break;
|
|
case 1:
|
|
pLvdi->item.pszText = pRes->ResourceString();
|
|
return(TRUE);
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
//
|
|
//--- Handle Double click of a List View Item
|
|
//
|
|
|
|
case NM_DBLCLK:
|
|
{
|
|
ChangeSelectedResource();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return(FALSE);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:SetResourceList
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
void
|
|
RESOURCELISTC::SetResourceList(VOID)
|
|
{
|
|
HIMAGELIST hSmall,hLarge;
|
|
HICON hIcon;
|
|
int i;
|
|
LV_COLUMN LvC;
|
|
LV_ITEM LvI;
|
|
RECT Rect;
|
|
int ColemWidth;
|
|
int ResCount = (int)ConfigInfo->Count();
|
|
PRESOURCE_ITEM ResItem;
|
|
|
|
|
|
hListView = GetDlgItem(hDlg, ListViewID);
|
|
|
|
|
|
//
|
|
//---- Create the image list
|
|
//
|
|
hLarge = ImageList_Create(
|
|
GetSystemMetrics(SM_CXICON),
|
|
GetSystemMetrics(SM_CYICON),
|
|
TRUE,ResCount,0);
|
|
|
|
|
|
hSmall = ImageList_Create(
|
|
GetSystemMetrics(SM_CXSMICON),
|
|
GetSystemMetrics(SM_CYSMICON),
|
|
TRUE,ResCount,0);
|
|
|
|
hIcon = LoadIcon(hinst,MAKEINTRESOURCE(IDI_res) );
|
|
|
|
for(i=0 ; i<ResCount ; i++)
|
|
{
|
|
if( (ImageList_AddIcon(hLarge,hIcon) == -1) )
|
|
return;
|
|
|
|
if( (ImageList_AddIcon(hSmall,hIcon) == -1) )
|
|
return;
|
|
}
|
|
DeleteObject(hIcon);
|
|
|
|
|
|
ListView_SetImageList(hListView,hLarge,LVSIL_NORMAL);
|
|
ListView_SetImageList(hListView,hSmall,LVSIL_SMALL);
|
|
|
|
//
|
|
//--- Do columns
|
|
//
|
|
GetClientRect(hListView,&Rect);
|
|
ColemWidth = Rect.right / 2;
|
|
|
|
LvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
|
LvC.fmt = LVCFMT_LEFT;
|
|
LvC.cx = ColemWidth-10;
|
|
LvC.pszText = GetString(IDS_ResourceType);
|
|
ListView_InsertColumn(hListView,0,&LvC);
|
|
|
|
LvC.cx = ColemWidth+10;
|
|
LvC.pszText = GetString(IDS_ResourceSetting);
|
|
ListView_InsertColumn(hListView,1,&LvC);
|
|
|
|
|
|
//
|
|
//---- Add items
|
|
//
|
|
LvI.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
|
|
LvI.state = 0;
|
|
LvI.stateMask = 0;
|
|
|
|
|
|
ResItem = ConfigInfo->First();
|
|
|
|
|
|
while(ResItem)
|
|
{
|
|
LvI.iItem = i;
|
|
LvI.iSubItem = 0;
|
|
LvI.pszText = LPSTR_TEXTCALLBACK;
|
|
LvI.cchTextMax = MAX_RESOURCE_INFO_LEN;
|
|
LvI.iImage = 0;
|
|
LvI.lParam = (LPARAM) ResItem;
|
|
ListView_InsertItem(hListView,&LvI);
|
|
|
|
ResItem = ConfigInfo->Next();
|
|
}
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
VOID
|
|
RESOURCELISTC::Set(PCONFIGINFO ConfInfo,HWND hdlg,int ListViewControlID)
|
|
{
|
|
ListViewID = ListViewControlID;
|
|
ConfigInfo = ConfInfo;
|
|
hDlg = hdlg;
|
|
|
|
SetResourceList();
|
|
|
|
}
|
|
|
|
RESOURCELISTC::RESOURCELISTC(VOID)
|
|
{
|
|
}
|
|
|
|
|
|
RESOURCELISTC::RESOURCELISTC(PCONFIGINFO ConfInfo,HWND hdlg,int ListViewControlID)
|
|
{
|
|
|
|
Set(ConfInfo,hdlg,ListViewControlID);
|
|
}
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
RESOURCELISTC::~RESOURCELISTC()
|
|
{
|
|
|
|
}
|
|
#if 0
|
|
//*********************************************************************
|
|
//* FUNCTION:GetResourceCount
|
|
//* This function creates a RESOURCELIST from CONFIGINFO.
|
|
//*
|
|
//*********************************************************************
|
|
int
|
|
RESOURCELISTC::GetResourceList(
|
|
VOID)
|
|
{
|
|
int i;
|
|
PRESOURCE pRes = ResourceList.List;
|
|
PPORT Ports;
|
|
PMEMMORY Memory;
|
|
PDMA Dma;
|
|
ULONG * Irq;
|
|
|
|
|
|
memset(&ResourceList.List,0,sizeof(RESOURCE)+MAX_MEMMORY+MAX_PORTS+1);
|
|
ResourceList.Count = 0;
|
|
|
|
if(ConfigInfo->ValidConfig == FALSE)
|
|
{
|
|
//
|
|
//--- We do not have valid config info
|
|
//
|
|
ResourceList.Count=0;
|
|
return(0);
|
|
}
|
|
|
|
//
|
|
//---- If valid do IRQ resource
|
|
//
|
|
Irq = ConfigInfo->Irq;
|
|
for(i=0 ; i<MAX_IRQ ; i++)
|
|
{
|
|
if(*Irq)
|
|
{
|
|
|
|
pRes->Type = IDS_Irq;
|
|
pRes->TypeString = ResourceList.Irq;
|
|
_snwprintf(pRes->Info,MAX_RESOURCE_INFO_LEN,
|
|
L"%li",*Irq);
|
|
|
|
ResourceList.Count++;
|
|
pRes++;
|
|
Irq++;
|
|
}
|
|
}
|
|
|
|
|
|
//
|
|
//---- If valid do DMA resource
|
|
//
|
|
Dma = ConfigInfo->Dma;
|
|
for(i=0 ; i<MAX_DMA ; i++)
|
|
{
|
|
|
|
if(Dma->Channel)
|
|
{
|
|
|
|
pRes->Type = IDS_DMA;
|
|
pRes->TypeString = ResourceList.DMA;
|
|
_snwprintf(pRes->Info,MAX_RESOURCE_INFO_LEN,
|
|
L"%li",Dma->Channel);
|
|
|
|
ResourceList.Count++;
|
|
pRes++;
|
|
Dma++;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//
|
|
//---- Till valid do Port resources
|
|
//
|
|
Ports = ConfigInfo->Ports;
|
|
for(i=0 ; i<MAX_PORTS ; i++)
|
|
{
|
|
if(Ports->Port)
|
|
{
|
|
pRes->Type = IDS_Port;
|
|
pRes->TypeString = ResourceList.Port;
|
|
_snwprintf(pRes->Info,MAX_RESOURCE_INFO_LEN,
|
|
L"%X-%X",Ports->Port,Ports->Port + Ports->PortLen - 1);
|
|
|
|
ResourceList.Count++;
|
|
pRes++;
|
|
Ports++;
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
|
|
//
|
|
//---- Till Valid do Memory range resources
|
|
//
|
|
Memory = ConfigInfo->Memory;
|
|
for(i=0 ; i<MAX_MEMMORY ; i++)
|
|
{
|
|
if(Memory->Address)
|
|
{
|
|
pRes->Type = IDS_Memory;
|
|
pRes->TypeString = ResourceList.Memory;
|
|
_snwprintf(pRes->Info,MAX_RESOURCE_INFO_LEN,
|
|
L"%X-%X",Memory->Address,Memory->Address + Memory->Length - 1);
|
|
|
|
ResourceList.Count++;
|
|
pRes++;
|
|
Memory++;
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
|
|
|
|
return(ResourceList.Count);
|
|
}
|
|
|
|
#endif
|
|
|
|
|