HRESULT FTPWindow::OnDragOver(DWORD /*grfKeyState*/, POINTL pt, LPDWORD pdwEffect) { FileObject * fo = m_treeview.GetItemByPoint(pt); if (fo && fo->isDir()) { *pdwEffect = DROPEFFECT_COPY; TreeView_Select(m_treeview.GetHWND(), fo->GetData(), TVGN_DROPHILITE); m_currentDropObject = fo; return S_OK; } else { TreeView_Select(m_treeview.GetHWND(), NULL, TVGN_DROPHILITE); m_currentDropObject = NULL; } return S_OK; }
HRESULT FTPWindow::OnDrop(LPDATAOBJECT pDataObj, DWORD /*grfKeyState*/, POINTL /*pt*/, LPDWORD pdwEffect) { TreeView_Select(m_treeview.GetHWND(), NULL, TVGN_DROPHILITE); STGMEDIUM medium; FORMATETC formatetc; formatetc.cfFormat = CF_HDROP; formatetc.tymed = TYMED_HGLOBAL; formatetc.dwAspect = 0; formatetc.lindex = -1; formatetc.ptd = NULL;; HRESULT dataRes = pDataObj->GetData(&formatetc, &medium); if (dataRes == S_OK) { *pdwEffect = DROPEFFECT_COPY; HDROP hdrop = (HDROP)GlobalLock(medium.hGlobal); TCHAR pathToFile[MAX_PATH]; int filesDropped = DragQueryFile(hdrop, 0xffffffff, NULL, 0); for (int i = 0; i < filesDropped; ++i) { if (DragQueryFile(hdrop, i, pathToFile, MAX_PATH) != 0) { //pathToFile is not checked. If it doesnt exist or its a directory or link, CreateFile either allows a handle to be opened or not m_ftpSession->UploadFile(pathToFile, m_currentDropObject->GetPath(), true, 1); //1: User specified location } } GlobalUnlock(medium.hGlobal); GlobalFree(medium.hGlobal); } return S_OK; }
void Explorerplusplus::OnTreeViewFileDelete(BOOL bPermanent) { HTREEITEM hItem, hParentItem; LPITEMIDLIST pidl = NULL; DWORD fMask = 0; HRESULT hr; hItem = TreeView_GetSelection(m_hTreeView); hParentItem = TreeView_GetParent(m_hTreeView,hItem); // Select the parent item to release the lock and allow deletion TreeView_Select(m_hTreeView,hParentItem,TVGN_CARET); if(hItem != NULL) { pidl = m_pMyTreeView->BuildPath(hItem); if(bPermanent) { fMask = CMIC_MASK_SHIFT_DOWN; } hr = ExecuteActionFromContextMenu(pidl,NULL,0,_T("delete"),fMask); CoTaskMemFree(pidl); } }
int FTPWindow::OnConnect(int code) { if (code != 0) //automated connect return 0; FileObject * root = m_ftpSession->GetRootObject(); m_treeview.AddRoot(root); FileObject * last = root; while(last->GetChildCount() > 0) { last = last->GetChild(0); } m_treeview.EnsureObjectVisible(last); TreeView_Select(m_treeview.GetHWND(), last->GetData(), TVGN_CARET); m_ftpSession->GetDirectory(last->GetPath()); TCHAR * info = SU::TSprintfNB(TEXT("Connected to %T"), m_ftpSession->GetCurrentProfile()->GetName()); SetInfo(info); delete [] info; SetToolbarState(); return 0; }
void CMyTreeView::RestoreState(void) { TreeView_Select(m_hTreeView,NULL,TVGN_DROPHILITE); g_bAllowScroll = FALSE; m_bDragging = FALSE; }
bool SimTreeView::hilightObjectItem( SimObject *obj ) { HTREEITEM hItem; if ( (hItem = find(TreeView_GetRoot(treeList.getHandle()), obj->getId())) != NULL ) { TreeView_Select( treeList.getHandle(), hItem, TVGN_CARET ); return true; } else return false; }
bool SetSelectedNode(_Ty Key, UINT fMask) { HTREEITEM hItem = KeyToHandle(Key); if (NULL != hItem) { return WND_TRUE(TreeView_Select(m_hWnd, hItem, fMask)); } return false; }
/* ** Selects an item in the treeview. ** */ void CDialogManage::CTabSkins::SelectTreeItem(HWND tree, HTREEITEM item, LPCWSTR name) { WCHAR buffer[MAX_PATH]; TVITEM tvi = {0}; tvi.mask = TVIF_TEXT; tvi.hItem = item; tvi.pszText = buffer; const WCHAR* pos = wcschr(name, L'\\'); if (pos) { const int folderLen = (int)(pos - name); tvi.cchTextMax = folderLen + 1; // Length of folder name plus 1 for NULL // Find and expand the folder do { TreeView_GetItem(tree, &tvi); if (wcsncmp(buffer, name, folderLen) == 0) { if ((item = TreeView_GetChild(tree, tvi.hItem)) != NULL) { TreeView_Expand(tree, tvi.hItem, TVE_EXPAND); ++pos; // Skip the slash SelectTreeItem(tree, item, pos); } break; } } while ((tvi.hItem = TreeView_GetNextSibling(tree, tvi.hItem)) != NULL); } else { tvi.cchTextMax = MAX_PATH; // Find and select the file do { TreeView_GetItem(tree, &tvi); if (wcscmp(buffer, name) == 0) { TreeView_Select(tree, tvi.hItem, TVGN_CARET); break; } } while ((tvi.hItem = TreeView_GetNextSibling(tree, tvi.hItem)) != NULL); } }
HRESULT _stdcall CMyTreeView::DragOver(DWORD grfKeyState,POINTL pt,DWORD *pdwEffect) { TVHITTESTINFO tvht; RECT rc; *pdwEffect = GetCurrentDragEffect(grfKeyState,*pdwEffect,&pt); /* Notify the drop helper of the current operation. */ m_pDropTargetHelper->DragOver((LPPOINT)&pt,*pdwEffect); ScreenToClient(m_hTreeView,(LPPOINT)&pt); if(g_bAllowScroll) { GetClientRect(m_hTreeView,&rc); if(pt.x < MIN_X_POS) SendMessage(m_hTreeView,WM_HSCROLL,SB_LINELEFT,NULL); else if(pt.x > (rc.right - MIN_X_POS)) SendMessage(m_hTreeView,WM_HSCROLL,SB_LINERIGHT,NULL); if(pt.y < MIN_Y_POS) SendMessage(m_hTreeView,WM_VSCROLL,SB_LINEUP,NULL); else if(pt.y > (rc.bottom - MIN_Y_POS)) SendMessage(m_hTreeView,WM_VSCROLL,SB_LINEDOWN,NULL); } tvht.pt.x = pt.x; tvht.pt.y = pt.y; TreeView_HitTest(m_hTreeView,&tvht); /* Is the mouse actually over an item? */ if(!(tvht.flags & LVHT_NOWHERE) && (tvht.hItem != NULL)) { /* The mouse is over an item, so select that item. */ TreeView_Select(m_hTreeView,tvht.hItem,TVGN_DROPHILITE); if(g_hExpand != tvht.hItem) { g_hExpand = tvht.hItem; SetTimer(m_hTreeView,DRAGEXPAND_TIMER_ID,DRAGEXPAND_TIMER_ELAPSE, DragExpandTimerProc); } } return S_OK; }
// Function to add files & Folders to TreeView Control // wyBool FavoriteBase::InitTreeView(HWND handle, wyBool isfile) { HTREEITEM root = 0; // Root node handle // if(TreeView_DeleteAllItems(handle) == wyFalse) return wyFalse; root = AddItem(handle, TVI_ROOT, "Favorites", 1); AddToTreeView(handle, root, isfile); if(TreeView_Select(handle, TreeView_GetRoot(handle), TVGN_CARET) == wyFalse ) return wyFalse; ::SendMessage(handle, TVM_EXPAND, (WPARAM)TVE_EXPAND, (LPARAM )root); return wyTrue; }
static void ModernOptUI_SelectSection(HWND hwndDlg, struct ModernOptionsData *dat, int iSection) { int iPageType = -1; HWND hwndTree = GetDlgItem(hwndDlg, IDC_TV_SUBSECTIONS); dat->iSection = iSection; SendMessage(hwndTree, WM_SETREDRAW, FALSE, 0); TreeView_DeleteAllItems(hwndTree); for (int i = 0; i < dat->pObjectList.getCount(); ++i) { struct ModernOptionsObject *obj = (struct ModernOptionsObject *)dat->pObjectList[i]; if (obj->optObject.iSection != iSection) continue; if ((iPageType < -1) && (iPageType != obj->optObject.iType)) continue; iPageType = obj->optObject.iType; if (obj->optObject.iType == MODERNOPT_TYPE_SECTIONPAGE) { ModernOptUI_ShowPage(hwndDlg, dat, i); break; } if (obj->optObject.iType == MODERNOPT_TYPE_SUBSECTIONPAGE) { TVINSERTSTRUCT tvis = {0}; tvis.hParent = TVI_ROOT; tvis.hInsertAfter = TVI_LAST; tvis.item.mask = TVIF_IMAGE|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tvis.item.pszText = TranslateTS(obj->optObject.lptzSubsection); tvis.item.iImage = tvis.item.iSelectedImage = obj->iTreeImageIndex; tvis.item.lParam = i; TreeView_InsertItem(hwndTree, &tvis); } } SendMessage(hwndTree, WM_SETREDRAW, TRUE, 0); if (iPageType < 0) return; if (iPageType != MODERNOPT_TYPE_SECTIONPAGE) { ShowWindow(hwndTree, SW_SHOW); RedrawWindow(hwndTree, NULL, NULL, RDW_INVALIDATE); TreeView_Select(hwndTree, TreeView_GetRoot(hwndTree), TVGN_CARET); } else ShowWindow(hwndTree, SW_HIDE); }
BOOL SelectNodeDialog::OnInitDialog() { CDialog::OnInitDialog(); HWND hTree = ::GetDlgItem(m_hWnd, IDC_TREE); // set image list CImageList& imageList = theIcons.GetImageList(); TreeView_SetImageList(hTree, imageList.m_hImageList, TVSIL_NORMAL); // create a wintree m_pWinTree = wintree_create(m_pGuide, hTree, theIcons.GetLeafIdx(), theIcons.GetNonLeafIdx()); // populate the tree wintree_populate(m_pWinTree); // select whatever our creator asked us to select HTREEITEM hItem = wintree_get_item_from_node(m_pWinTree, m_pNode); ASSERT(hItem); TreeView_Select(hTree, hItem, TVGN_CARET); return TRUE; }
HRESULT FTPWindow::OnDragLeave() { TreeView_Select(m_treeview.GetHWND(), NULL, TVGN_DROPHILITE); return S_OK; }
LRESULT album_list_window::on_message(HWND wnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_CREATE: { list_wnd.add_item(this); initialised = true; modeless_dialog_manager::g_add(wnd); create_tree(); create_filter(); if (cfg_populate) refresh_tree(); static_api_ptr_t<library_manager_v3>()->register_callback(this); } break; /*case WM_GETMINMAXINFO: { LPMINMAXINFO mmi = LPMINMAXINFO(lp); mmi->ptMinTrackSize.y = cfg_height; return 0; }*/ case WM_SIZE: on_size(LOWORD(lp), HIWORD(lp)); break; /* case DM_GETDEFID: return (DC_HASDEFID<<16|IDOK); case WM_GETDLGCODE: return DLGC_DEFPUSHBUTTON;*/ // break; case WM_TIMER: if (wp == EDIT_TIMER_ID) { refresh_tree(); KillTimer(wnd, wp); m_timer = false; } break; case WM_COMMAND: switch (wp) { case IDC_FILTER | (EN_CHANGE << 16) : if (m_timer) KillTimer(wnd_edit, 500); m_timer = SetTimer(wnd, EDIT_TIMER_ID, 500, NULL) != 0; return TRUE; case IDOK: if (GetKeyState(VK_SHIFT) & KF_UP) do_playlist(p_selection, false); else if (GetKeyState(VK_CONTROL) & KF_UP) do_playlist(p_selection, true, true); else do_playlist(p_selection, true); return 0; } break; case WM_CONTEXTMENU: { enum { ID_SEND = 1, ID_ADD, ID_NEW, ID_AUTOSEND, ID_REMOVE, ID_REMOVEDEAD, ID_REFRESH, ID_FILT, ID_CONF, ID_VIEW_BASE }; HMENU menu = CreatePopupMenu(); POINT pt = { GET_X_LPARAM(lp), GET_Y_LPARAM(lp) }; service_ptr_t<contextmenu_manager> p_menu_manager; unsigned IDM_MANAGER_BASE = 0; HWND list = wnd_tv; HTREEITEM treeitem = NULL; TVHITTESTINFO ti; memset(&ti, 0, sizeof(ti)); if (pt.x != -1 && pt.y != -1) { ti.pt = pt; ScreenToClient(list, &ti.pt); uSendMessage(list, TVM_HITTEST, 0, (long)&ti); if (ti.hItem && (ti.flags & TVHT_ONITEM)) { //FIX THIS AND AUTOSEND //TreeView_Select(list, ti.hItem, TVGN_DROPHILITE); //uSendMessage(list,TVM_SELECTITEM,TVGN_DROPHILITE,(long)ti.hItem); treeitem = ti.hItem; } } else { treeitem = TreeView_GetSelection(list); RECT rc; if (treeitem && TreeView_GetItemRect(wnd_tv, treeitem, &rc, TRUE)) { MapWindowPoints(wnd_tv, HWND_DESKTOP, (LPPOINT)&rc, 2); pt.x = rc.left; pt.y = rc.top + (rc.bottom - rc.top) / 2; } else { GetMessagePos(&pt); } } TreeView_Select(list, treeitem, TVGN_DROPHILITE); HMENU menu_view = CreatePopupMenu(); unsigned n, m = cfg_view_list.get_count(); string8_fastalloc temp; temp.prealloc(32); uAppendMenu(menu_view, MF_STRING | (!stricmp_utf8(directory_structure_view_name, view) ? MF_CHECKED : 0), ID_VIEW_BASE + 0, directory_structure_view_name); list_t<string_simple, pfc::alloc_fast> views; views.add_item(string_simple(directory_structure_view_name)); for (n = 0; n<m; n++) { temp = cfg_view_list.get_name(n); string_simple item(temp.get_ptr()); if (item) { uAppendMenu(menu_view, MF_STRING | (!stricmp_utf8(temp, view) ? MF_CHECKED : 0), ID_VIEW_BASE + views.add_item(item), temp); } } IDM_MANAGER_BASE = ID_VIEW_BASE + views.get_count(); uAppendMenu(menu, MF_STRING | MF_POPUP, (UINT)menu_view, "View"); if (!m_populated && !cfg_populate) uAppendMenu(menu, MF_STRING, ID_REFRESH, "Populate"); uAppendMenu(menu, MF_STRING | (m_filter ? MF_CHECKED : 0), ID_FILT, "Filter"); uAppendMenu(menu, MF_STRING, ID_CONF, "Settings"); bool show_shortcuts = standard_config_objects::query_show_keyboard_shortcuts_in_menus(); node * p_node = NULL; TVITEMEX tvi; memset(&tvi, 0, sizeof(tvi)); tvi.hItem = treeitem; tvi.mask = TVIF_HANDLE | TVIF_PARAM; TreeView_GetItem(list, &tvi); p_node = (node*)tvi.lParam; if (treeitem && p_node) { uAppendMenu(menu, MF_SEPARATOR, 0, ""); uAppendMenu(menu, MF_STRING, ID_SEND, (show_shortcuts ? "&Send to playlist\tEnter" : "&Send to playlist")); uAppendMenu(menu, MF_STRING, ID_ADD, show_shortcuts ? "&Add to playlist\tShift+Enter" : "&Add to playlist"); uAppendMenu(menu, MF_STRING, ID_NEW, show_shortcuts ? "Send to &new playlist\tCtrl+Enter" : "Send to &new playlist"); uAppendMenu(menu, MF_STRING, ID_AUTOSEND, "Send to &autosend playlist"); if (!static_api_ptr_t<core_version_info_v2>()->test_version(0, 9, 6, 0)) { uAppendMenu(menu, MF_STRING, ID_REMOVE, "&Remove from library"); uAppendMenu(menu, MF_STRING, ID_REMOVEDEAD, "Remove &dead entries (slow)"); } uAppendMenu(menu, MF_SEPARATOR, 0, ""); contextmenu_manager::g_create(p_menu_manager); p_node->sort_entries(); if (p_menu_manager.is_valid()) { p_menu_manager->init_context(p_node->get_entries(), 0); p_menu_manager->win32_build_menu(menu, IDM_MANAGER_BASE, -1); menu_helpers::win32_auto_mnemonics(menu); } } int cmd = TrackPopupMenu(menu, TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD, pt.x, pt.y, 0, get_wnd(), 0); DestroyMenu(menu); TreeView_Select(list, NULL, TVGN_DROPHILITE); if (cmd) { if (p_menu_manager.is_valid() && (unsigned)cmd >= IDM_MANAGER_BASE) { p_menu_manager->execute_by_id(cmd - IDM_MANAGER_BASE); } else if (cmd >= ID_VIEW_BASE) { unsigned n = cmd - ID_VIEW_BASE; if (n<views.get_count()) { view = views[n].get_ptr(); refresh_tree(); } } else if (cmd<ID_VIEW_BASE) { unsigned cmd2 = 0; switch (cmd) { case ID_NEW: do_playlist(p_node, true, true); break; case ID_SEND: do_playlist(p_node, true); break; case ID_ADD: do_playlist(p_node, false); break; case ID_AUTOSEND: do_autosend_playlist(p_node, view, true); break; case ID_CONF: { static_api_ptr_t<ui_control>()->show_preferences(g_guid_preferences_album_list_panel); } break; case ID_FILT: { m_filter = !m_filter; create_or_destroy_filter(); } break; case ID_REMOVE: p_node->remove_from_db(); break; case ID_REMOVEDEAD: p_node->remove_dead(); break; case ID_REFRESH: if (!m_populated && !cfg_populate) refresh_tree(); break; } if (cmd2) uSendMessage(get_wnd(), WM_COMMAND, cmd2, 0); } } p_menu_manager.release(); /* if (treeitem_context && (treeitem_context != treeitem) && cfg_autosend) TreeView_SelectItem(wnd_tv,treeitem);*/ } return 0; case WM_NOTIFY: { LPNMHDR hdr = (LPNMHDR)lp; switch (hdr->idFrom) { case IDC_TREE: { if (hdr->code == TVN_ITEMEXPANDING) { LPNMTREEVIEW param = (LPNMTREEVIEW)hdr; if (cfg_picmixer && (param->action == TVE_EXPAND)) { TreeView_CollapseOtherNodes(param->hdr.hwndFrom, param->itemNew.hItem); } } else if (hdr->code == TVN_SELCHANGED) { LPNMTREEVIEW param = (LPNMTREEVIEW)hdr; p_selection = (node*)param->itemNew.lParam; if ((param->action == TVC_BYMOUSE || param->action == TVC_BYKEYBOARD)) { if (cfg_autosend) do_autosend_playlist(p_selection, view); } if (m_selection_holder.is_valid()) { m_selection_holder->set_selection(p_selection.is_valid() ? p_selection->get_entries() : metadb_handle_list()); } #if 0 if (cfg_picmixer) { HTREEITEM ti_parent_old = TreeView_GetParent(param->hdr.hwndFrom, param->itemOld.hItem); HTREEITEM ti_parent_new = TreeView_GetParent(param->hdr.hwndFrom, param->itemNew.hItem); if (/*ti_parent_old != param->itemNew.hItem && */!TreeView_IsChild(param->hdr.hwndFrom, param->itemNew.hItem, param->itemOld.hItem)) { HTREEITEM ti = //TreeView_GetLevel(param->hdr.hwndFrom, param->itemNew.hItem) < TreeView_GetLevel(param->hdr.hwndFrom, param->itemOld.hItem) ? TreeView_GetCommonParentChild(param->hdr.hwndFrom, param->itemOld.hItem, param->itemNew.hItem) //: param->itemOld.hItem ; if (ti && ti != TVI_ROOT) TreeView_Expand(param->hdr.hwndFrom, ti, TVE_COLLAPSE); } if (ti_parent_new) { HTREEITEM child = TreeView_GetChild(param->hdr.hwndFrom, ti_parent_new); while (child) { if (child != param->itemNew.hItem) { } } } } #endif } } break; } } break; case WM_DESTROY: static_api_ptr_t<library_manager_v3>()->unregister_callback(this); modeless_dialog_manager::g_remove(wnd); destroy_tree(); destroy_filter(); m_selection_holder.release(); m_root.release(); p_selection.release(); if (initialised) { list_wnd.remove_item(this); if (list_wnd.get_count() == 0) { DeleteFont(g_font); g_font = 0; } initialised = false; } break; } return DefWindowProc(wnd, msg, wp, lp); }
BOOL TreeView::SelectItem(HTREEITEM item) { return TreeView_Select(window_, item, TVGN_CARET); }
LRESULT CALLBACK CFG_MainProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: { g_tvIndexCFG = 0; g_hwndTree = GetDlgItem(hDlg,IDC_TREE_CONF); SendMessage(g_hwndTree, TVM_SETIMAGELIST , TVSIL_NORMAL, (LPARAM)g_hImageListIcons); SendMessage(g_hwndTree, TVM_SETIMAGELIST , TVSIL_STATE, (LPARAM)g_hImageListStates); HTREEITEM hNewItem; hNewItem = TreeView_AddItem(27,g_lang.GetString("ConfigGeneral")); hNewItem = TreeView_AddItem(15,g_lang.GetString("ConfigMinimizer")); hNewItem = TreeView_AddItem(28,"mIRC"); hNewItem = TreeView_AddItem(3,"Account (XMPP)"); hNewItem = TreeView_AddItem(16,g_lang.GetString("ConfigExtExe")); hNewItem = TreeView_AddItem(25,g_lang.GetString("ConfigGraphic")); hNewItem = TreeView_AddItem(13,g_lang.GetString("ConfigNetwork")); hNewItem = TreeView_AddItem(20 ,g_lang.GetString("ConfigGames")); if (hNewItem) TreeView_Select(g_hwndTree, hNewItem, TVGN_CARET); for(UINT i=0;i<gm.GamesInfo.size();i++) hNewItem = TreeView_AddItem(gm.GamesInfo[i].iIconIndex,gm.GamesInfo[i].szGAME_SHORTNAME); TreeView_Select(g_hwndTree, NULL, TVGN_CARET); for(UINT i=0; i<gm.GamesInfo.size();i++) { GamesInfoCFG[i].bActive = gm.GamesInfo[i].bActive; GamesInfoCFG[i].bUseHTTPServerList[0] = gm.GamesInfo[i].bUseHTTPServerList[0]; GamesInfoCFG[i].dwMasterServerPORT = gm.GamesInfo[i].dwMasterServerPORT; strcpy(GamesInfoCFG[i].szGAME_NAME, gm.GamesInfo[i].szGAME_NAME); strcpy(GamesInfoCFG[i].szMasterServerIP[0], gm.GamesInfo[i].szMasterServerIP[0]); GamesInfoCFG[i].vGAME_INST = gm.GamesInfo[i].vGAME_INST; } memcpy(&AppCFGtemp,&AppCFG,sizeof(APP_SETTINGS_NEW)); CFG_g_sMIRCoutputTemp = g_sMIRCoutput; SetDlgItemText(hDlg,IDOK,g_lang.GetString("Ok")); SetDlgItemText(hDlg,IDC_BUTTON_DEFAULT,g_lang.GetString("SetDefault")); SetDlgItemText(hDlg,IDCANCEL,g_lang.GetString("Cancel")); CenterWindow(hDlg); CFG_OnTabbedDialogInit(hDlg) ; return TRUE; } case WM_NOTIFY: { NMTREEVIEW *lpnmtv; lpnmtv = (LPNMTREEVIEW)lParam; switch (wParam) { case IDC_TREE_CONF: { NMTREEVIEW *pnmtv; pnmtv = (LPNMTREEVIEW) lParam; if((lpnmtv->hdr.code == TVN_SELCHANGED) ) { if((g_bChanged==true) && (pnmtv->action == TVC_BYMOUSE)) CFG_ApplySettings(); CFG_OnSelChanged(hDlg); } } break; } break; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDCANCEL: LocalFree(g_pHdr); EndDialog(hDlg, LOWORD(wParam)); return TRUE; case IDOK: { CFG_ApplySettings(); if(AppCFGtemp.bAutostart) AddAutoRun(EXE_PATH); else RemoveAutoRun(); if(AppCFGtemp.bUse_minimize) { UnregisterHotKey(NULL, HOTKEY_ID); if (!RegisterHotKey(NULL, HOTKEY_ID, AppCFGtemp.dwMinimizeMODKey ,AppCFGtemp.cMinimizeKey)) { //probably already registred MessageBox(NULL,g_lang.GetString("ErrorRegHotkey"),"Hotkey error",NULL); } }else { UnregisterHotKey(NULL, HOTKEY_ID); } for(UINT i=0; i<gm.GamesInfo.size();i++) { gm.GamesInfo[i].bActive = GamesInfoCFG[i].bActive; gm.GamesInfo[i].bUseHTTPServerList[0] = GamesInfoCFG[i].bUseHTTPServerList[0]; gm.GamesInfo[i].dwMasterServerPORT = GamesInfoCFG[i].dwMasterServerPORT; strcpy(gm.GamesInfo[i].szMasterServerIP[0], GamesInfoCFG[i].szMasterServerIP[0]); gm.GamesInfo[i].vGAME_INST = GamesInfoCFG[i].vGAME_INST; } memcpy(&AppCFG,&AppCFGtemp,sizeof(APP_SETTINGS_NEW)); //memcpy(&GI,&GamesInfoCFG,sizeof(GAME_INFO)*GamesInfo.size()); // ZeroMemory(&GamesInfoCFG,sizeof(GAME_INFO)*GamesInfo.size()); ZeroMemory(&AppCFGtemp,sizeof(APP_SETTINGS_NEW)); HANDLE hThread=NULL; DWORD dwThreadIdBrowser=0; hThread = CreateThread( NULL, 0, &CFG_Save,(LPVOID)0 ,0, &dwThreadIdBrowser); if (hThread == NULL) { g_log.AddLogInfo(GS_LOG_WARNING, "CreateThread CFG_Save failed (%d)\n", GetLastError() ); } else { CloseHandle( hThread ); } // CFG_Save(0); LocalFree(g_pHdr); EndDialog(hDlg, LOWORD(wParam)); return TRUE; } case IDC_BUTTON_DEFAULT: { Default_Appsettings(); // Default_GameSettings(); memcpy(&AppCFGtemp,&AppCFG,sizeof(APP_SETTINGS_NEW)); //memcpy(&GamesInfoCFG,&GI,sizeof(GAME_INFO)*GamesInfo.size()); //GamesInfoCFG = GamesInfo; g_currSelCfg=-1; CFG_OnSelChanged(hDlg); return TRUE; } break; } } } return FALSE; }
LRESULT CALLBACK TreeListTreeProcedure( __in HWND hWnd, __in UINT uMsg, __in WPARAM wp, __in LPARAM lp, __in UINT_PTR uIdSubclass, __in DWORD_PTR dwData ) { TVHITTESTINFO hti; WORD x, y; LPNMHDR pNmhdr = (LPNMHDR)lp; PTREELIST_OBJECT Object = (PTREELIST_OBJECT)dwData; int Column; if (uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK || uMsg == WM_RBUTTONDOWN) { x = GET_X_LPARAM(lp); y = GET_Y_LPARAM(lp); hti.pt.x = x; hti.pt.y = y; TreeView_HitTest(hWnd, &hti); if(hti.flags == TVHT_ONITEMRIGHT) { // // Select current row // TreeView_Select(hWnd, hti.hItem, TVGN_CARET); // // Post notification to parent window // Column = TreeListHitTestColumn(Object, &hti); if(Column != -1) { PostMessage(Object->hWnd, WM_TREELIST_DBLCLK, (WPARAM)hti.hItem, (LPARAM)Column); } } } if (uMsg == WM_HSCROLL) { TreeListOnHScroll(hWnd, uMsg, wp, lp); return 0; } /* if (uMsg == WM_NOTIFY) { if(Object->hWndHeader == pNmhdr->hwndFrom) { switch (pNmhdr->code) { case HDN_BEGINTRACK: return TreeListOnBeginTrack(Object, pNmhdr); case HDN_TRACK: return TreeListOnTrack(Object, pNmhdr); case HDN_ENDTRACK: return TreeListOnEndTrack(Object, pNmhdr); case HDN_DIVIDERDBLCLICK: return TreeListOnDividerDbclk(Object, pNmhdr); case HDN_ITEMCLICK: return TreeListOnItemClick(Object, pNmhdr); } } } if (uMsg == WM_SIZE) { return TreeListTreeOnSize(hWnd, uMsg, wp, lp); }*/ return DefSubclassProc(hWnd, uMsg, wp, lp); }
LRESULT MusicBrowserUI::TreeViewWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { WNDPROC lpOldProc = (WNDPROC)GetProp(hwnd, "oldproc" ); static bool dragging = false; static RECT dragRect; static HTREEITEM dragItem = NULL; static bool selectedOnMouseDown = false; //return CallWindowProc(lpOldProc, hwnd, msg, wParam, lParam ); switch(msg) { case WM_DESTROY: { // Put back old window proc and SetWindowLong( hwnd, GWL_WNDPROC, (DWORD)lpOldProc ); // remove window property RemoveProp( hwnd, "oldproc" ); RemoveProp( hwnd, "this" ); break; } case WM_MOUSEMOVE: { if(dragging) { if(wParam & MK_LBUTTON) { POINT dragPt; dragPt.x = LOWORD(lParam); dragPt.y = HIWORD(lParam); if( !PtInRect(&dragRect, dragPt) ) { SetCapture(NULL); dragging = false; NM_TREEVIEW nm_treeview; memset(&nm_treeview, 0x00, sizeof(NM_TREEVIEW)); nm_treeview.hdr.code = TVN_BEGINDRAG; nm_treeview.hdr.hwndFrom = hwnd; nm_treeview.hdr.idFrom = GetWindowLong(hwnd, GWL_ID); nm_treeview.itemNew.hItem = dragItem; nm_treeview.itemNew.mask = TVIF_STATE|TVIF_PARAM; nm_treeview.itemNew.stateMask = TVIS_BOLD|TVIS_CUT|TVIS_DROPHILITED|TVIS_EXPANDED|TVIS_SELECTED|TVIS_EXPANDEDONCE; TreeView_GetItem(hwnd, &nm_treeview.itemNew); nm_treeview.ptDrag.x = LOWORD(lParam); nm_treeview.ptDrag.y = HIWORD(lParam); SendMessage(GetParent(hwnd), WM_NOTIFY, (WPARAM)nm_treeview.hdr.idFrom, (LPARAM)&nm_treeview); return TRUE; } } } break; } case WM_RBUTTONDOWN: { SetFocus(hwnd); HTREEITEM item; TV_HITTESTINFO hti; hti.pt.x = LOWORD(lParam); hti.pt.y = HIWORD(lParam); item = TreeView_HitTest(hwnd, &hti); if(item && (hti.flags & TVHT_ONITEM)) { HTREEITEM focusItem = TreeView_GetSelection(hwnd); TV_ITEM tv_item; tv_item.hItem = focusItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; TreeView_GetItem(hwnd, &tv_item); bool wasFocusSelected = (tv_item.state & TVIS_SELECTED) != 0; tv_item.hItem = item; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; TreeView_GetItem(hwnd, &tv_item); bool wasFocus = item == focusItem; bool wasSelected = (tv_item.state & TVIS_SELECTED) != 0; if(!wasSelected) { // need to iterate all the items and // make sure they aren't selected HTREEITEM rootItem = TreeView_GetRoot(hwnd); if(rootItem) { do { tv_item.hItem = rootItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = 0; TreeView_SetBranch(hwnd, &tv_item); }while(rootItem = TreeView_GetNextSibling(hwnd, rootItem)); } // need to set this back cause windows won't // set it if it is already the focus item and // we just deselected it if(wasSelected && wasFocus) { tv_item.hItem = focusItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = TVIS_SELECTED; TreeView_SetItem(hwnd, &tv_item); } } TreeView_Select(hwnd, item, TVGN_CARET); if(!wasFocus && wasFocusSelected && wasSelected) { tv_item.hItem = focusItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = TVIS_SELECTED; TreeView_SetItem(hwnd, &tv_item); } } //return TRUE; break; } case WM_RBUTTONUP: { break; } case WM_LBUTTONDBLCLK: { TV_ITEM tv_item; TV_HITTESTINFO tv_htinfo; KillTimer(hwnd, 1); //GetCursorPos(&tv_htinfo.pt); //ScreenToClient(m_hMusicView, &tv_htinfo.pt); tv_htinfo.pt.x = LOWORD(lParam); tv_htinfo.pt.y = HIWORD(lParam); if(TreeView_HitTest(m_hMusicView, &tv_htinfo) && (tv_htinfo.flags & TVHT_ONITEM)) { tv_item.hItem = TreeView_GetSelection(m_hMusicView); tv_item.mask = TVIF_PARAM | TVIF_HANDLE; tv_item.lParam = 0; TreeView_GetItem(m_hMusicView, &tv_item); TreeData* treedata = (TreeData*)tv_item.lParam; bool playNow; m_context->prefs->GetPrefBoolean(kPlayImmediatelyPref, &playNow); if(treedata && treedata->IsTrack()) { if(playNow && !m_pParent) { ClearPlaylistEvent(); } PlaylistItem *item; item = new PlaylistItem(*treedata->m_pTrack); m_plm->AddItem(item, false); } else if(treedata && treedata->IsPlaylist()) { if(playNow && !m_pParent) { ClearPlaylistEvent(); } m_plm->ReadPlaylist(treedata->m_oPlaylistPath.c_str()); } else if(treedata && treedata->IsPortable()) { EditPortablePlaylist(treedata->m_pPortable); } else if(treedata && treedata->IsStream()) { if(playNow && !m_pParent) { ClearPlaylistEvent(); } PlaylistItem *item; item = new PlaylistItem(*treedata->m_pStream); m_plm->AddItem(item, false); } else if(tv_htinfo.hItem == m_hNewPlaylistItem) { NewPlaylist(); } else if(tv_htinfo.hItem == m_hNewPortableItem) { m_context->target->AcceptEvent(new ShowPreferencesEvent(3)); } else if(tv_htinfo.hItem == m_hNewFavoritesItem) { NewFavoriteEvent(); } } break; } case WM_LBUTTONDOWN: { bool shiftKeyPressed = IsShiftDown(); bool ctrlKeyPressed = IsCtrlDown(); selectedOnMouseDown = false; SetFocus(hwnd); HTREEITEM item; TV_HITTESTINFO hti; hti.pt.x = LOWORD(lParam); hti.pt.y = HIWORD(lParam); int dx = GetSystemMetrics(SM_CXDRAG); int dy = GetSystemMetrics(SM_CYDRAG); dragRect.top = hti.pt.y - dy; dragRect.bottom = hti.pt.y + dy; dragRect.left = hti.pt.x - dx; dragRect.right = hti.pt.x + dx; item = TreeView_HitTest(hwnd, &hti); if(item && (hti.flags & TVHT_ONITEM)) { dragItem = item; HTREEITEM focusItem = TreeView_GetSelection(hwnd); TV_ITEM tv_item; tv_item.hItem = focusItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; TreeView_GetItem(hwnd, &tv_item); bool wasFocusSelected = (tv_item.state & TVIS_SELECTED) != 0; tv_item.hItem = item; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; TreeView_GetItem(hwnd, &tv_item); bool wasFocus = item == focusItem; bool wasSelected = (tv_item.state & TVIS_SELECTED) != 0; HTREEITEM rootItem = TreeView_GetRoot(hwnd); selectedOnMouseDown = wasSelected && (CountSelectedItems(rootItem) == 1); if(ctrlKeyPressed) { /*TreeView_Select(hwnd, item, TVGN_CARET); if(focusItem) { tv_item.hItem = focusItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = TVIS_SELECTED; TreeView_SetItem(hwnd, &tv_item); }*/ return TRUE; } else if(shiftKeyPressed) { // need to iterate all the items and // make sure they aren't selected HTREEITEM rootItem = TreeView_GetRoot(hwnd); if(rootItem) { do { tv_item.hItem = rootItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = 0; TreeView_SetBranch(hwnd, &tv_item); }while(rootItem = TreeView_GetNextSibling(hwnd, rootItem)); } HTREEITEM topItem = NULL; HTREEITEM bottomItem = NULL; HTREEITEM dummyItem = NULL; dummyItem = focusItem; // which item is above the other? search downward first while(dummyItem = TreeView_GetNextSibling(hwnd, dummyItem)) { if(dummyItem == item) { topItem = focusItem; bottomItem = item; break; } } // did we find out? no? search upward next if(!topItem) { dummyItem = focusItem; // which item is above the other? search downward first while(dummyItem = TreeView_GetPrevSibling(hwnd, dummyItem)) { if(dummyItem == item) { topItem = item; bottomItem = focusItem; break; } } } // if they are not siblings then we do not support shift // selection so just pass it on if(topItem) { // need to iterate all the items and // select them rootItem = topItem; do { tv_item.hItem = rootItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = TVIS_SELECTED; TreeView_SetBranch(hwnd, &tv_item); }while(rootItem != bottomItem && (rootItem = TreeView_GetNextSibling(hwnd, rootItem))); return TRUE; } break; } else { if(!wasSelected) { // need to iterate all the items and // make sure they aren't selected HTREEITEM rootItem = TreeView_GetRoot(hwnd); if(rootItem) { do { tv_item.hItem = rootItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = 0; TreeView_SetBranch(hwnd, &tv_item); }while(rootItem = TreeView_GetNextSibling(hwnd, rootItem)); } // need to set this back cause windows won't // set it if it is already the focus item and // we just deselected it if(wasSelected && wasFocus) { tv_item.hItem = focusItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = TVIS_SELECTED; TreeView_SetItem(hwnd, &tv_item); } } TreeView_Select(hwnd, item, TVGN_CARET); if(!wasFocus && wasFocusSelected && wasSelected) { tv_item.hItem = focusItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = TVIS_SELECTED; TreeView_SetItem(hwnd, &tv_item); } } SetCapture(hwnd); dragging = true; return TRUE; } break; } case WM_TIMER: { KillTimer(hwnd, 1); EditItemLabel(hwnd, g_editItem); break; } case WM_LBUTTONUP: { bool shiftKeyPressed = IsShiftDown(); bool ctrlKeyPressed = IsCtrlDown(); SetCapture(NULL); dragging = false; HTREEITEM item; TV_HITTESTINFO hti; hti.pt.x = LOWORD(lParam); hti.pt.y = HIWORD(lParam); item = TreeView_HitTest(hwnd, &hti); if(item && (hti.flags & TVHT_ONITEM)) { HTREEITEM focusItem = TreeView_GetSelection(hwnd); TV_ITEM tv_item; tv_item.hItem = focusItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; TreeView_GetItem(hwnd, &tv_item); bool wasFocusSelected = (tv_item.state & TVIS_SELECTED) != 0; tv_item.hItem = item; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; TreeView_GetItem(hwnd, &tv_item); bool wasFocus = item == focusItem; bool wasSelected = (tv_item.state & TVIS_SELECTED) != 0; if(ctrlKeyPressed) { TreeView_Select(hwnd, item, TVGN_CARET); if(wasSelected) { tv_item.hItem = item; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = 0; TreeView_SetItem(hwnd, &tv_item); } if(!wasFocus && wasFocusSelected || !wasSelected) { tv_item.hItem = focusItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = TVIS_SELECTED; TreeView_SetItem(hwnd, &tv_item); } return TRUE; } else if(!shiftKeyPressed) { // need to iterate all the items and // make sure they aren't selected HTREEITEM rootItem = TreeView_GetRoot(hwnd); if(rootItem) { do { tv_item.hItem = rootItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = 0; TreeView_SetBranch(hwnd, &tv_item); }while(rootItem = TreeView_GetNextSibling(hwnd, rootItem)); } // need to set this back cause windows won't // set it if it is already the focus item and // we just deselected it if(wasSelected && wasFocus) { tv_item.hItem = focusItem; tv_item.mask = TVIF_STATE; tv_item.stateMask = TVIS_SELECTED; tv_item.state = TVIS_SELECTED; TreeView_SetItem(hwnd, &tv_item); } if(selectedOnMouseDown) { if(g_editItem != item) { // i should do this in the notify but it is ignoring me if(item != m_hMyMusicItem && item != m_hPlaylistItem && item != m_hAllItem && item != m_hUncatItem && item != m_hNewPlaylistItem && item != m_hStreamsItem && item != m_hFavoritesItem && item != m_hNewFavoritesItem && item != m_hPortableItem && TreeView_GetParent(m_hMusicView, item) != m_hPortableItem && item != m_hCDItem && TreeView_GetParent(m_hMusicView, item) != m_hCDItem) { // pause a half sec so this does not // look so jarring //Sleep(500); SetTimer(hwnd, 1, GetDoubleClickTime(), NULL); g_editItem = item; //EditItemLabel(hwnd, item); } } else { g_editItem = NULL; } } } } break; } case WM_SETFOCUS: case WM_KILLFOCUS: { UpdateButtonStates(); InvalidateRect(hwnd, NULL, TRUE); break; } } // Pass all non-custom messages to old window proc return CallWindowProc(lpOldProc, hwnd, msg, wParam, lParam ); }
BOOL TreeView::SelectItem(HTREEITEM hItem) { return TreeView_Select(m_hWindow, hItem, TVGN_CARET); }