예제 #1
0
void TreeList_Update(HWND hwnd)
{
	TTreeList_Data *data = (TTreeList_Data *)sttTreeList_GeWindowData(hwnd);
	HTREELISTITEM hItem = data->root;
	int sortIndex = 0;

	SendMessage(hwnd, WM_SETREDRAW, FALSE, 0);
	if (data->sortMode)
		TreeList_RecursiveApply(hItem, sttTreeList_SortItems, (LPARAM)data->sortMode);
	TreeList_RecursiveApply(hItem, sttTreeList_ResetIndex, (LPARAM)&sortIndex);
	if (data->filter)
		TreeList_RecursiveApply(hItem, sttTreeList_FilterItems, (LPARAM)data->filter);
	for (int i = ListView_GetItemCount(hwnd); i--;) {
		LVITEM lvi = {0};
		lvi.mask = LVIF_PARAM;
		lvi.iItem = i;
		lvi.iSubItem = 0;
		ListView_GetItem(hwnd, &lvi);

		HTREELISTITEM ptli = (HTREELISTITEM)lvi.lParam;
		if ((ptli->flags & TLIF_VISIBLE) && (!data->filter || (ptli->flags & TLIF_FILTERED))) {
			ptli->flags |= TLIF_HASITEM;
			if (ptli->flags & TLIF_MODIFIED) {
				lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE | LVIF_TEXT;
				lvi.iItem = i;
				lvi.iSubItem = 0;
				lvi.pszText = ptli->text[0];
				lvi.stateMask = LVIS_OVERLAYMASK|LVIS_STATEIMAGEMASK;
				lvi.iImage = ptli->iIcon;
				if (data->mode == TLM_TREE)
					lvi.state =
						INDEXTOSTATEIMAGEMASK(
						((ptli->subItems.getCount() == 0) && !(ptli->flags & TLIF_FAKEPARENT)) ? 0 :
						(ptli->flags & TLIF_EXPANDED) ? 1 : 2) |
						INDEXTOOVERLAYMASK(ptli->iOverlay);
				else
					lvi.state =
						INDEXTOSTATEIMAGEMASK(
						((ptli->subItems.getCount() == 0) && !(ptli->flags & TLIF_FAKEPARENT)) ? 0 : 3) |
						INDEXTOOVERLAYMASK(ptli->iOverlay);

				ListView_SetItem(hwnd, &lvi);
				for (int j = 1; j < ptli->text.getCount(); ++j)
					ListView_SetItemText(hwnd, i, j, ptli->text[j]);
			}
		}
		else ListView_DeleteItem(hwnd, i);
	}
	if (data->mode == TLM_TREE)
		TreeList_RecursiveApply(hItem, sttTreeList_CreateItems, (LPARAM)hwnd);
	else {
		for (int i = data->hItemSelected->subItems.getCount(); i--;)
			sttTreeList_CreateItems_List(data->hItemSelected->subItems[i], (LPARAM)hwnd);
		for (HTREELISTITEM hItem = data->hItemSelected; !(hItem->flags & TLIF_ROOT); hItem = hItem->parent)
			sttTreeList_CreateItems_List(hItem, (LPARAM)hwnd);
	}
	ListView_SortItems(hwnd, sttTreeList_SortFunc, 0);
	SendMessage(hwnd, WM_SETREDRAW, TRUE, 0);
	UpdateWindow(hwnd);
}
예제 #2
0
BOOL CLiveItem::Update(CListCtrl* pCtrl, int nItem, int nColumns)
{
	ASSERT_VALID( this );
	ASSERT_VALID( pCtrl );

	BOOL bModified = FALSE;

	LV_ITEM pMainItem = {
		LVIF_PARAM | LVIF_IMAGE | LVIF_STATE,
		nItem,
		0,
		0,
		LVIS_OVERLAYMASK|LVIS_STATEIMAGEMASK
	};

	if ( ! pCtrl->GetItem( &pMainItem ) || pMainItem.lParam != (LPARAM)m_nParam )
		return FALSE;

	if ( ( pMainItem.state & (LVIS_OVERLAYMASK|LVIS_STATEIMAGEMASK) ) != ( INDEXTOOVERLAYMASK( m_nMaskOverlay ) | INDEXTOSTATEIMAGEMASK( m_nMaskState ) ) )
	{
		pMainItem.state		= INDEXTOOVERLAYMASK( m_nMaskOverlay ) | INDEXTOSTATEIMAGEMASK( m_nMaskState );
		pMainItem.stateMask	= LVIS_OVERLAYMASK | LVIS_STATEIMAGEMASK;
		bModified = TRUE;
	}

	if ( bModified )
		VERIFY( pCtrl->SetItem( &pMainItem ) );

	CString buf;
	for ( int i = 0 ; i < nColumns ; ++i )
	{
		LV_ITEM pItem = { LVIF_IMAGE | LVIF_TEXT, nItem, i, 0, 0, buf.GetBuffer( 1024 ), 1024 };
		BOOL bResult = pCtrl->GetItem( &pItem );
		buf.ReleaseBuffer();
		if ( ! bResult )
			return FALSE;

		pItem.mask = 0;
		if ( ! pItem.pszText || m_pColumn[ pItem.iSubItem ] != pItem.pszText )
		{
			pItem.mask |= LVIF_TEXT;
			pItem.pszText = (LPTSTR)(LPCTSTR)m_pColumn[ pItem.iSubItem ];
		}

		if ( m_nImage[ pItem.iSubItem ] >= 0 &&
			 m_nImage[ pItem.iSubItem ] != pItem.iImage )
		{
			pItem.mask |= LVIF_IMAGE;
			pItem.iImage = m_nImage[ pItem.iSubItem ];
		}

		if ( pItem.mask )
		{
			VERIFY( pCtrl->SetItem( &pItem ) );
			bModified = TRUE;
		}
	}

	return bModified;
}
예제 #3
0
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
int CGroupList::GetCheck(HTREEITEM hItem)
{
    UINT uState = (GetItemState(hItem, TVIS_OVERLAYMASK) & TVIS_OVERLAYMASK);
    if (uState == INDEXTOOVERLAYMASK(1))
    {
        return 1;
    }
    else if (uState == INDEXTOOVERLAYMASK(0))
    {
        return 0;
    }

    return -1;
}
예제 #4
0
HTREEITEM
CDeviceView::InsertIntoTreeView(
    _In_opt_ HTREEITEM hParent,
    _In_ CNode *Node
    )
{
    LPWSTR lpLabel;
    lpLabel = Node->GetDisplayName();

    TV_ITEMW tvi;
    TV_INSERTSTRUCT tvins;
    ZeroMemory(&tvi, sizeof(tvi));
    ZeroMemory(&tvins, sizeof(tvins));

    tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
    tvi.pszText = lpLabel;
    tvi.cchTextMax = wcslen(lpLabel);
    tvi.lParam = (LPARAM)Node;
    tvi.iImage = Node->GetClassImage();
    tvi.iSelectedImage = Node->GetClassImage();

    // try to cast it to a device node. This will only suceed if it's the correct type
    CDeviceNode *DeviceNode = dynamic_cast<CDeviceNode *>(Node);
    if (DeviceNode && DeviceNode->GetOverlayImage())
    {
        tvi.mask |= TVIF_STATE;
        tvi.stateMask = TVIS_OVERLAYMASK;
        tvi.state = INDEXTOOVERLAYMASK(DeviceNode->GetOverlayImage());
    }

    tvins.item = tvi;
    tvins.hParent = hParent;

    return TreeView_InsertItem(m_hTreeView, &tvins);
}
예제 #5
0
 HTREEITEM
