Пример #1
0
void 
FileTransfer::ShowTreeViewItems(HWND hwnd, LPNMTREEVIEW m_lParam)
{
	HANDLE m_handle;
	WIN32_FIND_DATA m_FindFileData;
	TVITEM tvi;
	TVINSERTSTRUCT tvins;
	char path[rfbMAX_PATH];
	GetTVPath(GetDlgItem(hwnd, IDC_FTBROWSETREE), m_lParam->itemNew.hItem, path);
	strcat(path, "\\*");
	while (TreeView_GetChild(GetDlgItem(hwnd, IDC_FTBROWSETREE), m_lParam->itemNew.hItem) != NULL) {
		TreeView_DeleteItem(GetDlgItem(hwnd, IDC_FTBROWSETREE), TreeView_GetChild(GetDlgItem(hwnd, IDC_FTBROWSETREE), m_lParam->itemNew.hItem));
	}
	SetErrorMode(SEM_FAILCRITICALERRORS);
	m_handle = FindFirstFile(path, &m_FindFileData);
	SetErrorMode(0);
	if (m_handle == INVALID_HANDLE_VALUE) return;
	while(1) {
		if ((strcmp(m_FindFileData.cFileName, ".") != 0) && 
			(strcmp(m_FindFileData.cFileName, "..") != 0)) {
			if (m_FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {	
				tvi.mask = TVIF_TEXT;
				tvi.pszText = m_FindFileData.cFileName;
				tvins.hParent = m_lParam->itemNew.hItem;
				tvins.item = tvi;
				tvins.hParent = TreeView_InsertItem(GetDlgItem(hwnd, IDC_FTBROWSETREE), &tvins);
				TreeView_InsertItem(GetDlgItem(hwnd, IDC_FTBROWSETREE), &tvins);
			}
		}
		if (!FindNextFile(m_handle, &m_FindFileData)) break;
	}
	FindClose(m_handle);
}
Пример #2
0
void ExtractAll()
{
	TVITEM t; int i, nl; char *s; HTREEITEM hn, hm; FILE *log;
	//log = fopen("exalltest.txt", "w");
	if(!file) return;
	nl = TreeView_GetCount(htree);
	t.mask = TVIF_PARAM;
	t.hItem = TreeView_GetChild(htree, TVI_ROOT); // First item
	for(i = 0; i < nl; i++)
	{
		TreeView_GetItem(htree, &t);
		s = GetItemPath(t.hItem);
		if(!s) {MessageBox(hwnd, "GetItemPath pathbuf overflow!", title, 16); break;}
		if(t.lParam != -1)
		{
			EnsureDirectoriesArePresent(s);
			ExtractFile(t.lParam, s);
			//fprintf(log, "FILE ");
		}//else	fprintf(log, " DIR ");
		//fprintf(log, "%i: %s\n", i, s);
		hn = TreeView_GetChild(htree, t.hItem);
		if(!hn) hn = TreeView_GetNextSibling(htree, t.hItem);
		if(!hn)
		{
			hn = t.hItem;
gns:			hn = TreeView_GetParent(htree, hn);
			if(!hn) break;
			hm = TreeView_GetNextSibling(htree, hn);
			if(!hm) goto gns;
			hn = hm;
		}
		t.hItem = hn;
	}
	//fclose(log);
}
//-----------------------------------------------------------------------------
//	ExcludePathsDlg_SetCheckState_r
//
//	Propogate the check state to all children
//-----------------------------------------------------------------------------
void ExcludePathsDlg_SetCheckState_r( HWND hWndTree, HTREEITEM hTree, int depth, int checkState )
{
	if ( !hTree )
	{
		return;
	}

	TreeView_SetCheckState( hWndTree, hTree, ( checkState == 1 ) );

	TVITEM tvi = { 0 };
	tvi.mask = TVIF_HANDLE | TVIF_CHILDREN;
	tvi.hItem = hTree;
	if ( TreeView_GetItem( hWndTree, &tvi ) )
	{
		if ( tvi.cChildren )
		{
			HTREEITEM hChild = TreeView_GetChild( hWndTree, hTree );
			if ( hChild )
			{
				ExcludePathsDlg_SetCheckState_r( hWndTree, hChild, depth+1, checkState );
			}
		}
	}
	else
	{
		return;
	}

	if ( !depth )
	{
		// only iterate siblings of the parent's child
		return;
	}

	HTREEITEM hSibling = hTree;
	while ( 1 )
	{
		hSibling = TreeView_GetNextSibling( hWndTree, hSibling );
		if ( !hSibling )
		{
			return;
		}

		TreeView_SetCheckState( hWndTree, hSibling, ( checkState == 1 ) );

		tvi.hItem = hSibling;
		if ( TreeView_GetItem( hWndTree, &tvi ) )
		{
			if ( tvi.cChildren )
			{
				HTREEITEM hChild = TreeView_GetChild( hWndTree, hSibling );
				if ( hChild )
				{
					ExcludePathsDlg_SetCheckState_r( hWndTree, hChild, depth+1, checkState );
				}
			}
		}
	}
}
Пример #4
0
void doItems(HWND hwnd2Tree, ModuleSettingLL *modlist, int count)
{
	HWND hwnd = GetParent(hwnd2Tree);

	char percent[96], title[64];
	mir_snprintf(title, SIZEOF(title), Translate("Loading modules..."));

	TVITEM item = {0};
	item.mask = TVIF_STATE | TVIF_PARAM;

	HTREEITEM contact = TreeView_GetChild(hwnd2Tree, TVI_ROOT);
	contact = TreeView_GetNextSibling(hwnd2Tree, contact);
	contact = TreeView_GetChild(hwnd2Tree, contact);

	MCONTACT hContact = 0;
	for (int i = 1; contact && hwnd2mainWindow; i++) {
		item.hItem = contact;
		contact = TreeView_GetNextSibling(hwnd2Tree, contact);

		if (TreeView_GetItem(hwnd2Tree, &item) && item.lParam) {
			ModuleTreeInfoStruct *mtis = (ModuleTreeInfoStruct *)item.lParam;
			hContact = mtis->hContact;
			if (hContact == NULL || mtis->type != (CONTACT | EMPTY))
				continue;
			mtis->type = CONTACT;
		}
		else
			continue;

		// Caption
		mir_snprintf(percent, SIZEOF(percent), "%s %d%%", title, (int)(100 * i / count));
		SetWindowText(hwnd, percent);

		for (ModSetLinkLinkItem *module = modlist->first; module && hwnd2mainWindow; module = module->next) {
			if (!module->name[0] || IsModuleEmpty(hContact, module->name))
				continue;

			TVINSERTSTRUCT tvi;
			tvi.hParent = item.hItem;
			tvi.hInsertAfter = TVI_SORT;
			tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
			tvi.item.pszText = module->name;

			ModuleTreeInfoStruct *lParam = (ModuleTreeInfoStruct *)mir_calloc(sizeof(ModuleTreeInfoStruct));
			lParam->hContact = hContact;

			tvi.item.iImage = 1;
			tvi.item.iSelectedImage = 2;
			lParam->type = KNOWN_MODULE;

			tvi.item.lParam = (LPARAM)lParam;
			TreeView_InsertItem(hwnd2Tree, &tvi);
		}
	}

	SetWindowText(hwnd, TranslateT("Database Editor++"));
}
Пример #5
0
VOID
FreeDeviceStrings(HWND hTreeView)
{
    HTREEITEM hItem;

    hItem = TreeView_GetRoot(hTreeView);

    if (hItem)
    {
        hItem = TreeView_GetChild(hTreeView,
                                  hItem);
        /* loop the parent items */
        while (hItem)
        {
            hItem = TreeView_GetChild(hTreeView,
                                      hItem);
            if (hItem == NULL)
                break;

            /* loop the child items and free the DeviceID */
            while (TRUE)
            {
                HTREEITEM hOldItem;
                TV_ITEM tvItem;
                //TCHAR Buf[100];

                tvItem.hItem = hItem;
                tvItem.mask = TVIF_PARAM;// | TVIF_TEXT;
                //tvItem.pszText = Buf;
                //tvItem.cchTextMax = 99;

                (void)TreeView_GetItem(hTreeView, &tvItem);

                //MessageBox(NULL, Buf, NULL, 0);

                HeapFree(GetProcessHeap(),
                         0,
                         (LPTSTR)tvItem.lParam);

                hOldItem = hItem;

                hItem = TreeView_GetNextSibling(hTreeView,
                                                hItem);
                if (hItem == NULL)
                {
                    hItem = hOldItem;
                    break;
                }
            }

            hItem = TreeView_GetParent(hTreeView,
                                       hItem);
            hItem = TreeView_GetNextSibling(hTreeView,
                                            hItem);
        }
    }
}
Пример #6
0
void TreeViewFindCheck(HTREEITEM parent,bool force)
{
	TVITEM tvItem;
	bool lforce;
	ZeroMemory(&tvItem,sizeof(TVITEM));
	HTREEITEM locHti,tmpHti;
	wchar_t buff[2048]; wmemset(buff,'\0',2048);
	if (parent==NULL)
	{
		locHti=TreeView_GetRoot(App.hTreeView);
	}
	else
	{
		locHti=TreeView_GetChild(App.hTreeView,parent);
	}
	do
	{
		lforce=false;
		tvItem.mask = TVIF_HANDLE | TVIF_TEXT;
		tvItem.hItem = locHti;
		tvItem.pszText = buff;
		tvItem.cchTextMax = 2048;
		TreeView_GetItem(App.hTreeView,&tvItem);
		if (TreeView_GetCheckState(App.hTreeView,locHti)==1 || force)
		{
			switch (tvItem.lParam)
			{
				case 10:
					semafor=1;
					//TreeView_Select(App.hTreeView,locHti,TVGN_CARET);
					//TreeView_Expand(App.hTreeView,locHti,TVE_EXPAND);
					_beginthreadex(NULL,0,ThreadScanFolder,(void *)locHti,0,NULL);
					lforce=TRUE;
					while (semafor==1)
					{Sleep(100);}
				break;
				case 20:
					semafor=1;
					//TreeView_Select(App.hTreeView,locHti,TVGN_CARET);
					//TreeView_Expand(App.hTreeView,locHti,TVE_EXPAND);
					_beginthreadex(NULL,0,ThreadScanFile,(void *)locHti,0,NULL);
					lforce=TRUE;
					while (semafor==1)
					{Sleep(100);}
				break;
			}
		}
		if (tmpHti=TreeView_GetChild(App.hTreeView,locHti))
		{
			TreeViewFindCheck(locHti,lforce);
		}
	}
	while(locHti=TreeView_GetNextSibling(App.hTreeView,locHti));
}
Пример #7
0
void freeTree(HWND hwnd2Tree, MCONTACT hContact)
{
	TVITEM item;
	HTREEITEM lastItem;
	if (!TreeView_GetCount(hwnd2Tree))
		return;

	item.mask = TVIF_STATE | TVIF_PARAM;
	item.hItem = TVI_ROOT;
	do {
		do {
			lastItem = item.hItem;
			if (lastItem != TVI_ROOT) {
				TreeView_GetItem(hwnd2Tree, &item);
				/* these next 2 lines are not from code guru..... */
				if (item.lParam) {
					ModuleTreeInfoStruct *mtis = (ModuleTreeInfoStruct *)item.lParam;

					if (!hContact || (hContact == mtis->hContact)) {
						if (hContact != NULL) {
							TreeView_DeleteItem(hwnd2Tree, item.hItem);
							mir_free(mtis);
						}
						else
							mtis->type = STUB;
					}
				}
				/* back to coduguru's code*/
			}
		} while (item.hItem = TreeView_GetChild(hwnd2Tree, lastItem));

		while (!(item.hItem = TreeView_GetNextSibling(hwnd2Tree, lastItem)) && (lastItem = item.hItem = TreeView_GetParent(hwnd2Tree, lastItem))) {}

	} while (item.hItem);
}
Пример #8
0
static HTREEITEM _treeview_getitemfrompath(HWND treeview, HTREEITEM parent,
					   char *path)
{
    char *fname, name[BUFSIZE], iname[BUFSIZE];
    HTREEITEM child;

    if (!path || path[0] == '\0')
	return parent;

    memset(name, 0, BUFSIZE);
    fname = firstname(path);
    memmove(name, path, fname - path);
    child = TreeView_GetChild(treeview, parent);

    if (!child)
	return parent;

    do {
	treeview_getitemname(treeview, child, iname, BUFSIZE);
	if (!strcmp(name, iname)) {
	    if (!fname[0])
		return child;
	    else
		return _treeview_getitemfrompath(treeview, child,
						 fname + 1);
	};
    } while (child = TreeView_GetNextSibling(treeview, child));

    return NULL;
};
Пример #9
0
int findItemInTree(HWND hwnd2Tree, MCONTACT hContact, char *module)
{
	TVITEM item;
	char text[265];
	HTREEITEM lastItem;
	if (!TreeView_GetCount(hwnd2Tree))
		return 0;

	item.mask = TVIF_STATE | TVIF_PARAM | TVIF_TEXT;
	item.hItem = TVI_ROOT;
	item.pszText = text;
	item.cchTextMax = 264;
	do {
		do {
			lastItem = item.hItem;
			if (lastItem != TVI_ROOT) {
				/* these next 2 lines are not from code guru..... */
				if (TreeView_GetItem(hwnd2Tree, &item) && item.lParam) {
					if ((hContact == ((ModuleTreeInfoStruct *)item.lParam)->hContact) && (!module[0] || !mir_strcmp(module, text))) {
						//TreeView_SelectItem(hwnd2Tree,item.hItem);
						return (int)item.hItem;
					}
				}
				/* back to coduguru's code*/
			}
		} while ((item.hItem = TreeView_GetChild(hwnd2Tree, lastItem)));

		while ((!(item.hItem = TreeView_GetNextSibling(hwnd2Tree, lastItem))) && (lastItem = item.hItem = TreeView_GetParent(hwnd2Tree, lastItem)));

	} while (item.hItem);
	return -1;
}
void tvisual::on_rclick(LPNMHDR lpNMHdr, HTREEITEM htvi)
{
	TVITEMEX tvi;

	if (type_ == BIN_WML) {
		TreeView_GetItem1(lpNMHdr->hwndFrom, htvi, &tvi, TVIF_CHILDREN, NULL);
		if (tvi.cChildren && !TreeView_GetChild(lpNMHdr->hwndFrom, htvi)) {
			std::vector<std::pair<LPARAM, std::string> > vec;
			LPARAM cfg_index;
			const config* cfg = &game_config_;

			TreeView_FormVector(lpNMHdr->hwndFrom, htvi, vec);
			for (std::vector<std::pair<LPARAM, std::string> >::reverse_iterator ritor = vec.rbegin(); ritor != vec.rend(); ++ ritor) {
				if (ritor == vec.rbegin()) {
					continue;
				}
				cfg_index = 0;
				foreach (const config::any_child& value, cfg->all_children_range()) {
					if (cfg_index ++ == ritor->first) {
						cfg = &value.cfg;
						break;
					}
				}
			}
			wml_2_tv(lpNMHdr->hwndFrom, htvi, *cfg, 0);
		}
Пример #11
0
static void TreeItemForPageNoRec(WindowInfo *win, HTREEITEM hItem, int pageNo, HTREEITEM& bestMatchItem, int& bestMatchPageNo)
{
    while (hItem && bestMatchPageNo < pageNo) {
        TVITEM item;
        item.hItem = hItem;
        item.mask = TVIF_PARAM | TVIF_STATE;
        item.stateMask = TVIS_EXPANDED;
        TreeView_GetItem(win->hwndTocTree, &item);

        // remember this item if it is on the specified page (or on a previous page and closer than all other items)
        if (item.lParam) {
            int page = ((DocTocItem *)item.lParam)->pageNo;
            if (page <= pageNo && page >= bestMatchPageNo && page >= 1) {
                bestMatchItem = hItem;
                bestMatchPageNo = page;
            }
        }

        // find any child item closer to the specified page
        HTREEITEM hSubItem = nullptr;
        if ((item.state & TVIS_EXPANDED))
            TreeItemForPageNoRec(win, TreeView_GetChild(win->hwndTocTree, hItem), pageNo, bestMatchItem, bestMatchPageNo);

        hItem = TreeView_GetNextSibling(win->hwndTocTree, hItem);
    }
}
Пример #12
0
// @fSubLeaf: 是否要遍子下级以及更下级叶子
// 遍历(hctl, htvi)叶子下的所有叶子, 分别调用fn.
// 注:
// 1. 调用函数中不要去删除本叶子,要删除使用函数给的fDelete置TRUE
void TreeView_Walk(HWND hctl, HTREEITEM htvi, BOOL fSubLeaf, fn_treeview_walk fn, uint32_t *ctx, BOOL fDelete)
{
	HTREEITEM			hChildTreeItem = NULL;
	HTREEITEM			hPrevChildTreeItem;

	hChildTreeItem = TreeView_GetChild(hctl, htvi);
	while (hChildTreeItem) {
		//
        // Call the fn on the node itself.
        //
		if (fSubLeaf) {
			TreeView_Walk(hctl, hChildTreeItem, fSubLeaf, fn, ctx);
		}
		if (fn) {
			fn(hctl, hChildTreeItem, ctx);
		}
		
        hPrevChildTreeItem = hChildTreeItem;
		hChildTreeItem = TreeView_GetNextSibling(hctl, hChildTreeItem);
		if (fDelete) {
			TreeView_DeleteItem(hctl, hPrevChildTreeItem);
		}
    }
	return;
}
Пример #13
0
LRESULT CBrowseDocker::OnRefresh(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	if (m_rightClickNode != NULL)
	{
		HTREEITEM hChild = TreeView_GetChild(m_view->m_hWnd, m_rightClickNode);
		if (hChild)
		{
			bool expanded = (TreeView_GetItemState(m_view->m_hWnd, m_rightClickNode, TVIS_EXPANDED) & TVIS_EXPANDED) == TVIS_EXPANDED;
			TreeView_Expand(m_view->m_hWnd, m_rightClickNode, TVE_COLLAPSERESET | TVE_COLLAPSE);

			/*while(hChild)
			{
				TreeView_DeleteItem(m_view->m_hWnd, hChild);
				hChild = TreeView_GetChild(m_view->m_hWnd, m_rightClickNode);
			}*/

			if (expanded)
			{
				TreeView_Expand(m_view->m_hWnd, m_rightClickNode, TVE_EXPAND);
			}
		}
	}

	return 0;
}
Пример #14
0
bool CFileGroups::AddFile(HWND hwndTVCtrl, HTREEITEM hGroup, const char *filepath) {
	_ASSERTE(hGroup != NULL);
	_ASSERTE(filepath != 0);
	_ASSERTE(qfileexist(filepath));
	if (hGroup == NULL || filepath == 0 || !qfileexist(filepath)) return false;
	for (HTREEITEM hChild = TreeView_GetChild(hwndTVCtrl, hGroup);
		hChild != NULL; hChild = TreeView_GetNextSibling(hwndTVCtrl, hChild)) {
		char text[MAX_PATH];
		TVITEMEX tvi;
		tvi.mask = TVIF_HANDLE | TVIF_TEXT;
		tvi.hItem = hGroup;
		tvi.pszText = text;
		tvi.cchTextMax = sizeof text;
		if (TreeView_GetItem(hwndTVCtrl, &tvi)) {
			if (_stricmp(filepath, text) == 0) return false; // no dupes!
		}
#ifdef _DEBUG
		else
			_RPTF4(_CRT_ERROR, "%s(%08X, ..., \"%s\"): TreeView_GetItem(%08X, ...) returned NULL",
				__FUNCTION__, hwndTVCtrl, filepath, hwndTVCtrl);
#endif // _DEBUG
	}
	TVINSERTSTRUCT tvis;
	tvis.hParent = hGroup;
	tvis.hInsertAfter = TVI_SORT;
	tvis.itemex.mask = TVIF_TEXT;
	tvis.itemex.pszText = const_cast<LPTSTR>(filepath);
	const HTREEITEM hti(TreeView_InsertItem(hwndTVCtrl, &tvis));
	_ASSERTE(hti != NULL);
	return hti != NULL;
}
Пример #15
0
static HTREEITEM TreeItemForPageNo(WindowInfo *win, HTREEITEM hItem, int pageNo)
{
    HTREEITEM hCurrItem = nullptr;

    while (hItem) {
        TVITEM item;
        item.hItem = hItem;
        item.mask = TVIF_PARAM | TVIF_STATE;
        item.stateMask = TVIS_EXPANDED;
        TreeView_GetItem(win->hwndTocTree, &item);

        // return if this item is on the specified page (or on a latter page)
        if (item.lParam) {
            int page = ((DocTocItem *)item.lParam)->pageNo;
            if (1 <= page && page <= pageNo)
                hCurrItem = hItem;
            if (page >= pageNo)
                break;
        }

        // find any child item closer to the specified page
        HTREEITEM hSubItem = nullptr;
        if ((item.state & TVIS_EXPANDED))
            hSubItem = TreeItemForPageNo(win, TreeView_GetChild(win->hwndTocTree, hItem), pageNo);
        if (hSubItem)
            hCurrItem = hSubItem;

        hItem = TreeView_GetNextSibling(win->hwndTocTree, hItem);
    }

    return hCurrItem;
}
Пример #16
0
BBTreeViewNode *Win32TreeViewNode::insert( int index,BBString *str,int icon ){

	HTREEITEM p;

	if( index<=0 ){
		p=TVI_FIRST;
	}else if( index>=countKids() ){
		p=TVI_LAST;
	}else{
		p=TreeView_GetChild( _tree,_item );
		while( --index ){
			p=TreeView_GetNextSibling( _tree,p ); 
		}
	}

	TVINSERTSTRUCT it;
	it.hParent=_item;
	it.hInsertAfter=p;
	it.item.mask=TVIF_TEXT;
	it.item.pszText=(char*)str->c_str();

	HTREEITEM item=TreeView_InsertItem( _tree,&it );
	if( !item ) return 0;

	Win32TreeViewNode *node=new Win32TreeViewNode( _tree,item,this );

	TVITEM tv={TVIF_PARAM};
	tv.hItem=item;
	tv.lParam=(LPARAM)node;
	if (icon>-1) {tv.mask|=TVIF_IMAGE|TVIF_SELECTEDIMAGE;tv.iImage=icon;tv.iSelectedImage=icon+0;}
	TreeView_SetItem( _tree,&tv );

	return node;
}
Пример #17
0
LRESULT
FullStackOnCollapse(
	__in HWND hWnd, 
	__in UINT uMsg, 
	__in WPARAM wp, 
	__in LPARAM lp
	)
{
	PDIALOG_OBJECT Object;
    PFULLSTACK_CONTEXT Context;
	PTREELIST_OBJECT TreeList;
    HTREEITEM hItem;

	Object = (PDIALOG_OBJECT)SdkGetObject(hWnd);
    Context = SdkGetContext(Object, FULLSTACK_CONTEXT);
    TreeList = Context->Base.TreeList;
    ASSERT(TreeList != NULL);

	hItem = TreeView_GetChild(TreeList->hWndTree, TVI_ROOT);
	while (hItem != NULL) {
        TreeView_Expand(TreeList->hWndTree, hItem, TVE_COLLAPSE);
		hItem = TreeView_GetNextSibling(TreeList->hWndTree, hItem);
	}

    return 0;
}
Пример #18
0
void StoreTreeNode(HWND hTree, HTREEITEM node, char * section)
{
  HTREEITEM tmp;
  tmp=node;
  while (tmp)
  {
	HTREEITEM tmp2=NULL;
    TVITEMA tvi;
    char buf[255];
    tvi.hItem=tmp;
    tvi.mask=TVIF_TEXT|TVIF_HANDLE;
    tvi.pszText=(LPSTR)&buf;
    tvi.cchTextMax=254;
    TreeView_GetItemA(hTree,&tvi);
	if (tvi.lParam)
	{
		OPT_OBJECT_DATA * dat =(OPT_OBJECT_DATA*)(tvi.lParam);
		if (dat->szName && dat->szValue)
			ModernWriteSettingString(NULL,section,dat->szName,dat->szValue);
	}
	tmp2=TreeView_GetChild(hTree,tmp);
	if (tmp2) StoreTreeNode(hTree,tmp2,section);
    tmp=TreeView_GetNextSibling(hTree,tmp);
  }
  return;
}
Пример #19
0
HTREEITEM OptTree_FindNamedTreeItemAt(HWND hwndTree, HTREEITEM hItem, const TCHAR *name)
{
    TVITEM tvi = {0};
    TCHAR str[MAX_PATH];

    if (hItem)
        tvi.hItem = TreeView_GetChild(hwndTree, hItem);
    else
        tvi.hItem = TreeView_GetRoot(hwndTree);

    if (!name)
        return tvi.hItem;

    tvi.mask = TVIF_TEXT;
    tvi.pszText = str;
    tvi.cchTextMax = MAX_PATH;

    while (tvi.hItem)
    {
        TreeView_GetItem(hwndTree, &tvi);

        if (!lstrcmp(tvi.pszText, name))
            return tvi.hItem;

        tvi.hItem = TreeView_GetNextSibling(hwndTree, tvi.hItem);
    }
    return NULL;
}
Пример #20
0
void OptTree_Translate(HWND hwndTree)
{
    HTREEITEM hItem = TreeView_GetRoot(hwndTree);
    while (hItem)
    {
        HTREEITEM hItemTmp = 0;

        OptTree_TranslateItem(hwndTree, hItem);
        if (hItemTmp = TreeView_GetChild(hwndTree, hItem))
        {
            hItem = hItemTmp;
        } else if (hItemTmp = TreeView_GetNextSibling(hwndTree, hItem))
        {
            hItem = hItemTmp;
        } else
        {
            while (1)
            {
                if (!(hItem = TreeView_GetParent(hwndTree, hItem))) break;
                if (hItemTmp = TreeView_GetNextSibling(hwndTree, hItem))
                {
                    hItem = hItemTmp;
                    break;
                }
            }
        }
    }
}
Пример #21
0
//------------------------------------------------------------------------------

static int Calc_Folder_(HTREEITEM hitem, char *Name_Dir, char *NameFo, int pr)//Вычисления для копирование выбранной папки на диск ПК
{
   HTREEITEM ind = TreeView_GetChild(hwndTree, hitem);       //Вошли во внутренний уровень дерева
   if(ind == NULL)
     if(pr == 0) return Error1((Lan+92)->msg);               //if(pr == 0) return Error1("В указанной папке нет файлов для копирования.");
     else return 0;                                          //Для вложенных пустых папок ничего не делаем
   char nName_Dir[512];                                      //Суммарный путь
   lstrcpy(nName_Dir, Name_Dir);
   lstrcat(nName_Dir, "\\");
   lstrcat(nName_Dir, NameFo);
   for(;;)                                                   //Просмотр всего дерева от текущей папки
   {  TV_ITEM item;
      char Msg[100];
      item.mask = TVIF_TEXT | TVIF_PARAM;
      item.hItem = ind;
      item.pszText = Msg;
      item.cchTextMax = 100;
      if(TreeView_GetItem(hwndTree, &item) == FALSE)
         return Error1((Lan+33)->msg);                       //return Error1("Ошибка при запросе информации об элементе дерева.");
      if((aTree + item.lParam)->pf.type == 48 ||             //Очередное имя это папка
         (aTree + item.lParam)->pf.type == 47)               //Данное имя это специальная папка
      {  if(Calc_Folder_(ind, nName_Dir, (aTree + item.lParam)->NameF, ++pr) < 0) return -1; }//Вычисления для копирование выбранной папки на диск ПК
      else                                                   //Очередное имя это файл
      {  numAllInCl += DWORD(((aTree + item.lParam)->pf.SizeF + sCl_B - 1) / sCl_B);  //Суммарное число кластеров во всех копируемых файлах
         numAllOutCl += ((aTree + item.lParam)->pf.SizeF + BytesPerClaster - 1) / BytesPerClaster; //Суммарный число выходных кластеров
         numAllFi++;                                         //Число копируемых файлах
      }
      ind = TreeView_GetNextSibling(hwndTree, ind);          //Следующая запись на том же уровне дерева
      if(ind == NULL) break;                                 //Больше записей данного уровня нет
   }
   return 0;
Пример #22
0
HTREEITEM   IGetNextTreeItem( HWND tree, HTREEITEM item )
{
    // First try child items of this one
    HTREEITEM next = TreeView_GetChild( tree, item );
    if( next == nil )
        // If no child items, try next sibling
        next = TreeView_GetNextSibling( tree, item );
    if( next == nil )
    {
        // If no siblings, go up to the parent and keep searching until we find a parent with a sibling
        next = item;
        while( true )
        {
            next = TreeView_GetParent( tree, next );
            if( next == nil )
            {
                // No parent; not found, so stop
                break;
            }
            else if( TreeView_GetNextSibling( tree, next ) != nil )
            {
                next = TreeView_GetNextSibling( tree, next );
                break;
            }
        }
    }

    return next;
}
Пример #23
0
void TraverseChildren(const HTREEITEM hParent, TString &buf, TString &res, LPTVITEMEX pitem)
{
	ZeroMemory(pitem, sizeof(TVITEMEX));
	for (HTREEITEM ptvitem = TreeView_GetChild(Dcx::mIRC.getTreeview(), hParent); ptvitem != NULL; ptvitem = TreeView_GetNextSibling(Dcx::mIRC.getTreeview(), ptvitem)) {
		pitem->hItem = ptvitem;
		pitem->pszText = buf.to_chr();
		pitem->cchTextMax = MIRC_BUFFER_SIZE_CCH;
		pitem->mask = TVIF_TEXT|TVIF_PARAM;
		if (TreeView_GetItem(Dcx::mIRC.getTreeview(), pitem))
		{
			{
				TString tsType;
				DcxDock::getTreebarItemType(tsType, pitem->lParam);
				Dcx::mIRC.execex("/!set -nu1 %%dcx_%d %s", pitem->lParam, pitem->pszText );
				Dcx::mIRC.tsEvalex(res, "$xtreebar_callback(geticons,%s,%%dcx_%d)", tsType.to_chr(), pitem->lParam);
			}
			pitem->mask = TVIF_IMAGE|TVIF_SELECTEDIMAGE;
			int i = res.gettok( 1 ).to_int() -1;
			if (i < 0)
				i = 0;
			pitem->iImage = i;
			i = res.gettok( 2 ).to_int() -1;
			if (i < 0)
				i = 0;
			pitem->iSelectedImage = i;
			TreeView_SetItem(Dcx::mIRC.getTreeview(), pitem);
		}
		TraverseChildren(ptvitem, buf, res, pitem);
	}
}
Пример #24
0
void CWindowTreeDlg::SelectTreeItem(HWND windowHwnd)
{
    HWND _windowTreeHwnd = GetDlgItem(*this, IDC_WINDOWTREE);
    HTREEITEM actualItem = TreeView_GetFirstVisible(_windowTreeHwnd);

    // Search by the item into the list
    while (actualItem != NULL)
    {
        TVITEM tvi = {0};
        tvi.hItem = actualItem;
        tvi.mask = TVIF_PARAM;
        TreeView_GetItem(_windowTreeHwnd, &tvi);

        // If it is the item, select it and break the search
        if ((HWND)tvi.lParam == windowHwnd)
        {
            TreeView_SelectItem(_windowTreeHwnd, actualItem);
            break;
        }

        // Find the next item in the TreeView
        HTREEITEM nextItem = TreeView_GetChild(_windowTreeHwnd, actualItem);
        if (nextItem == NULL)
            nextItem = TreeView_GetNextSibling(_windowTreeHwnd, actualItem);

        HTREEITEM parentItem = actualItem;
        while ((nextItem == NULL) && (parentItem != NULL))
        {
            parentItem = TreeView_GetParent(_windowTreeHwnd, parentItem);
            nextItem = TreeView_GetNextSibling(_windowTreeHwnd, parentItem);
        }
        actualItem = nextItem;
    }
}
Пример #25
0
HTREEITEM plComponentDlg::ISearchTree(HWND hTree, LPARAM lParam, HTREEITEM hCur)
{
    // Get the param for the current item
    TVITEM tvi;
    tvi.mask  = TVIF_PARAM;
    tvi.hItem = hCur;
    TreeView_GetItem(hTree, &tvi);

    // If the lParam matches the one searching for, return the handle
    if (tvi.lParam == lParam)
        return hCur;

    // Do a recursive search on the items children
    HTREEITEM hChild = TreeView_GetChild(hTree, hCur);
    while (hChild)
    {
        HTREEITEM hResult = ISearchTree(hTree, lParam, hChild);
        if (hResult)
            return hResult;

        hChild = TreeView_GetNextSibling(hTree, hChild);
    }

    return NULL;
}
void CSubclassedCopyMoveDlg::AfterInitDialog()
{
	HWND hTreeCtrl = _GetTreeCtrl();
	if (!hTreeCtrl)
	{
		// wrong dialog?
		PostMessage(WM_COMMAND, IDCANCEL, 0);
		return;
	}

	HTREEITEM hRoot = TreeView_GetRoot(hTreeCtrl);
	HTREEITEM hLocalFolders = COETricks::m_bVista ? hRoot : TreeView_GetChild(hTreeCtrl, hRoot);
	if (!hLocalFolders)
	{
		PostMessage(WM_COMMAND, IDCANCEL, 0);	// dunno what happened
		return;
	}

	FOLDERS_LIST arrFolders;
	_EnumFolders(hTreeCtrl, hLocalFolders, arrFolders);

	// select our target folder
	// then press OK
	FOLDERS_LIST::const_iterator it = arrFolders.find(m_dwFolderID);
	if (it == arrFolders.end())
	{
		// there's no love...
		PostMessage(WM_COMMAND, IDCANCEL, 0);
		return;
	}

	TreeView_SelectItem(hTreeCtrl, it->second);
	PostMessage(WM_COMMAND, IDOK, 0);
}
bool CSubclassedCopyMoveDlg::_EnumFolders(HWND hTreeCtrl, HTREEITEM hRootFolder, OUT FOLDERS_LIST& arrFolders)
{
	TreeView_Expand(hTreeCtrl, hRootFolder, TVE_EXPAND); // to prevent the infamous crash 

	HTREEITEM hCurFolder = TreeView_GetChild(hTreeCtrl, hRootFolder);
	if (!hCurFolder)
		return false;

	for (; hCurFolder; hCurFolder = TreeView_GetNextSibling(hTreeCtrl, hCurFolder))
	{
		TCHAR szBuf[256];
		
		TVITEM item;
		item.hItem = hCurFolder;
		item.mask = TVIF_TEXT | TVIF_PARAM;
		item.pszText = szBuf;
		item.cchTextMax = 256;
		TreeView_GetItem(hTreeCtrl, &item);
		
		CTLeafInfo LeafInfo((void *)item.lParam);
		if(LeafInfo.IsNull())
			continue;

		arrFolders[LeafInfo.GetFolderId()] = hCurFolder;
		
		_EnumFolders(hTreeCtrl, hCurFolder, arrFolders);
	}

	return true;
}
Пример #28
0
// returns false if we should stop iteration
// TODO: convert to non-recursive version by storing nodes to visit in std::deque
static bool VisitTreeNodesRec(HWND hwnd, HTREEITEM hItem, const TreeItemVisitor& visitor) {
    while (hItem) {
        TVITEMW item = {0};
        item.hItem = hItem;
        item.mask = TVIF_PARAM | TVIF_STATE;
        item.stateMask = TVIS_EXPANDED;
        BOOL ok = TreeView_GetItem(hwnd, &item);
        if (!ok) {
            // we failed to get the node, but we don't want to stop the traversal
            return true;
        }
        bool shouldContinue = visitor(&item);
        if (!shouldContinue) {
            // visitor asked to stop
            return false;
        }

        if ((item.state & TVIS_EXPANDED)) {
            HTREEITEM child = TreeView_GetChild(hwnd, hItem);
            VisitTreeNodesRec(hwnd, child, visitor);
        }

        hItem = TreeView_GetNextSibling(hwnd, hItem);
    }
    return true;
}
Пример #29
0
bool ShellBrowserChild::select_folder(ShellDirectory* dir, bool expand)
{
	CONTEXT("ShellBrowserChild::expand_folder()");

	if (!_last_sel)
		return false;

	if (!TreeView_Expand(_left_hwnd, _last_sel, TVE_EXPAND))
		return false;

	for(HTREEITEM hitem=TreeView_GetChild(_left_hwnd,_last_sel); hitem; hitem=TreeView_GetNextSibling(_left_hwnd,hitem)) {
		if ((ShellDirectory*)TreeView_GetItemData(_left_hwnd,hitem) == dir) {
			if (TreeView_SelectItem(_left_hwnd, hitem)) {
				if (expand)
					if (!TreeView_Expand(_left_hwnd, hitem, TVE_EXPAND))
						return false;

				return true;
			}

			break;
		}
	}

	return false;
}
Пример #30
0
// Tim item co text = sz tai nut hParent cua TreeView
HTREEITEM TV_FindItem(HTREEITEM hParent, TCHAR *sz)
{
	TVITEM kq;	
	TCHAR		szText[PATHFILE_MAX_LEN];
	HTREEITEM	hItem;
	int k;
	// Khoi tao cac gia tri cho item
	kq.mask = TVIF_TEXT;
	kq.pszText = szText;
	kq.cchTextMax = PATHFILE_MAX_LEN;
	// Them thu muc vao ListView
	if (hItem = TreeView_GetChild(hwndTreeView, hParent))
	{
		do
		{
			kq.hItem = hItem;
			TreeView_GetItem(hwndTreeView, &kq);
		
			k = wcscmp(kq.pszText, sz);
			if (k == 0) // Tim thay
				return hItem;

//			else
//				if (k > 0)
//					return NULL;
		}	
		while (hItem = TreeView_GetNextSibling(hwndTreeView, hItem));
	}

	return NULL;
}