Ejemplo 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);
        }
    }
}
Ejemplo n.º 2
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));
	}
}
Ejemplo n.º 3
0
float AdInput(UINT channel)
{
	float volts;
	long adcvalue;
	long value;

	CHECKERROR(olDaGetSingleValue(board.hdass, &adcvalue, channel, gain));

	if (encoding != OL_ENC_BINARY) {
		value ^= 1L << (resolution - 1);
		value &= (1L << resolution) - 1;
	}

	volts = ((float)max - (float)min) / (1L << resolution) * adcvalue;// + (float)min;
	olDaReleaseDASS(board.hdass);

	return volts;
}
Ejemplo n.º 4
0
bool DesktopShellView::DoContextMenu(int x, int y)
{
	IDataObject* selection;

	HRESULT hr = _pShellView->GetItemObject(SVGIO_SELECTION, IID_IDataObject, (void**)&selection);
	if (FAILED(hr))
		return false;

	PIDList pidList;

	hr = pidList.GetData(selection);
	if (FAILED(hr)) {
		selection->Release();
		//CHECKERROR(hr);
		return false;
	}

	LPIDA pida = pidList;
	if (!pida->cidl) {
		selection->Release();
		return false;
	}

	LPCITEMIDLIST parent_pidl = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]);

	LPCITEMIDLIST* apidl = (LPCITEMIDLIST*) alloca(pida->cidl*sizeof(LPCITEMIDLIST));

	for(int i=pida->cidl; i>0; --i)
		apidl[i-1] = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[i]);

	hr = ShellFolderContextMenu(ShellFolder(parent_pidl), _hwnd, pida->cidl, apidl, x, y, _cm_ifs);

	selection->Release();

	if (SUCCEEDED(hr))
		refresh();
	else
		CHECKERROR(hr);

	return true;
}
Ejemplo n.º 5
0
LRESULT FileChildWindow::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{
	switch(nmsg) {
		case WM_DRAWITEM: {
			LPDRAWITEMSTRUCT dis = (LPDRAWITEMSTRUCT)lparam;
			Entry* entry = (Entry*) dis->itemData;

			if (dis->CtlID == IDW_TREE_LEFT) {
				_left->draw_item(dis, entry);
				return TRUE;
			} else if (dis->CtlID == IDW_TREE_RIGHT) {
				_right->draw_item(dis, entry);
				return TRUE;
			}

			goto def;}

		case WM_SIZE:
			if (wparam != SIZE_MINIMIZED)
				resize_children(LOWORD(lparam), HIWORD(lparam));
			return DefMDIChildProc(_hwnd, nmsg, wparam, lparam);

		case PM_GET_FILEWND_PTR:
			return (LRESULT)this;

		case WM_SETFOCUS: {
			TCHAR path[MAX_PATH];

			if (_left && _left->_cur) {
				_left->_cur->get_path(path, COUNTOF(path));
				SetCurrentDirectory(path);
			}

			SetFocus(_focus_pane? _right_hwnd: _left_hwnd);
			goto def;}

		case PM_DISPATCH_COMMAND: {
			Pane* pane = GetFocus()==_left_hwnd? _left: _right;

			switch(LOWORD(wparam)) {
			  case ID_WINDOW_NEW: {CONTEXT("FileChildWindow PM_DISPATCH_COMMAND ID_WINDOW_NEW");
				if (_root._entry->_etype == ET_SHELL)
					FileChildWindow::create(ShellChildWndInfo(GetParent(_hwnd)/*_hmdiclient*/, _path, DesktopFolderPath()));
				else
					FileChildWindow::create(FileChildWndInfo(GetParent(_hwnd)/*_hmdiclient*/, _path));
				break;}

			  case ID_REFRESH: {CONTEXT("ID_REFRESH");
				refresh();
				break;}

			  case ID_ACTIVATE: {CONTEXT("ID_ACTIVATE");
				activate_entry(pane);
				break;}

			  default:
				if (pane->command(LOWORD(wparam)))
					return TRUE;
				else
					return super::WndProc(nmsg, wparam, lparam);
			}

			return TRUE;}

		case WM_CONTEXTMENU: {
			 // first select the current item in the listbox
			HWND hpanel = (HWND) wparam;
			POINT pt;
			pt.x = LOWORD(lparam);
			pt.y = HIWORD(lparam);
			POINT pt_screen = pt;
			ScreenToClient(hpanel, &pt);
			SendMessage(hpanel, WM_LBUTTONDOWN, 0, MAKELONG(pt.x, pt.y));
			SendMessage(hpanel, WM_LBUTTONUP, 0, MAKELONG(pt.x, pt.y));

			 // now create the popup menu using shell namespace and IContextMenu
			Pane* pane = GetFocus()==_left_hwnd? _left: _right;
			int idx = ListBox_GetCurSel(*pane);
			if (idx != -1) {
				Entry* entry = (Entry*) ListBox_GetItemData(*pane, idx);

				HRESULT hr = entry->do_context_menu(_hwnd, pt_screen, _cm_ifs);

				if (SUCCEEDED(hr))
					refresh();
				else
					CHECKERROR(hr);
			}
			break;}

		default: def:
			return super::WndProc(nmsg, wparam, lparam);
	}

	return 0;
}
Ejemplo n.º 6
0
LRESULT QuickLaunchBar::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{
	switch(nmsg) {
	  case PM_REFRESH:
		AddShortcuts();
		break;

	  case PM_GET_WIDTH: {
		 // take line wrapping into account
		int btns = SendMessage(_hwnd, TB_BUTTONCOUNT, 0, 0);
		int rows = SendMessage(_hwnd, TB_GETROWS, 0, 0);

		if (rows<2 || rows==btns)
			return _size;

		RECT rect;
		int max_cx = 0;

		for(QuickLaunchMap::const_iterator it=_entries.begin(); it!=_entries.end(); ++it) {
			SendMessage(_hwnd, TB_GETRECT, it->first, (LPARAM)&rect);

			if (rect.right > max_cx)
				max_cx = rect.right;
		}

		return max_cx;}

	  case PM_UPDATE_DESKTOP:
		UpdateDesktopButtons(wparam);
		break;

	  case WM_CONTEXTMENU: {
		TBBUTTON btn;
		QuickLaunchMap::iterator it;
		Point screen_pt(lparam), clnt_pt=screen_pt;
		ScreenToClient(_hwnd, &clnt_pt);

		Entry* entry = NULL;
		int idx = SendMessage(_hwnd, TB_HITTEST, 0, (LPARAM)&clnt_pt);

		if (idx>=0 &&
			SendMessage(_hwnd, TB_GETBUTTON, idx, (LPARAM)&btn)!=-1 &&
			(it=_entries.find(btn.idCommand))!=_entries.end()) {
			entry = it->second._entry;
		}

		if (entry) {	// entry is NULL for desktop switch buttons
			HRESULT hr = entry->do_context_menu(_hwnd, screen_pt, _cm_ifs);

			if (!SUCCEEDED(hr))
				CHECKERROR(hr);
		} else
			goto def;
		break;}

	  default: def:
		return super::WndProc(nmsg, wparam, lparam);
	}

	return 0;
}