Esempio n. 1
0
void ShellBrowser::OnTreeItemRClick(int idCtrl, LPNMHDR pnmh)
{
    CONTEXT("ShellBrowser::OnTreeItemRClick()");

    TVHITTESTINFO tvhti;

    GetCursorPos(&tvhti.pt);
    ScreenToClient(_left_hwnd, &tvhti.pt);

    tvhti.flags = LVHT_NOWHERE;
    (void)TreeView_HitTest(_left_hwnd, &tvhti);

    if (TVHT_ONITEM & tvhti.flags) {
        LPARAM itemData = TreeView_GetItemData(_left_hwnd, tvhti.hItem);

        if (itemData) {
            Entry* entry = (Entry*)itemData;
            ClientToScreen(_left_hwnd, &tvhti.pt);

            HRESULT hr = entry->do_context_menu(_hwnd, tvhti.pt, _cm_ifs);

            if (SUCCEEDED(hr))
                refresh();
            else
                CHECKERROR(hr);
        }
    }
}
Esempio n. 2
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;
}
Esempio n. 3
0
void ShellBrowserChild::Tree_DoItemMenu(HWND hwndTreeView, HTREEITEM hItem, LPPOINT pptScreen)
{
	CONTEXT("ShellBrowserChild::Tree_DoItemMenu()");

	LPARAM itemData = TreeView_GetItemData(hwndTreeView, hItem);

	if (itemData) {
		ShellEntry* entry = (ShellEntry*)itemData;

		ShellDirectory* dir = entry->_up;
		ShellFolder folder = dir? dir->_folder: GetDesktopFolder();
		LPCITEMIDLIST pidl = static_cast<ShellEntry*>(entry)->_pidl;

		CHECKERROR(ShellFolderContextMenu(folder, _hwnd, 1, &pidl, pptScreen->x, pptScreen->y, _cm_ifs));
	}
}
Esempio n. 4
0
void TrayNotifyDlg::SetIconMode(NOTIFYICONMODE mode)
{
	int idx = TreeView_GetItemData(_tree_ctrl, _selectedItem);

	if (!idx)
		return;

	NotifyIconConfig& entry = _info[idx];

	if (entry._mode != mode) {
		entry._mode = mode;

		 // trigger refresh in notify area and this dialog
		if (_pNotifyArea)
			SendMessage(*_pNotifyArea, PM_REFRESH, 0, 0);
	}

	if (_pNotifyArea) {
		bool found = false;

		NotifyIconCfgList& cfg = _pNotifyArea->_cfg;
		for(NotifyIconCfgList::iterator it=cfg.begin(); it!=cfg.end(); ++it) {
			NotifyIconConfig& cfg_entry = *it;

			if (cfg_entry.match(entry)) {
				cfg_entry._mode = mode;
				++found;
				break;
			}
		}

		if (!found) {
			 // insert new configuration entry
			NotifyIconConfig cfg_entry = entry;

			cfg_entry._mode = mode;

			_pNotifyArea->_cfg.push_back(cfg_entry);
		}
	}

	Refresh();
	///@todo select treeview item at new position in tree view -> refresh HTREEITEM in _selectedItem
}
Esempio n. 5
0
HRESULT ShellBrowser::OnDefaultCommand(LPIDA pida)
{
    CONTEXT("ShellBrowser::OnDefaultCommand()");

    if (pida->cidl >= 1) {
        if (_left_hwnd) {	// explorer mode
            if (_last_sel) {
                ShellDirectory* parent = (ShellDirectory*)TreeView_GetItemData(_left_hwnd, _last_sel);

                if (parent) {
                    try {
                        parent->smart_scan(SORT_NAME, SCAN_DONT_ACCESS);
                    } catch(COMException& e) {
                        return e.Error();
                    }

                    UINT firstOffset = pida->aoffset[1];
                    LPITEMIDLIST pidl = (LPITEMIDLIST)((LPBYTE)pida+firstOffset);

                    Entry* entry = parent->find_entry(pidl);

                    if (entry && (entry->_data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
                        if (entry->_etype == ET_SHELL)
                            if (_last_sel && select_entry(_last_sel, entry))
                                return S_OK;

                    ///@todo look for hidden or new subfolders and refresh/add new entry instead of opening a new window
                    return E_NOTIMPL;
                }
            }
        } else { // no tree control
            if (MainFrameBase::OpenShellFolders(pida, _hwndFrame))
                return S_OK;

            /* create new Frame Window
            			if (MainFrame::OpenShellFolders(pida, 0))
            				return S_OK;
            */
        }
    }

    return E_NOTIMPL;
}
Esempio n. 6
0
HTREEITEM ShellBrowser::select_entry(HTREEITEM hitem, Entry* entry, bool expand)
{
    CONTEXT("ShellBrowser::select_entry()");

    if (expand && !TreeView_Expand(_left_hwnd, hitem, TVE_EXPAND))
        return 0;

    for(hitem=TreeView_GetChild(_left_hwnd,hitem); hitem; hitem=TreeView_GetNextSibling(_left_hwnd,hitem)) {
        if ((Entry*)TreeView_GetItemData(_left_hwnd,hitem) == entry) {
            if (TreeView_SelectItem(_left_hwnd, hitem)) {
                if (expand)
                    TreeView_Expand(_left_hwnd, hitem, TVE_EXPAND);

                return hitem;
            }

            break;
        }
    }

    return 0;
}
Esempio n. 7
0
void ShellBrowserChild::OnTreeItemExpanding(int idCtrl, LPNMTREEVIEW pnmtv)
{
	CONTEXT("ShellBrowserChild::OnTreeItemExpanding()");

	if (pnmtv->action == TVE_COLLAPSE)
        TreeView_Expand(_left_hwnd, pnmtv->itemNew.hItem, TVE_COLLAPSE|TVE_COLLAPSERESET);
    else if (pnmtv->action == TVE_EXPAND) {
		ShellDirectory* dir = (ShellDirectory*)TreeView_GetItemData(_left_hwnd, pnmtv->itemNew.hItem);

		if (dir)
			if (!InsertSubitems(pnmtv->itemNew.hItem, dir)) {
				dir->_shell_attribs &= ~SFGAO_HASSUBFOLDER;

				 // remove subitem "+"
				TV_ITEM tvItem;

				tvItem.mask = TVIF_CHILDREN;
				tvItem.hItem = pnmtv->itemNew.hItem;
				tvItem.cChildren = 0;

				TreeView_SetItem(_left_hwnd, &tvItem);
			}
	}
}