CDeviceView::InsertIntoTreeView(
    _In_ HTREEITEM hParent,
    _In_z_ LPWSTR lpLabel,
    _In_ LPARAM lParam,
    _In_ INT DevImage,
    _In_ UINT OverlayImage
    )
{
    TV_ITEMW tvi;
    TV_INSERTSTRUCT tvins;

    ZeroMemory(&tvi, sizeof(tvi));
    ZeroMemory(&tvins, sizeof(tvins));

    tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
    tvi.pszText = lpLabel;
    tvi.cchTextMax = wcslen(lpLabel);
    tvi.lParam = lParam;
    tvi.iImage = DevImage;
    tvi.iSelectedImage = DevImage;

    if (OverlayImage != 0)
    {
        tvi.mask |= TVIF_STATE;
        tvi.stateMask = TVIS_OVERLAYMASK;
        tvi.state = INDEXTOOVERLAYMASK(OverlayImage);
    }

    tvins.item = tvi;
    tvins.hParent = hParent;

    return TreeView_InsertItem(m_hTreeView, &tvins);
}
예제 #6
0
// called by CWList::populateListCtrl
//  This default implementation just adds one row for the entry
int CWListEntry::addYourRowsToListCtrl(CListCtrl &clc,  int iStartingRow)
{
	LV_ITEM lvi;
	lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
	lvi.state = 0;
	lvi.stateMask = 0;
	lvi.pszText = LPSTR_TEXTCALLBACK;   // app. maintains text
	lvi.iImage = getIconIndex();

	lvi.iSubItem = 0;
	lvi.iItem = iStartingRow;
	lvi.lParam = (LPARAM) this;
	if(!m_bEnabled)
	{
		lvi.state =  INDEXTOOVERLAYMASK(1); // draw the 'not' icon over it
		lvi.stateMask = LVIS_OVERLAYMASK;
	}
	else
	{
		lvi.state = 0;
		lvi.stateMask =  NULL;
	}
	ASSERTX(-1 != clc.InsertItem(&lvi));
	return 1+ iStartingRow;	// the next row that will be inserted
}
예제 #7
0
파일: enumdevices.c 프로젝트: RPG-7/reactos
static HTREEITEM
InsertIntoTreeView(HWND hTreeView,
                   HTREEITEM hRoot,
                   LPTSTR lpLabel,
                   LPTSTR DeviceID,
                   INT DevImage,
                   UINT OverlayImage)
{
    TV_ITEM tvi;
    TV_INSERTSTRUCT tvins;

    ZeroMemory(&tvi, sizeof(tvi));
    ZeroMemory(&tvins, sizeof(tvins));

    tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
    tvi.pszText = lpLabel;
    tvi.cchTextMax = lstrlen(lpLabel);
    tvi.lParam = (LPARAM)DeviceID;
    tvi.iImage = DevImage;
    tvi.iSelectedImage = DevImage;

    if (OverlayImage != 0)
    {
        tvi.mask |= TVIF_STATE;
        tvi.stateMask = TVIS_OVERLAYMASK;
        tvi.state = INDEXTOOVERLAYMASK(OverlayImage);
    }

    tvins.item = tvi;
    tvins.hParent = hRoot;

    return TreeView_InsertItem(hTreeView, &tvins);
}
예제 #8
0
HICON 
CMainFrame::_CreateTaskbarIcon(bool NormalOrFailure /* = true */)
{
	return m_taskbarImageList.GetIcon(
		m_nTaskbarNormal, 
		NormalOrFailure ? ILD_NORMAL : INDEXTOOVERLAYMASK(1));
}
예제 #9
0
int CLiveItem::Add(CListCtrl* pCtrl, int nItem, int nColumns)
{
	ASSERT_VALID( this );
	ASSERT_VALID( pCtrl );

	LV_ITEM pItem = {};
	pItem.mask		= LVIF_PARAM|LVIF_TEXT|LVIF_STATE;
	pItem.iItem		= nItem >= 0 ? nItem : pCtrl->GetItemCount();
	if ( m_nImage[ 0 ] >= 0 )
	{
		pItem.mask |= LVIF_IMAGE;
		pItem.iImage = m_nImage[ 0 ];
	}
	pItem.lParam	= (LPARAM)m_nParam;
	pItem.state		= INDEXTOOVERLAYMASK( m_nMaskOverlay ) | INDEXTOSTATEIMAGEMASK( m_nMaskState );
	pItem.stateMask	= LVIS_OVERLAYMASK | LVIS_STATEIMAGEMASK;
	pItem.pszText	= (LPTSTR)(LPCTSTR)m_pColumn[0];
	pItem.iItem		= pCtrl->InsertItem( &pItem );
	if ( pItem.iItem != -1 )
	{
		for ( pItem.iSubItem = 1 ; pItem.iSubItem < nColumns ; pItem.iSubItem++ )
		{
			pItem.mask = LVIF_TEXT;
			pItem.pszText = (LPTSTR)(LPCTSTR)m_pColumn[ pItem.iSubItem ];
			if ( m_nImage[ pItem.iSubItem ] >= 0 )
			{
				pItem.mask |= LVIF_IMAGE;
				pItem.iImage = m_nImage[ pItem.iSubItem ];
			}
			VERIFY( pCtrl->SetItem( &pItem ) );
		}
	}

	return pItem.iItem;
}
예제 #10
0
//
/// Draws an image onto a target DC at a given coordinate and with a given style.
//
bool
TImageList::Draw(int index, TDC& dc, int x, int y, uint style, int overlay)
{
  // Frank Rast: ILD_OVERLAYMASK must not be used here
  if (overlay)
    style |= INDEXTOOVERLAYMASK(overlay);
  return TCommCtrl::Dll()->ImageList_Draw(Handle, index, dc, x, y, style);
}
예제 #11
0
파일: main.cpp 프로젝트: kmdtukl/miranda-ng
void LoadModuleIcons(MODULEINFO *mi)
{
	HIMAGELIST hList = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 0);

	int overlayIcon = ImageList_AddIcon(hList, GetCachedIcon("chat_overlay"));
	ImageList_SetOverlayImage(hList, overlayIcon, 1);

	int index = ImageList_AddIcon(hList, Skin_LoadProtoIcon(mi->pszModule, ID_STATUS_ONLINE));
	mi->hOnlineIcon = ImageList_GetIcon(hList, index, ILD_TRANSPARENT);
	mi->hOnlineTalkIcon = ImageList_GetIcon(hList, index, ILD_TRANSPARENT | INDEXTOOVERLAYMASK(1));

	index = ImageList_AddIcon(hList, Skin_LoadProtoIcon(mi->pszModule, ID_STATUS_OFFLINE));
	mi->hOfflineIcon = ImageList_GetIcon(hList, index, ILD_TRANSPARENT);
	mi->hOfflineTalkIcon = ImageList_GetIcon(hList, index, ILD_TRANSPARENT | INDEXTOOVERLAYMASK(1));

	ImageList_Destroy(hList);
}
예제 #12
0
int ShellBrowserChild::InsertSubitems(HTREEITEM hParentItem, ShellDirectory* dir)
{
	CONTEXT("ShellBrowserChild::InsertSubitems()");

	WaitCursor wait;

	int cnt = 0;

	SendMessage(_left_hwnd, WM_SETREDRAW, FALSE, 0);

	try {
		dir->smart_scan();
	} catch(COMException& e) {
		HandleException(e, g_Globals._hMainWnd);
	}

	 // remove old children items
	for(HTREEITEM hchild,hnext=TreeView_GetChild(_left_hwnd, hParentItem); hchild=hnext; ) {
		hnext = TreeView_GetNextSibling(_left_hwnd, hchild);
		TreeView_DeleteItem(_left_hwnd, hchild);
	}

	TV_ITEM tvItem;
	TV_INSERTSTRUCT tvInsert;

	for(ShellEntry*entry=dir->_down; entry; entry=entry->_next) {
#ifndef _LEFT_FILES
		if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
#endif
		{
			ZeroMemory(&tvItem, sizeof(tvItem));

			tvItem.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN;
			tvItem.pszText = LPSTR_TEXTCALLBACK;
			tvItem.iImage = tvItem.iSelectedImage = I_IMAGECALLBACK;
			tvItem.lParam = (LPARAM)entry;
			tvItem.cChildren = entry->_shell_attribs & SFGAO_HASSUBFOLDER? 1: 0;

			if (entry->_shell_attribs & SFGAO_SHARE) {
				tvItem.mask |= TVIF_STATE;
				tvItem.stateMask |= TVIS_OVERLAYMASK;
				tvItem.state |= INDEXTOOVERLAYMASK(1);
			}

			tvInsert.item = tvItem;
			tvInsert.hInsertAfter = TVI_LAST;
			tvInsert.hParent = hParentItem;

			TreeView_InsertItem(_left_hwnd, &tvInsert);

			++cnt;
		}
	}

	SendMessage(_left_hwnd, WM_SETREDRAW, TRUE, 0);

	return cnt;
}
예제 #13
0
//-----------------------------------------------------------------------------
// Purpose: Sets the check status for the given group.
// Input  : pVisGroup -
//			nCheckState - 0=not checked, 1=checked, -1=gray check (undefined)
//-----------------------------------------------------------------------------
void CGroupList::SetCheck(CVisGroup *pVisGroup, int nCheckState)
{
    HTREEITEM hItem = FindVisGroupItem(pVisGroup);
    if (hItem)
    {
        UINT uState = INDEXTOOVERLAYMASK(0);
        if (nCheckState == 1)
        {
            uState = INDEXTOOVERLAYMASK(1);
        }
        else if (nCheckState != 0)
        {
            uState = INDEXTOOVERLAYMASK(2);
        }

        SetItemState(hItem, uState, TVIS_OVERLAYMASK);
    }
}
예제 #14
0
void CRowListView::CheckItem(int nNewCheckedItem)
{
	CListCtrl& ListCtrl = GetListCtrl();

// reset if there is checked item

	if (m_nCheckedItem != -1)
	{
		if (m_bStateIcons)
		{
			ListCtrl.SetItemState(m_nCheckedItem,
				INDEXTOSTATEIMAGEMASK(1), LVIS_STATEIMAGEMASK);
		}
		else
		{
			ListCtrl.SetItemState(m_nCheckedItem,
				INDEXTOSTATEIMAGEMASK(1),
				LVIS_STATEIMAGEMASK | LVIS_OVERLAYMASK);
		}

		::DestroyIcon(m_hSmallIcon);
		::DestroyIcon(m_hLargeIcon);
	}

// check new item and set its icon as the app icon

	CWnd* pMainWnd = AfxGetMainWnd();

	if (m_nCheckedItem == nNewCheckedItem)
	{
		m_nCheckedItem = -1;
		pMainWnd->SetIcon(NULL, FALSE);
		pMainWnd->SetIcon(NULL, TRUE);
	}
	else if ((m_nCheckedItem = nNewCheckedItem) != -1)
	{
		if (m_bStateIcons)
		{
			ListCtrl.SetItemState(m_nCheckedItem,
				INDEXTOSTATEIMAGEMASK(2), LVIS_STATEIMAGEMASK);
		}
		else
		{
			ListCtrl.SetItemState(m_nCheckedItem,
				INDEXTOSTATEIMAGEMASK(2) | INDEXTOOVERLAYMASK(1),
				LVIS_STATEIMAGEMASK | LVIS_OVERLAYMASK);
		}

		m_hSmallIcon =
			ListCtrl.GetImageList(LVSIL_SMALL)->ExtractIcon(nNewCheckedItem);
		pMainWnd->SetIcon(m_hSmallIcon,FALSE);
		m_hLargeIcon =
			ListCtrl.GetImageList(LVSIL_NORMAL)->ExtractIcon(nNewCheckedItem);
		pMainWnd->SetIcon(m_hLargeIcon,TRUE);
	}
}
예제 #15
0
void CSharedDirsTreeCtrl::FileSystemTreeSetShareState(CDirectoryItem* pDir, bool bShared, bool bSubDirectories){
	if (m_bUseIcons && pDir->m_htItem != NULL)
		SetItemState(pDir->m_htItem,bShared ? INDEXTOOVERLAYMASK(1) : 0, TVIS_OVERLAYMASK);
	if (bSubDirectories){
		POSITION pos = pDir->liSubDirectories.GetHeadPosition();
		while (pos != NULL){
			FileSystemTreeSetShareState(pDir->liSubDirectories.GetNext(pos), bShared, true);
		}
	}
}
예제 #16
0
void FolderTree::checkRemovedDirs(const tstring& aParentPath, HTREEITEM hParent) {
	string parentPath = Text::fromT(aParentPath);
	for(auto& sd: sp->getCurItems()) {
		if (sd->found || !sd->isCurItem())
			continue;

		auto dir = Util::getParentDir(sd->dir->path);
		if (dir == parentPath) {
			//this should have been inserted
			FolderTreeItemInfo* pItem = new FolderTreeItemInfo;
			pItem->m_sFQPath = Text::toT(sd->dir->path);
			pItem->m_sRelativePath = Text::toT(Util::getLastDir(sd->dir->path));
			pItem->m_removed = true;

			tstring sLabel;

			//Correct the label if need be
			if(IsDrive(pItem->m_sFQPath) && m_bShowDriveLabels)
				sLabel = GetDriveLabel(pItem->m_sFQPath);
			else
				sLabel = GetCorrectedLabel(pItem);

			sLabel = _T("REMOVED: ") + sLabel;

			//Add the actual item
			TV_INSERTSTRUCT tvis;
			memzero(&tvis, sizeof(TV_INSERTSTRUCT));
			tvis.hParent = hParent;
			tvis.hInsertAfter = TVI_FIRST;
			tvis.item.mask = TVIF_CHILDREN | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_PARAM;
			//tvis.item.iImage = 7;
			//tvis.item.iSelectedImage = 7;
			tvis.item.iImage = 1;
			tvis.item.iSelectedImage = 1;

			tvis.item.lParam = (LPARAM) pItem;
			tvis.item.pszText = (LPWSTR)sLabel.c_str();
			tvis.item.cChildren = false;
	
			tvis.item.mask |= TVIF_STATE;
			tvis.item.stateMask |= TVIS_OVERLAYMASK;
			tvis.item.state = TVIS_BOLD | INDEXTOOVERLAYMASK(1); //1 is the index for the shared overlay image
			tvis.item.state |= TVIS_BOLD;

			//tvis.item.state = TVIS_BOLD;
			//tvis.item.stateMask = TVIS_BOLD;

			HTREEITEM hItem = InsertItem(&tvis);
			//SetItemImage(hItem, MAKEINTRESOURCE(IDI_ERROR), MAKEINTRESOURCE(IDI_ERROR));
			SetChecked(hItem, true);
			SetItemState(hItem, TVIS_BOLD, TVIS_BOLD);
		}
	}
}
예제 #17
0
void CRepositoryBrowser::FillListCtrlForShadowTree(CShadowFilesTree* pTree)
{
	for (TShadowFilesTreeMap::iterator itShadowTree = pTree->m_ShadowTree.begin(); itShadowTree != pTree->m_ShadowTree.end(); ++itShadowTree)
	{
		int icon = m_nIconFolder;
		if (!(*itShadowTree).second.m_bFolder && !(*itShadowTree).second.m_bSubmodule)
		{
			icon = SYS_IMAGE_LIST().GetFileIconIndex((*itShadowTree).second.m_sName);
		}

		int indexItem = m_RepoList.InsertItem(m_RepoList.GetItemCount(), (*itShadowTree).second.m_sName, icon);

		if ((*itShadowTree).second.m_bSubmodule)
		{
			m_RepoList.SetItemState(indexItem, INDEXTOOVERLAYMASK(OVERLAY_EXTERNAL), LVIS_OVERLAYMASK);
		}
		if ((*itShadowTree).second.m_bExecutable)
			m_RepoList.SetItemState(indexItem, INDEXTOOVERLAYMASK(OVERLAY_EXECUTABLE), LVIS_OVERLAYMASK);
		if ((*itShadowTree).second.m_bSymlink)
			m_RepoList.SetItemState(indexItem, INDEXTOOVERLAYMASK(OVERLAY_SYMLINK), LVIS_OVERLAYMASK);
		m_RepoList.SetItemData(indexItem, (DWORD_PTR)&(*itShadowTree).second);
		if (!(*itShadowTree).second.m_bFolder && !(*itShadowTree).second.m_bSubmodule)
		{
			CString temp;

			temp = CPathUtils::GetFileExtFromPath((*itShadowTree).second.m_sName);
			m_RepoList.SetItemText(indexItem, eCol_Extension, temp);

			StrFormatByteSize64((*itShadowTree).second.m_iSize, temp.GetBuffer(20), 20);
			temp.ReleaseBuffer();
			m_RepoList.SetItemText(indexItem, eCol_FileSize, temp);
		}
	}

	CRepoListCompareFunc compareFunc(&m_RepoList, m_currSortCol, m_currSortDesc);
	m_RepoList.SortItemsEx(&CRepoListCompareFunc::StaticCompare, (DWORD_PTR)&compareFunc);

	SetSortArrowA(&m_RepoList, m_currSortCol, !m_currSortDesc);

	UpdateInfoLabel();
}
예제 #18
0
//
/// Extended version of draw that takes a foreground color and background color.
//
bool
TImageList::Draw(int index, TDC& dc, int x, int y, int dx, int dy,
                 const TColor& bgClr, const TColor& fgClr, uint style,
                 int overlay)
{
  // Frank Rast: ILD_OVERLAYMASK must not be used here
  if (overlay)
    style |= INDEXTOOVERLAYMASK(overlay);
  COLORREF bgCr = (bgClr == TColor::None) ? (COLORREF)CLR_NONE : (COLORREF)bgClr;
  COLORREF fgCr = (fgClr == TColor::None) ? (COLORREF)CLR_NONE : (COLORREF)fgClr;

  return TCommCtrl::Dll()->ImageList_DrawEx(Handle, index, dc, x, y, dx, dy, bgCr, fgCr, style);
}
예제 #19
0
void CSetOverlayIcons::AddFileTypeGroup(CString sFileType, bool bSmallIcons)
{
	UINT flags = SHGFI_ICON | SHGFI_USEFILEATTRIBUTES;
	if (bSmallIcons)
		flags |= SHGFI_SMALLICON;
	else
		flags |= SHGFI_LARGEICON;
	SHFILEINFO sfi;
	SecureZeroMemory(&sfi, sizeof sfi);

	SHGetFileInfo(
		sFileType,
		FILE_ATTRIBUTE_NORMAL,
		&sfi, sizeof sfi,
		flags);

	int imageindex = 0;
	if (bSmallIcons)
		imageindex = m_ImageList.Add(sfi.hIcon);
	else
		imageindex = m_ImageListBig.Add(sfi.hIcon);

	DestroyIcon(sfi.hIcon);
	int index = 0;
	index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sNormal+sFileType, imageindex);
	m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(1), TVIS_OVERLAYMASK);
	index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sModified+sFileType, imageindex);
	m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(2), TVIS_OVERLAYMASK);
	index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sConflicted+sFileType, imageindex);
	m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(3), TVIS_OVERLAYMASK);
	index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sReadOnly+sFileType, imageindex);
	m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(4), TVIS_OVERLAYMASK);
	index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sDeleted+sFileType, imageindex);
	m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(5), TVIS_OVERLAYMASK);
	index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sLocked+sFileType, imageindex);
	m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(6), TVIS_OVERLAYMASK);
	index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sAdded+sFileType, imageindex);
	m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(7), TVIS_OVERLAYMASK);
	index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sIgnored+sFileType, imageindex);
	m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(8), TVIS_OVERLAYMASK);
	index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sUnversioned+sFileType, imageindex);
	m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(9), TVIS_OVERLAYMASK);
}
예제 #20
0
HTREEITEM FolderTree::InsertFileItem(HTREEITEM hParent, FolderTreeItemInfo *pItem, bool bShared, int nIcon, int nSelIcon, bool bCheckForChildren)
{
	tstring sLabel;

	//Correct the label if need be
	if(IsDrive(pItem->m_sFQPath) && m_bShowDriveLabels)
		sLabel = GetDriveLabel(pItem->m_sFQPath);
	else
		sLabel = GetCorrectedLabel(pItem);

	//Add the actual item
	TV_INSERTSTRUCT tvis;
	memzero(&tvis, sizeof(TV_INSERTSTRUCT));
	tvis.hParent = hParent;
	tvis.hInsertAfter = TVI_LAST;
	tvis.item.mask = TVIF_CHILDREN | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_PARAM;
	tvis.item.iImage = nIcon;
	tvis.item.iSelectedImage = nSelIcon;

	tvis.item.lParam = (LPARAM) pItem;
	tvis.item.pszText = (LPWSTR)sLabel.c_str();
	if (bCheckForChildren)
		tvis.item.cChildren = HasGotSubEntries(pItem->m_sFQPath);
	else
		tvis.item.cChildren = true;

	if(bShared)
	{
		tvis.item.mask |= TVIF_STATE;
		tvis.item.stateMask |= TVIS_OVERLAYMASK;
		tvis.item.state |= INDEXTOOVERLAYMASK(1); //1 is the index for the shared overlay image
	}

	HTREEITEM hItem = InsertItem(&tvis);
	
	bool bChecked = false;
	if (!pItem->m_sFQPath.empty()) {
		string path = Text::fromT(pItem->m_sFQPath);
		if( path[ path.length() -1 ] != PATH_SEPARATOR )
			path += PATH_SEPARATOR;

		bChecked = sp->shareFolder(path);
		SetChecked(hItem, bChecked);
	}

	if(!bChecked)
		SetHasSharedChildren(hItem);

	return hItem;
}
예제 #21
0
void CWListView::OnBookmarkClear()
{

	int nCurItem, nIndexOverlay;
	nCurItem=getFirstSelectedRow();

	if( m_nBookmarkCount>0 )
	{

		for( int i=0; i<m_listCtrl.GetItemCount(); i++ )
		{
			UINT nStateFlag=m_listCtrl.GetItemState( i, LVIS_OVERLAYMASK );
			BOOL bChange=FALSE;

			switch( nStateFlag )
			{
			case 512:
				nIndexOverlay=0;
				m_nBookmarkCount--;
				bChange=TRUE;
				break;
			case 768:
				nIndexOverlay=1;
				m_nBookmarkCount--;
				bChange=TRUE;
				break;
			}

			if(bChange)
				m_listCtrl.SetItemState(i,INDEXTOOVERLAYMASK(nIndexOverlay),
									  LVIS_OVERLAYMASK );


		}

//		redrawWindow();
		RedrawWindow( NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE );


		//setListModified( TRUE );	// parce que les signets sont enregistrés
									// dans le fichier | commentaire {{01}}
									// 1er chiffre

	}
}
예제 #22
0
void CMyTreeView::EnumObjects(HTREEITEM hParentItem, CShellFolder& cParentFolder, Cpidl& cpidlParent)
{
    CEnumIDList cEnum;

    if (SUCCEEDED(cParentFolder.EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_INCLUDEHIDDEN, cEnum))) {
        ULONG ulFetched = 1;
        Cpidl cpidlRel;

        //enumerate the item's PIDLs
        while (S_OK == (cEnum.Next(1, cpidlRel, ulFetched)) && ulFetched) {
            TVITEM         tvItem = {0};
            TVINSERTSTRUCT tvInsert = {0};
            ULONG          ulAttribs;
            //fill in the TV_ITEM structure for this item
            tvItem.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN;
            //Store a pointer to the TreeItemData in the lParam and m_pItems
            TreeItemData* pItem = new TreeItemData(cpidlParent, cpidlRel, cParentFolder);
            tvItem.lParam = (LPARAM)pItem;
            m_pItems.push_back(pItem);
            //text and images are done on a callback basis
            tvItem.pszText = LPSTR_TEXTCALLBACK;
            tvItem.iImage = tvItem.iSelectedImage = I_IMAGECALLBACK;
            //determine if the item has children or shared
            ulAttribs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER | SFGAO_SHARE;
            cParentFolder.GetAttributesOf(1, cpidlRel, ulAttribs);
            tvItem.cChildren = (ulAttribs & SFGAO_HASSUBFOLDER);

            //determine if the item is shared
            if (ulAttribs & SFGAO_SHARE) {
                tvItem.mask |= TVIF_STATE;
                tvItem.stateMask |= TVIS_OVERLAYMASK;
                tvItem.state |= INDEXTOOVERLAYMASK(1); //1 is the index for the shared overlay image
            }

            //fill in the TV_INSERTSTRUCT structure for this item
            tvInsert.item = tvItem;
            tvInsert.hInsertAfter = TVI_LAST;
            tvInsert.hParent = hParentItem;
            InsertItem(tvInsert);
            ulFetched = 0;
        }
    }
}
void CRasterResourceListCtrl::_PrepareLVITEM(LVITEM *pItem)
{
    __super::_PrepareLVITEM(pItem);

    // Say that we want to be called back for images.
    pItem->mask |= LVIF_IMAGE;
    pItem->iImage = I_IMAGECALLBACK;

    const ResourceBlob *pData = (const ResourceBlob*)pItem->lParam;
    if (pData)
    {
        // Add an overlay that indicates it is not the most recent.
        if (!theApp._resourceRecency.IsResourceMostRecent(pData))
        {
            pItem->mask |= LVIF_STATE;
            pItem->state = INDEXTOOVERLAYMASK(OVERLAYINDEX_UNUSED);
            pItem->stateMask = LVIS_OVERLAYMASK;
        }
    }
}
예제 #24
0
static void sttTreeList_CreateItems_List(HTREELISTITEM hItem, LPARAM data)
{
	TTreeList_Data *listData = (TTreeList_Data *)sttTreeList_GeWindowData((HWND)data);
	if ((!listData->filter || (hItem->flags & TLIF_FILTERED)) && !(hItem->flags & TLIF_HASITEM) && !(hItem->flags & TLIF_ROOT)) {
		LVITEM lvi = {0};
		lvi.mask = LVIF_INDENT | LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT | LVIF_STATE;
		lvi.iIndent = hItem->indent;
		lvi.lParam = (LPARAM)hItem;
		lvi.pszText = hItem->text[0];
		lvi.stateMask = LVIS_OVERLAYMASK|LVIS_STATEIMAGEMASK;
		lvi.iImage = hItem->iIcon;
		lvi.state =
			INDEXTOSTATEIMAGEMASK(
				((hItem->subItems.getCount() == 0) && !(hItem->flags & TLIF_FAKEPARENT)) ? 0 : 3) |
			INDEXTOOVERLAYMASK(hItem->iOverlay);

		int idx = ListView_InsertItem((HWND)data, &lvi);
		for (int i = 1; i < hItem->text.getCount(); i++)
			ListView_SetItemText((HWND)data, idx, i, hItem->text[i]);
}	}
예제 #25
0
파일: MyListCtrl.cpp 프로젝트: bblr001/MVS
void CMyListCtrl::CheckItem(int nNewCheckedItem)
{
// reset if there is checked item

	if (m_nCheckedItem != -1)
	{
		if (m_bStateIcons)
		{
			this->SetItemState(m_nCheckedItem,
				INDEXTOSTATEIMAGEMASK(1), LVIS_STATEIMAGEMASK);
		}
		else
		{
			this->SetItemState(m_nCheckedItem,
				INDEXTOSTATEIMAGEMASK(1),
				LVIS_STATEIMAGEMASK | LVIS_OVERLAYMASK);
		}
	}

	if (m_nCheckedItem == nNewCheckedItem)
	{
		m_nCheckedItem = -1;
	}
	else if ((m_nCheckedItem = nNewCheckedItem) != -1)
	{
		if (m_bStateIcons)
		{
			this->SetItemState(m_nCheckedItem,
				INDEXTOSTATEIMAGEMASK(2), LVIS_STATEIMAGEMASK);
			this->GetParent()->SetDlgItemTextW(IDC_ID,this->GetItemText(nNewCheckedItem,0));
			this->GetParent()->SetDlgItemTextW(IDC_NAME,this->GetItemText(nNewCheckedItem,1));
			this->GetParent()->SetDlgItemTextW(IDC_STATUS,this->GetItemText(nNewCheckedItem,3));
		}
		else
		{
			this->SetItemState(m_nCheckedItem,
				INDEXTOSTATEIMAGEMASK(2) | INDEXTOOVERLAYMASK(1),
				LVIS_STATEIMAGEMASK | LVIS_OVERLAYMASK);
		}
	}
}
예제 #26
0
void CRowListView::OnViewStateIcons()
{
	m_bStateIcons =! m_bStateIcons;

	CListCtrl& ListCtrl = GetListCtrl();

	if (m_bStateIcons)
	{
		ListCtrl.SetImageList(&m_StateImageList, LVSIL_STATE);
		ListCtrl.SetItemState(m_nCheckedItem, 0, LVIS_OVERLAYMASK);
	}
	else
	{
		ListCtrl.SetImageList(NULL,LVSIL_STATE);
		if (m_nCheckedItem != -1)
		{
			ListCtrl.SetItemState(m_nCheckedItem,
				INDEXTOOVERLAYMASK(1), LVIS_OVERLAYMASK);
		}
	}
}
예제 #27
0
void CLiveListCtrl::OnLvnGetdispinfoA(NMHDR *pNMHDR, LRESULT *pResult)
{
	LVITEM& pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR)->item;

	*pResult = 0;

	if ( pDispInfo.iItem < 0 || pDispInfo.iItem >= (int)m_pIndex.size() )
		return;

	const CLiveItemPtr pItem = m_pIndex[ pDispInfo.iItem ];

	if ( pDispInfo.mask & LVIF_TEXT )
	{
		if ( pDispInfo.iSubItem >= 0 && pDispInfo.iSubItem < pItem->m_pColumn.GetSize() )
		{
			CString sText = pItem->m_pColumn.GetAt( pDispInfo.iSubItem );
			WideCharToMultiByte( CP_ACP, 0, sText, -1,
				(LPSTR)pDispInfo.pszText, pDispInfo.cchTextMax, NULL, NULL );
		}
	}

	if ( pDispInfo.mask & LVIF_IMAGE )
	{
		if ( pDispInfo.iSubItem >= 0 && pDispInfo.iSubItem < pItem->m_pColumn.GetSize() )
		{
			pDispInfo.iImage = pItem->m_nImage[ pDispInfo.iSubItem ];
		}
	}

	if ( pDispInfo.mask & LVIF_STATE ) 
	{
		pDispInfo.state = INDEXTOOVERLAYMASK( pItem->m_nMaskOverlay ) |
			INDEXTOSTATEIMAGEMASK( pItem->m_nMaskState );
	}

	if ( pDispInfo.mask & LVFI_PARAM ) 
	{
		pDispInfo.lParam = pItem->m_nParam;
	}
}
예제 #28
0
HTREEITEM FolderView::InsertItem(ShellFolder* shl_folder, HTREEITEM parent, HTREEITEM insert_after)
{
	if (!shl_folder->GetFullIDL())
		return NULL;

	bool is_link= false;

	TCHAR name[MAX_PATH + MAX_PATH];
	if (!shl_folder->GetName(name))
		*name = NULL;

	int iconIndex= shl_folder->GetIconIndex(FALSE);
	int selectedIconIndex= shl_folder->GetSelectedIconIndex(FALSE);
	shl_folder->ReleaseFullIDL();

	if (iconIndex < 0)
		iconIndex = 0;

	if (selectedIconIndex < 0)
		selectedIconIndex = iconIndex;

	TVINSERTSTRUCT tvis;
	tvis.hParent		= parent;
	tvis.hInsertAfter	= insert_after;
	tvis.item.mask		= TVIF_CHILDREN | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM | TVIF_TEXT | TVIF_STATE;
	tvis.item.pszText	= name;
	tvis.item.iImage	= iconIndex;
	tvis.item.state		= 0;
	tvis.item.iSelectedImage = selectedIconIndex;
	tvis.item.lParam	= reinterpret_cast<LPARAM>(shl_folder);
	tvis.item.cChildren	= /*shl_folder->ContainFileSystemFolder() &&*/ shl_folder->HasSubFolder() ? 1 : 0;

	if (shl_folder->IsLink())
	{
		tvis.item.state |= INDEXTOOVERLAYMASK(2);
		tvis.item.stateMask |= TVIS_OVERLAYMASK;
	}

	return tree_->InsertItem(&tvis);
}
예제 #29
0
void CProcessTemplate::addItemToListControl(CListCtrl & clc, const CProcessSequence* pSeq)
{
	LV_ITEM lvi;
	lvi.mask = LVIF_TEXT | LVIF_PARAM |LVIF_STATE; //; | LVIF_STATE;
	lvi.pszText = LPSTR_TEXTCALLBACK;   // app. maintains text
	lvi.iImage = 1;                     // image list index

	lvi.iSubItem = 0;
	lvi.iItem = 999;	// make it the last
	lvi.lParam = (LPARAM) this;

	if(!getCanAddToSeq(pSeq))
		lvi.state =  INDEXTOOVERLAYMASK(1); // draw the 'not' icon over it
		//lvi.state = 	LVIS_CUT;
	else
	{	lvi.state = 0; // getStateValue();
		lvi.stateMask = LVIS_OVERLAYMASK;
		ASSERTX(-1 != clc.InsertItem(&lvi));	// only insert the availible ones
	}
	//lvi.stateMask = LVIS_CUT;
	//ASSERTX(-1 != clc.InsertItem(&lvi));
}
void CDownloadClientsCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	if( !theApp.emuledlg->IsRunning() )
		return;
	if (!lpDrawItemStruct->itemData)
		return;
	CDC* odc = CDC::FromHandle(lpDrawItemStruct->hDC);
	BOOL bCtrlFocused = ((GetFocus() == this ) || (GetStyle() & LVS_SHOWSELALWAYS));
	if (lpDrawItemStruct->itemState & ODS_SELECTED) {
		if(bCtrlFocused)
			odc->SetBkColor(m_crHighlight);
		else
			odc->SetBkColor(m_crNoHighlight);
	}
	else
		odc->SetBkColor(GetBkColor());
	const CUpDownClient* client = (CUpDownClient*)lpDrawItemStruct->itemData;
	CMemDC dc(odc, &lpDrawItemStruct->rcItem);
	CFont* pOldFont = dc.SelectObject(GetFont());
	CRect cur_rec(lpDrawItemStruct->rcItem);
	COLORREF crOldTextColor = dc.SetTextColor((lpDrawItemStruct->itemState & ODS_SELECTED) ? m_crHighlightText : m_crWindowText);
    if(client->GetSlotNumber() > theApp.uploadqueue->GetActiveUploadsCount()) {
        dc.SetTextColor(::GetSysColor(COLOR_GRAYTEXT));
    }

	int iOldBkMode;
	if (m_crWindowTextBk == CLR_NONE){
		DefWindowProc(WM_ERASEBKGND, (WPARAM)(HDC)dc, 0);
		iOldBkMode = dc.SetBkMode(TRANSPARENT);
	}
	else
		iOldBkMode = OPAQUE;

	CHeaderCtrl *pHeaderCtrl = GetHeaderCtrl();
	int iCount = pHeaderCtrl->GetItemCount();
	cur_rec.right = cur_rec.left - 8;
	cur_rec.left += 4;
	CString Sbuffer;	
	for(int iCurrent = 0; iCurrent < iCount; iCurrent++){
		int iColumn = pHeaderCtrl->OrderToIndex(iCurrent);
		if( !IsColumnHidden(iColumn) ){
			cur_rec.right += GetColumnWidth(iColumn);
			switch(iColumn){
				case 0:{
					uint8 image;
					if (client->credits != NULL){
					if (client->IsFriend())
						image = 4;
					else if (client->GetClientSoft() == SO_EDONKEYHYBRID){
//==> Xman CreditSystem [shadow2004]
						if (client->credits->GetScoreRatio(client/*->GetIP()*/) > 1)
							image = 8;
						else
							image = 7;
					}
					else if (client->GetClientSoft() == SO_MLDONKEY){
						if (client->credits->GetScoreRatio(client/*->GetIP()*/) > 1)
							image = 6;
						else
							image = 5;
					}
					else if (client->GetClientSoft() == SO_SHAREAZA){
						if(client->credits->GetScoreRatio(client/*->GetIP()*/) > 1)
							image = 10;
						else
							image = 9;
					}
					else if (client->GetClientSoft() == SO_AMULE){
						if(client->credits->GetScoreRatio(client/*->GetIP()*/) > 1)
							image = 12;
						else
							image = 11;
					}
					else if (client->GetClientSoft() == SO_LPHANT){
						if(client->credits->GetScoreRatio(client/*->GetIP()*/) > 1)
							image = 14;
						else
							image = 13;
					}
					else if (client->ExtProtocolAvailable()){
						if(client->credits->GetScoreRatio(client/*->GetIP()*/) > 1)
							image = 3;
						else
							image = 1;
					}
					else{
						if (client->credits->GetScoreRatio(client/*->GetIP()*/) > 1)
//<== Xman CreditSystem [shadow2004]
							image = 2;
						else
							image = 0;
					}
					}
					else
						image = 0;

					POINT point = {cur_rec.left, cur_rec.top+1};
					m_ImageList.Draw(dc,image, point, ILD_NORMAL | ((client->Credits() && client->Credits()->GetCurrentIdentState(client->GetIP()) == IS_IDENTIFIED) ? INDEXTOOVERLAYMASK(1) : 0));
					Sbuffer = client->GetUserName();
					cur_rec.left +=20;
					dc.DrawText(Sbuffer,Sbuffer.GetLength(),&cur_rec,DLC_DT_TEXT);
					cur_rec.left -=20;
					break;
					}
				case 1:
					Sbuffer.Format(_T("%s"), client->GetClientSoftVer());
					break;
				case 2:
					Sbuffer.Format(_T("%s"), client->GetRequestFile()->GetFileName());
					break;
				case 3:
					Sbuffer=CastItoXBytes( (float)client->GetDownloadDatarate() , false, true);
					dc.DrawText(Sbuffer,Sbuffer.GetLength(),&cur_rec, DLC_DT_TEXT | DT_RIGHT);
						break;
				case 4:
						cur_rec.bottom--;
						cur_rec.top++;
						client->DrawStatusBar(dc, &cur_rec, false);
						cur_rec.bottom++;
						cur_rec.top--;
						break;	
				case 5:
					if(client->Credits() && client->GetSessionDown() < client->credits->GetDownloadedTotal())
						Sbuffer.Format(_T("%s (%s)"), CastItoXBytes(client->GetSessionDown()), CastItoXBytes(client->credits->GetDownloadedTotal()));
					else
						Sbuffer.Format(_T("%s"), CastItoXBytes(client->GetSessionDown()));
					break;
				case 6:
					if(client->Credits() && client->GetSessionUp() < client->credits->GetUploadedTotal())
						Sbuffer.Format(_T("%s (%s)"), CastItoXBytes(client->GetSessionUp()), CastItoXBytes(client->credits->GetUploadedTotal()));
					else
						Sbuffer.Format(_T("%s"), CastItoXBytes(client->GetSessionUp()));
					break;
				case 7:
						switch(client->GetSourceFrom()){
						case SF_SERVER:
						Sbuffer = _T("eD2K Server");
							break;
						case SF_KADEMLIA:
							Sbuffer = GetResString(IDS_KADEMLIA);
							break;
						case SF_SOURCE_EXCHANGE:
							Sbuffer = GetResString(IDS_SE);
							break;
						case SF_PASSIVE:
							Sbuffer = GetResString(IDS_PASSIVE);
							break;
						case SF_LINK:
							Sbuffer = GetResString(IDS_SW_LINK);
							break;
						default:
							Sbuffer = GetResString(IDS_UNKNOWN);
							break;
						}
					break;
				}
				if( iColumn != 4 && iColumn != 0 && iColumn != 3 && iColumn != 11)
					dc.DrawText(Sbuffer,Sbuffer.GetLength(),&cur_rec,DLC_DT_TEXT);
				cur_rec.left += GetColumnWidth(iColumn);
		}
	}

	//draw rectangle around selected item(s)
	if (lpDrawItemStruct->itemState & ODS_SELECTED)
	{
		RECT outline_rec = lpDrawItemStruct->rcItem;

		outline_rec.top--;
		outline_rec.bottom++;
		dc.FrameRect(&outline_rec, &CBrush(GetBkColor()));
		outline_rec.top++;
		outline_rec.bottom--;
		outline_rec.left++;
		outline_rec.right--;

		if (bCtrlFocused)
			dc.FrameRect(&outline_rec, &CBrush(m_crFocusLine));
		else
			dc.FrameRect(&outline_rec, &CBrush(m_crNoFocusLine));
	}

	if (m_crWindowTextBk == CLR_NONE)
		dc.SetBkMode(iOldBkMode);

	dc.SelectObject(pOldFont);
	dc.SetTextColor(crOldTextColor);
}