void TpresetsPage::onRename(int menuCmd) { const char_t *AVIname=deci->getSourceName(); if (menuCmd==0) { HMENU hmn=LoadMenu(hi,MAKEINTRESOURCE(IDR_MENU_PRESET)),hmn2=_(GetSubMenu(hmn,1)); RECT r; GetWindowRect(GetDlgItem(m_hwnd,IDC_BT_PRESET_RENAME_MENU),&r); if (AVIname[0]=='\0') { EnableMenuItem(hmn2,1,MF_BYPOSITION|MF_GRAYED); } menuCmd=TrackPopupMenu(hmn2,TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RETURNCMD,r.left-1,r.bottom,0,m_hwnd,0); DestroyMenu(hmn); } int i=lvGetSelItem(IDC_LV_PRESETS); if (menuCmd==ID_MNI_PRESET_RENAMETOFILE) { char_t presetName[MAX_PATH]; Tpreset::normalizePresetName(presetName, AVIname, countof(presetName)); parent->localPresets->nextUniqueName(presetName, countof(presetName)); renamePreset(presetName); InvalidateRect(hlv,NULL,FALSE); } else if (menuCmd==ID_MNI_PRESET_RENAMETOEXE) { char_t presetName[MAX_PATH]; Tpreset::normalizePresetName(presetName, deci->getExeflnm(), countof(presetName)); parent->localPresets->nextUniqueName(presetName, countof(presetName)); renamePreset(presetName); InvalidateRect(hlv,NULL,FALSE); } else if (menuCmd==ID_MNI_PRESET_RENAME) { SetFocus(hlv); ListView_EditLabel(hlv,i); } }
void CManageBookmarksDialog::OnListViewRename() { HWND hListView = GetDlgItem(m_hDlg,IDC_MANAGEBOOKMARKS_LISTVIEW); int iItem = ListView_GetNextItem(hListView,-1,LVNI_SELECTED); if(iItem != -1) { ListView_EditLabel(hListView,iItem); } }
void Subsets_OpenSave_OnRename (HWND hDlg) { HWND hList = GetDlgItem (hDlg, IDC_SUBSET_LIST); short idxSelected = LV_GetSelected (hList); if (idxSelected != -1) { SetFocus (hList); ListView_EditLabel (hList, idxSelected); } }
static VOID GroupRename(HWND hwndDlg) { INT nItem; HWND hwndLV; hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST); nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED); if (nItem != -1) { (void)ListView_EditLabel(hwndLV, nItem); } }
static VOID UserRename(HWND hwndDlg) { HWND hwndLV; INT nItem; hwndLV = GetDlgItem(hwndDlg, IDC_USERS_LIST); if (hwndLV == NULL) return; nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED); if (nItem != -1) { (void)ListView_EditLabel(hwndLV, nItem); } }
BOOL WINAPI LVProc(HWND hList, UINT wMsg, WPARAM wParam, LPARAM lParam) { switch (wMsg) { case WM_CHAR: { // pass on keyboard input to the parent SendMessage(GetParent(hList), wMsg, wParam, lParam); break; } case WM_LBUTTONDOWN: { // single-click editing LV_HITTESTINFO hti; memset(&hti, 0, sizeof(hti)); hti.pt.x = LOWORD(lParam); hti.pt.y = HIWORD(lParam); if( ListView_HitTest(hList,&hti) != -1 ) { SetFocus(hList); ListView_EditLabel(hList,hti.iItem); } return 0; } case WM_LBUTTONDBLCLK: { // treat the double-click as another single click SendMessage(hList, WM_LBUTTONDOWN, wParam, lParam); return 0; } } // pass the message on to the original window procedure return CallWindowProc(LVProcPrev, hList, wMsg, wParam, lParam); }
void CManageBookmarksDialog::OnBookmarkFolderAdded(const CBookmarkFolder &ParentBookmarkFolder, const CBookmarkFolder &BookmarkFolder,std::size_t Position) { m_pBookmarkTreeView->BookmarkFolderAdded(ParentBookmarkFolder,BookmarkFolder,Position); if(IsEqualGUID(ParentBookmarkFolder.GetGUID(),m_guidCurrentFolder)) { int iItem = m_pBookmarkListView->InsertBookmarkFolderIntoListView(BookmarkFolder,static_cast<int>(Position)); if(IsEqualGUID(BookmarkFolder.GetGUID(),m_guidNewFolder)) { HWND hListView = GetDlgItem(m_hDlg,IDC_MANAGEBOOKMARKS_LISTVIEW); SetFocus(hListView); NListView::ListView_SelectAllItems(hListView,FALSE); NListView::ListView_SelectItem(hListView,iItem,TRUE); ListView_EditLabel(hListView,iItem); m_bNewFolderAdded = false; } } }
static BOOL CreateNewValue(HKEY hRootKey, LPCWSTR pszKeyPath, DWORD dwType) { WCHAR szNewValueFormat[128]; WCHAR szNewValue[128]; int iIndex = 1; BYTE data[128]; DWORD dwExistingType, cbData; LONG lResult; HKEY hKey; LVFINDINFO lvfi; if (RegOpenKeyExW(hRootKey, pszKeyPath, 0, KEY_QUERY_VALUE | KEY_SET_VALUE, &hKey) != ERROR_SUCCESS) return FALSE; LoadStringW(hInst, IDS_NEW_VALUE, szNewValueFormat, COUNT_OF(szNewValueFormat)); do { wsprintf(szNewValue, szNewValueFormat, iIndex++); cbData = sizeof(data); lResult = RegQueryValueExW(hKey, szNewValue, NULL, &dwExistingType, data, &cbData); } while(lResult == ERROR_SUCCESS); switch(dwType) { case REG_DWORD: cbData = sizeof(DWORD); break; case REG_SZ: case REG_EXPAND_SZ: cbData = sizeof(WCHAR); break; case REG_MULTI_SZ: /* * WARNING: An empty multi-string has only one null char. * Indeed, multi-strings are built in the following form: * str1\0str2\0...strN\0\0 * where each strI\0 is a null-terminated string, and it * ends with a terminating empty string. * Therefore an empty multi-string contains only the terminating * empty string, that is, one null char. */ cbData = sizeof(WCHAR); break; case REG_QWORD: /* REG_QWORD_LITTLE_ENDIAN */ cbData = sizeof(DWORDLONG); // == sizeof(DWORD) * 2; break; default: cbData = 0; break; } memset(data, 0, cbData); lResult = RegSetValueExW(hKey, szNewValue, 0, dwType, data, cbData); RegCloseKey(hKey); if (lResult != ERROR_SUCCESS) { return FALSE; } RefreshListView(g_pChildWnd->hListWnd, hRootKey, pszKeyPath); /* locate the newly added value, and get ready to rename it */ memset(&lvfi, 0, sizeof(lvfi)); lvfi.flags = LVFI_STRING; lvfi.psz = szNewValue; iIndex = ListView_FindItem(g_pChildWnd->hListWnd, -1, &lvfi); if (iIndex >= 0) (void)ListView_EditLabel(g_pChildWnd->hListWnd, iIndex); return TRUE; }
uint32 FolderWindow::onMessage(uint32 message, uint32 wParam, uint32 lParam) { switch (message) { case WM_CONTEXTMENU: { POINT pt; GetCursorPos(&pt); int count = ListView_GetSelectedCount(list->getHandle()); int item = ListView_GetNextItem(list->getHandle(), -1, LVNI_SELECTED); if (item >= 0) { int pos = list->getItemParam(item); while (count > 1 && item >= 0 && items[pos].type != ITEM_FOLDER && items[pos].type != ITEM_REPLAY) { item = ListView_GetNextItem(list->getHandle(), item, LVNI_SELECTED); pos = (item > 0 ? list->getItemParam(item) : -1); } EnableMenuItem(ctxMenu, ID_MENU_OPEN, count > 1 ? MF_GRAYED : MF_ENABLED); if (pos >= 0 && (items[pos].type == ITEM_FOLDER || items[pos].type == ITEM_REPLAY)) { EnableMenuItem(ctxMenu, ID_MENU_BACKUP, MF_ENABLED); EnableMenuItem(ctxMenu, ID_MENU_COPY, MF_ENABLED); EnableMenuItem(ctxMenu, ID_MENU_DELETE, MF_ENABLED); EnableMenuItem(ctxMenu, ID_MENU_RENAME, count > 1 ? MF_GRAYED : MF_ENABLED); } else { EnableMenuItem(ctxMenu, ID_MENU_BACKUP, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_COPY, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_DELETE, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_RENAME, MF_GRAYED); } } else { EnableMenuItem(ctxMenu, ID_MENU_OPEN, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_BACKUP, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_COPY, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_DELETE, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_RENAME, MF_GRAYED); } ClipboardReader cbReader(CF_HDROP); EnableMenuItem(ctxMenu, ID_MENU_PASTE, cbReader.getData() ? MF_ENABLED : MF_GRAYED); int result = TrackPopupMenuEx(ctxMenu, TPM_HORIZONTAL | TPM_LEFTALIGN | TPM_RETURNCMD | TPM_NONOTIFY, pt.x, pt.y, list->getHandle(), NULL); switch (result) { case ID_MENU_OPEN: { NMITEMACTIVATE ia; memset(&ia, 0, sizeof ia); ia.hdr.code = LVN_ITEMACTIVATE; ia.hdr.hwndFrom = list->getHandle(); ia.iItem = item; onMessage(WM_NOTIFY, 0, (uint32) &ia); } break; case ID_MENU_BACKUP: { BatchDialog batch(BatchDialog::mCopy); for (int item = ListView_GetNextItem(list->getHandle(), -1, LVNI_SELECTED); item >= 0; item = ListView_GetNextItem(list->getHandle(), item, LVNI_SELECTED)) { int pos = list->getItemParam(item); if (pos >= 0 && items[pos].type == ITEM_REPLAY) batch.addReplay(items[pos].path); else if (pos >= 0 && items[pos].type == ITEM_FOLDER) batch.addFolder(items[pos].path); } batch.run(list->getHandle()); } break; case ID_MENU_COPY: case ID_MENU_PASTE: case ID_MENU_DELETE: case ID_MENU_RENAME: { NMLVKEYDOWN kd; memset(&kd, 0, sizeof kd); kd.hdr.code = LVN_KEYDOWN; kd.hdr.hwndFrom = list->getHandle(); if (result == ID_MENU_COPY) kd.wVKey = 'C'; else if (result == ID_MENU_PASTE) kd.wVKey = 'V'; else if (result == ID_MENU_DELETE) kd.wVKey = VK_DELETE; else if (result == ID_MENU_RENAME) kd.wVKey = VK_F2; onMessage(WM_NOTIFY, VK_CONTROL, (uint32) &kd); } break; case ID_MENU_FOLDER: { String newdir = "New Folder"; String fulldir = String::buildFullName(path, newdir); FileInfo fi; for (int num = 1; pathFileExists(fulldir); num++) { newdir = String::format("New Folder (%d)", num); fulldir = String::buildFullName(path, newdir); } if (CreateDirectory(fulldir, NULL)) { int pos = list->addItem(newdir, getApp()->getImageLibrary()->getListIndex("IconClosedFolder"), items.length()); ViewItem& item = items.push(); item.path = fulldir; item.pos = pos; item.type = ITEM_FOLDER; ListView_EditLabel(list->getHandle(), pos); } } break; } } break; case WM_NOTIFY: { NMHDR* pnm = (NMHDR*) lParam; if (pnm->code == LVN_ITEMACTIVATE) { NMITEMACTIVATE* pia = (NMITEMACTIVATE*) pnm; int pos = -1; if (pia->iItem >= 0) pos = list->getItemParam(pia->iItem); if (pos >= 0 && pos < items.length()) { if (items[pos].type == ITEM_UPFOLDER || items[pos].type == ITEM_FOLDER) mainWnd->pushView(new FolderViewItem(items[pos].path)); else if (items[pos].type == ITEM_REPLAY) mainWnd->pushView(new ReplayViewItem(items[pos].path)); } } else if (pnm->code == LVN_BEGINDRAG) { Array<String> sel; getSelList(sel); if (sel.length()) { HGLOBAL data = CreateFileDrop(sel); if (data) { selfDrag = true; DoDragDrop(CF_HDROP, data, DROPEFFECT_MOVE | DROPEFFECT_COPY | DROPEFFECT_LINK); selfDrag = false; } } return TRUE; } else if (pnm->code == LVN_BEGINLABELEDIT) { NMLVDISPINFO* di = (NMLVDISPINFO*) lParam; int pos = -1; if (di->item.iItem >= 0) pos = list->getItemParam(di->item.iItem); if (pos >= 0 && pos < items.length() && (items[pos].type == ITEM_FOLDER || items[pos].type == ITEM_REPLAY)) return FALSE; return TRUE; } else if (pnm->code == LVN_ENDLABELEDIT) { NMLVDISPINFO* di = (NMLVDISPINFO*) lParam; int pos = -1; if (di->item.iItem >= 0) pos = list->getItemParam(di->item.iItem); if (di->item.pszText && pos >= 0 && pos < items.length() && (items[pos].type == ITEM_FOLDER || items[pos].type == ITEM_REPLAY)) { String src = items[pos].path; String dst = String::buildFullName(String::getPath(src), di->item.pszText); src += '\0'; if (items[pos].type == ITEM_REPLAY) dst += ".w3g"; dst += '\0'; SHFILEOPSTRUCT op; memset(&op, 0, sizeof op); op.wFunc = FO_RENAME; op.pFrom = src; op.pTo = dst; if (SHFileOperationEx(&op) == 0) { items[pos].path = String::buildFullName(String::getPath(items[pos].path), di->item.pszText); if (items[pos].type == ITEM_REPLAY) items[pos].path += ".w3g"; return TRUE; } } rebuild(); return FALSE; } else if (pnm->code == LVN_COLUMNCLICK) { NMLISTVIEW* lv = (NMLISTVIEW*) lParam; bool colShow[colCount] = {true, cfg.selColumns & COL_SAVED, cfg.selColumns & COL_SIZE, cfg.selColumns & COL_NAME, cfg.selColumns & COL_RATIO, cfg.selColumns & COL_LENGTH, cfg.selColumns & COL_MODE }; int col = lv->iSubItem; for (int i = 0; i < col && col < colCount - 1; i++) if (!colShow[i]) col++; int pos = 0; while (pos < colCount - 1 && cfg.colSort[pos] != col && cfg.colSort[pos] != ~col) pos++; if (pos == 0) cfg.colSort[0] = ~cfg.colSort[0]; else { for (int i = pos; i > 0; i--) cfg.colSort[i] = cfg.colSort[i - 1]; cfg.colSort[0] = col; } rebuild(); } else if (pnm->code == HDN_ENDDRAG) PostMessage(list->getHandle(), WM_POSTHEADERDRAG, 0, 0); else if (pnm->code == HDN_ENDTRACK) { NMHEADER* nhdr = (NMHEADER*) pnm; bool colShow[colCount] = {true, cfg.selColumns & COL_SAVED, cfg.selColumns & COL_SIZE, cfg.selColumns & COL_NAME, cfg.selColumns & COL_RATIO, cfg.selColumns & COL_LENGTH, cfg.selColumns & COL_MODE }; int count = 0; int colUnpos[colCount]; for (int i = 0; i < colCount; i++) if (colShow[i]) colUnpos[count++] = i; if (nhdr->iItem >= 0 && nhdr->iItem < count && nhdr->pitem && nhdr->pitem->mask & HDI_WIDTH) { int col = colUnpos[nhdr->iItem]; cfg.colWidth[col] = nhdr->pitem->cxy; } } else if (pnm->code == LVN_KEYDOWN) { NMLVKEYDOWN* kd = (NMLVKEYDOWN*) lParam; bool controlKey = ((GetAsyncKeyState(VK_CONTROL) & 0x8000) || wParam == VK_CONTROL); if (kd->wVKey == 'C' && controlKey) { Array<String> sel; getSelList(sel); if (sel.length()) { HGLOBAL hDrop = CreateFileDrop(sel); SetClipboard(CF_HDROP, hDrop); } } else if (kd->wVKey == 'V' && controlKey) { ClipboardReader clip(CF_HDROP); HGLOBAL hDrop = clip.getData(); if (hDrop) doPaste(hDrop, DROPEFFECT_COPY, path); } else if (kd->wVKey == VK_DELETE) { Array<String> sel; getSelList(sel); if (sel.length()) { char* str = FileListToString(sel); SHFILEOPSTRUCT fileop; memset(&fileop, 0, sizeof fileop); fileop.wFunc = FO_DELETE; fileop.pFrom = str; SHFileOperationEx(&fileop); } } else if (kd->wVKey == VK_F2) { SetFocus(list->getHandle()); int sel = ListView_GetNextItem(list->getHandle(), -1, LVNI_FOCUSED); if (sel < 0) sel = 0; ListView_EditLabel(list->getHandle(), sel); } } } break; case WM_DRAGOVER: case WM_DRAGLEAVE: { LVHITTESTINFO ht; LVITEM lvi; memset(&lvi, 0, sizeof lvi); if (message == WM_DRAGOVER) { ht.pt.x = LOWORD(lParam); ht.pt.y = HIWORD(lParam); ListView_HitTest(list->getHandle(), &ht); if (ht.iItem >= 0) { lvi.iItem = ht.iItem; lvi.mask = LVIF_PARAM | LVIF_STATE; lvi.stateMask = LVIS_SELECTED; ListView_GetItem(list->getHandle(), &lvi); if (lvi.lParam < 0 || lvi.lParam >= items.length() || (items[lvi.lParam].type != ITEM_UPFOLDER && items[lvi.lParam].type != ITEM_FOLDER)) ht.iItem = -1; if (selfDrag && (lvi.state & LVIS_SELECTED)) ht.iItem = -1; } if (wParam && selfDrag && ht.iItem == -1 && *(DWORD*) wParam == DROPEFFECT_MOVE) *(DWORD*) wParam = DROPEFFECT_NONE; } else ht.iItem = -1; if (ht.iItem != list->highlight) { lvi.mask = LVIF_STATE; lvi.stateMask = LVIS_DROPHILITED; if (list->highlight >= 0) { lvi.iItem = list->highlight; ListView_SetItem(list->getHandle(), &lvi); } if (ht.iItem >= 0) { lvi.state = LVIS_DROPHILITED; lvi.iItem = ht.iItem; ListView_SetItem(list->getHandle(), &lvi); } list->highlight = ht.iItem; } } break; case WM_DRAGDROP: if (lParam == DROPEFFECT_MOVE || lParam == DROPEFFECT_COPY) { String opTo = path; if (list->highlight >= 0) { int param = list->getItemParam(list->highlight); if (param >= 0 && param < items.length() && (items[param].type == ITEM_UPFOLDER || items[param].type == ITEM_FOLDER)) opTo = items[param].path; } doPaste((HGLOBAL) wParam, lParam, opTo); } return 0; case WM_POSTHEADERDRAG: { bool colShow[colCount] = {true, cfg.selColumns & COL_SAVED, cfg.selColumns & COL_SIZE, cfg.selColumns & COL_NAME, cfg.selColumns & COL_RATIO, cfg.selColumns & COL_LENGTH, cfg.selColumns & COL_MODE }; int count = 0; int colUnpos[colCount]; for (int i = 0; i < colCount; i++) if (colShow[i]) colUnpos[count++] = i; int colOrder[colCount]; ListView_GetColumnOrderArray(list->getHandle(), count, colOrder); int pos = 0; for (int i = 0; i < colCount; i++) if (colShow[cfg.colOrder[i]]) cfg.colOrder[i] = colUnpos[colOrder[pos++]]; } break; case WM_REBUILDLIST: if (ListView_GetEditControl(list->getHandle()) == NULL) rebuild(); break; case WM_UPDATELISTITEM: updateListItem(wParam, lParam); break; default: return M_UNHANDLED; } return 0; }
INT_PTR CListViewEdit::OnPrivateMessage(UINT uMsg,WPARAM wParam,LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch(uMsg) { case WM_APP_KEYDOWN: switch(wParam) { case VK_F2: { int Index = GetExtensionIndex(); if(Index != -1) { switch(m_RenameStage) { case RENAME_FILENAME: SendMessage(m_hwnd,EM_SETSEL,Index + 1,-1); m_RenameStage = RENAME_EXTENSION; break; case RENAME_EXTENSION: SendMessage(m_hwnd,EM_SETSEL,0,-1); m_RenameStage = RENAME_ENTIRE; break; case RENAME_ENTIRE: SendMessage(m_hwnd,EM_SETSEL,0,Index); m_RenameStage = RENAME_FILENAME; break; default: assert(false); break; } } } break; case VK_TAB: { HWND hListView = GetParent(m_hwnd); int iSel = ListView_GetNextItem(hListView,-1,LVNI_ALL|LVNI_SELECTED); NListView::ListView_SelectItem(hListView,iSel,FALSE); int nItems = ListView_GetItemCount(hListView); int iNewSel; if(GetKeyState(VK_SHIFT) & 0x8000) { if(iSel == 0) { iNewSel = nItems - 1; } else { iNewSel = iSel - 1; } } else { if(iSel == (nItems - 1)) { iNewSel = 0; } else { iNewSel = iSel + 1; } } ListView_EditLabel(hListView,iNewSel); } break; } break; } return 0; }
INT_PTR TpresetsPage::msgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: cfgSet(IDFF_lvWidth0,ListView_GetColumnWidth(hlv,0)); if (italicFont) { DeleteObject(italicFont); } italicFont=NULL; if (boldFont) { DeleteObject(boldFont); } boldFont=NULL; break; case WM_NOTIFY: { NMHDR *nmhdr=LPNMHDR(lParam); if (nmhdr->hwndFrom==hlv && nmhdr->idFrom==IDC_LV_PRESETS) switch (nmhdr->code) { case LVN_GETDISPINFO: { NMLVDISPINFO *nmdi=(NMLVDISPINFO*)lParam; int i=nmdi->item.iItem; if (i==-1) { break; } if (nmdi->item.mask&LVIF_TEXT) { strcpy(nmdi->item.pszText,(*parent->localPresets)[i]->presetName); } return TRUE; } case LVN_ITEMCHANGED: { if (nochange) { break; } NMLISTVIEW *nmlv=LPNMLISTVIEW(lParam); if (nmlv->iItem==-1) { return TRUE; } char_t presetName[1024]; ListView_GetItemText(hlv,nmlv->iItem,0,presetName,1023); applying=true; parent->selectPreset(presetName); cfg2dlg(); applying=false; return TRUE; } case LVN_KEYDOWN: { NMLVKEYDOWN *nmkd=(NMLVKEYDOWN*)lParam; switch (nmkd->wVKey) { case VK_F2: ListView_EditLabel(hlv,ListView_GetNextItem(hlv,-1,LVNI_SELECTED)); return TRUE; case VK_SPACE: changePresetState(); return TRUE; } break; } case NM_DBLCLK: case NM_CLICK: { NMITEMACTIVATE *nmia=LPNMITEMACTIVATE(lParam); if (nmia->iItem==-1) { char_t activePresetName[MAX_PATH]; deciD->getActivePresetName(activePresetName, countof(activePresetName)); applying=true; parent->selectPreset(activePresetName); cfg2dlg(); applying=false; } else if (nmhdr->code==NM_DBLCLK) { changePresetState(); } return TRUE; } case LVN_ENDLABELEDIT: { NMLVDISPINFO *nmdi=(NMLVDISPINFO*)lParam; if (!nmdi->item.pszText) { return FALSE; } if (parent->localPresets->getPreset(nmdi->item.pszText,false)==NULL && Tpreset::isValidPresetName(nmdi->item.pszText)) { setDlgResult(TRUE); ffstring presetName; Tpreset::normalizePresetName(presetName,nmdi->item.pszText); renamePreset(presetName.c_str()); } else { setDlgResult(FALSE); } } case NM_CUSTOMDRAW: { NMLVCUSTOMDRAW *lvcd=LPNMLVCUSTOMDRAW(lParam); if (lvcd->nmcd.dwDrawStage==CDDS_PREPAINT) { setDlgResult(CDRF_NOTIFYITEMDRAW); return TRUE; } if (lvcd->nmcd.dwDrawStage==CDDS_ITEMPREPAINT) { if (!italicFont) { LOGFONT oldFont; HFONT hf=(HFONT)GetCurrentObject(lvcd->nmcd.hdc,OBJ_FONT); GetObject(hf,sizeof(LOGFONT),&oldFont); oldFont.lfItalic=TRUE; italicFont=CreateFontIndirect(&oldFont); oldFont.lfItalic=FALSE; oldFont.lfWeight=FW_BLACK; boldFont=CreateFontIndirect(&oldFont); } Tpreset *preset=(*parent->localPresets)[lvcd->nmcd.dwItemSpec]; if (preset->autoLoadedFromFile) { SelectObject(lvcd->nmcd.hdc,italicFont); } const char_t *defaultPreset=cfgGetStr(IDFF_defaultPreset); if (stricmp(defaultPreset,preset->presetName)==0) { SelectObject(lvcd->nmcd.hdc,boldFont); } setDlgResult(/*CDRF_NOTIFYPOSTPAINT*/CDRF_NEWFONT); return TRUE; } return TRUE; } } break; } } return TconfPageDec::msgProc(uMsg,wParam,lParam); }
/******************************************************************************* * * FUNCTION: _CmdWndProc(HWND, unsigned, WORD, LONG) * * PURPOSE: Processes WM_COMMAND messages for the main frame window. * */ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HKEY hKeyRoot = 0, hKey = 0; LPCTSTR keyPath; LPCTSTR valueName; BOOL result = TRUE; REGSAM regsam = KEY_READ; LONG lRet; int item; UNREFERENCED_PARAMETER(lParam); UNREFERENCED_PARAMETER(message); switch (LOWORD(wParam)) { case ID_REGISTRY_LOADHIVE: LoadHive(hWnd); return TRUE; case ID_REGISTRY_UNLOADHIVE: UnloadHive(hWnd); return TRUE; case ID_REGISTRY_IMPORTREGISTRYFILE: ImportRegistryFile(hWnd); return TRUE; case ID_REGISTRY_EXPORTREGISTRYFILE: ExportRegistryFile(hWnd); return TRUE; case ID_REGISTRY_CONNECTNETWORKREGISTRY: { IDsObjectPicker *ObjectPicker; TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH + 1]; HRESULT hRet; hRet = CoInitialize(NULL); if (SUCCEEDED(hRet)) { hRet = InitializeRemoteRegistryPicker(&ObjectPicker); if (SUCCEEDED(hRet)) { hRet = InvokeRemoteRegistryPickerDialog(ObjectPicker, hWnd, szComputerName, sizeof(szComputerName) / sizeof(szComputerName[0])); if (hRet == S_OK) { /* FIXME - connect to the registry */ } FreeObjectPicker(ObjectPicker); } CoUninitialize(); } return TRUE; } case ID_REGISTRY_DISCONNECTNETWORKREGISTRY: return TRUE; case ID_REGISTRY_PRINT: PrintRegistryHive(hWnd, _T("")); return TRUE; case ID_REGISTRY_EXIT: DestroyWindow(hWnd); return TRUE; case ID_VIEW_STATUSBAR: toggle_child(hWnd, LOWORD(wParam), hStatusBar); return TRUE; case ID_HELP_HELPTOPICS: WinHelp(hWnd, _T("regedit"), HELP_FINDER, 0); return TRUE; case ID_HELP_ABOUT: ShowAboutBox(hWnd); return TRUE; case ID_VIEW_SPLIT: { RECT rt; POINT pt, pts; GetClientRect(g_pChildWnd->hWnd, &rt); pt.x = rt.left + g_pChildWnd->nSplitPos; pt.y = (rt.bottom / 2); pts = pt; if(ClientToScreen(g_pChildWnd->hWnd, &pts)) { SetCursorPos(pts.x, pts.y); SetCursor(LoadCursor(0, IDC_SIZEWE)); SendMessage(g_pChildWnd->hWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(pt.x, pt.y)); } return TRUE; } case ID_EDIT_RENAME: case ID_EDIT_MODIFY: case ID_EDIT_MODIFY_BIN: case ID_EDIT_DELETE: regsam |= KEY_WRITE; break; } keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot); valueName = GetValueName(g_pChildWnd->hListWnd, -1); if (keyPath) { lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, regsam, &hKey); if (lRet != ERROR_SUCCESS) hKey = 0; } switch (LOWORD(wParam)) { case ID_EDIT_MODIFY: if (valueName && ModifyValue(hWnd, hKey, valueName, FALSE)) RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath); break; case ID_EDIT_MODIFY_BIN: if (valueName && ModifyValue(hWnd, hKey, valueName, TRUE)) RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath); break; case ID_EDIT_RENAME: if (GetFocus() == g_pChildWnd->hListWnd) { if(ListView_GetSelectedCount(g_pChildWnd->hListWnd) == 1) { item = ListView_GetNextItem(g_pChildWnd->hListWnd, -1, LVNI_SELECTED); if(item > -1) { (void)ListView_EditLabel(g_pChildWnd->hListWnd, item); } } } else if (GetFocus() == g_pChildWnd->hTreeWnd) { /* Get focused entry of treeview (if any) */ HTREEITEM hItem = TreeView_GetSelection(g_pChildWnd->hTreeWnd); if (hItem != NULL) (void)TreeView_EditLabel(g_pChildWnd->hTreeWnd, hItem); } break; case ID_EDIT_DELETE: { if (GetFocus() == g_pChildWnd->hListWnd) { UINT nSelected = ListView_GetSelectedCount(g_pChildWnd->hListWnd); if(nSelected >= 1) { TCHAR msg[128], caption[128]; LoadString(hInst, IDS_QUERY_DELETE_CONFIRM, caption, sizeof(caption)/sizeof(TCHAR)); LoadString(hInst, (nSelected == 1 ? IDS_QUERY_DELETE_ONE : IDS_QUERY_DELETE_MORE), msg, sizeof(msg)/sizeof(TCHAR)); if(MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONQUESTION | MB_YESNO) == IDYES) { int ni, errs; item = -1; errs = 0; while((ni = ListView_GetNextItem(g_pChildWnd->hListWnd, item, LVNI_SELECTED)) > -1) { valueName = GetValueName(g_pChildWnd->hListWnd, item); if(RegDeleteValue(hKey, valueName) != ERROR_SUCCESS) { errs++; } item = ni; } RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath); if(errs > 0) { LoadString(hInst, IDS_ERR_DELVAL_CAPTION, caption, sizeof(caption)/sizeof(TCHAR)); LoadString(hInst, IDS_ERR_DELETEVALUE, msg, sizeof(msg)/sizeof(TCHAR)); MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONSTOP); } } } } else if (GetFocus() == g_pChildWnd->hTreeWnd) { if (keyPath == 0 || *keyPath == 0) { MessageBeep(MB_ICONHAND); } else if (DeleteKey(hWnd, hKeyRoot, keyPath)) { DeleteNode(g_pChildWnd->hTreeWnd, 0); RefreshTreeView(g_pChildWnd->hTreeWnd); } } break; } case ID_EDIT_NEW_STRINGVALUE: CreateNewValue(hKeyRoot, keyPath, REG_SZ); break; case ID_EDIT_NEW_BINARYVALUE: CreateNewValue(hKeyRoot, keyPath, REG_BINARY); break; case ID_EDIT_NEW_DWORDVALUE: CreateNewValue(hKeyRoot, keyPath, REG_DWORD); break; case ID_EDIT_NEW_MULTISTRINGVALUE: CreateNewValue(hKeyRoot, keyPath, REG_MULTI_SZ); break; case ID_EDIT_NEW_EXPANDABLESTRINGVALUE: CreateNewValue(hKeyRoot, keyPath, REG_EXPAND_SZ); break; case ID_EDIT_FIND: FindDialog(hWnd); break; case ID_EDIT_FINDNEXT: FindNext(hWnd); break; case ID_EDIT_COPYKEYNAME: CopyKeyName(hWnd, hKeyRoot, keyPath); break; case ID_EDIT_PERMISSIONS: RegKeyEditPermissions(hWnd, hKeyRoot, NULL, keyPath); break; case ID_REGISTRY_PRINTERSETUP: /*PRINTDLG pd;*/ /*PrintDlg(&pd);*/ /*PAGESETUPDLG psd;*/ /*PageSetupDlg(&psd);*/ break; case ID_REGISTRY_OPENLOCAL: break; case ID_VIEW_REFRESH: RefreshTreeView(g_pChildWnd->hTreeWnd); /*RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath, NULL); */ break; /*case ID_OPTIONS_TOOLBAR:*/ /* toggle_child(hWnd, LOWORD(wParam), hToolBar);*/ /* break;*/ case ID_EDIT_NEW_KEY: CreateNewKey(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd)); break; default: if ((LOWORD(wParam) >= ID_FAVORITES_MIN) && (LOWORD(wParam) <= ID_FAVORITES_MAX)) { HMENU hMenu; MENUITEMINFO mii; TCHAR szFavorite[512]; hMenu = GetSubMenu(GetMenu(hWnd), FAVORITES_MENU_POSITION); memset(&mii, 0, sizeof(mii)); mii.cbSize = sizeof(mii); mii.fMask = MIIM_TYPE; mii.fType = MFT_STRING; mii.dwTypeData = szFavorite; mii.cch = sizeof(szFavorite) / sizeof(szFavorite[0]); if (GetMenuItemInfo(hMenu, LOWORD(wParam) - ID_FAVORITES_MIN, TRUE, &mii)) { ChooseFavorite(szFavorite); } } else { result = FALSE; } break; } if(hKey) RegCloseKey(hKey); return result; }
/************************************************************************************************** This function handles events. **************************************************************************************************/ void CGroup::HandleEvent(UINT uEvent) { if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_NONE) == 0) { return; } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_RENAME) == 0) { ListView_EditLabel(m_hwndListView, ListView_GetNextItem(m_hwndListView, -1, LVNI_FOCUSED)); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_EXECUTE) == 0) { if (ListView_GetSelectedCount(m_hwndListView) == 1) { int iItem = ListView_GetNextItem(m_hwndListView, -1, LVNI_SELECTED); char szFileName[MAX_PATH]; if (GetNameFromId(iItem, szFileName, sizeof(szFileName))) { if (utils::Is_Directory(szFileName)) { if (m_bInlineBrowsing) { return ChangeDir(".selected"); } else if (m_bExplicitCalls) { LSExecuteEx(NULL, "open", "explorer.exe", szFileName, NULL, SW_SHOWNORMAL); return; } } } } CallWindowProc(m_wpOrigListViewProc, m_hwndListView, WM_KEYDOWN, VK_RETURN, NULL); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_DELETE) == 0) { DeleteFiles(); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_PASTE) == 0) { DoPaste(); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_UNDO) == 0) { // TODO::Add support for this } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_COPY) == 0) { CopyFiles(false); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_CUT) == 0) { CopyFiles(true); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_SELECTALL) == 0) { ListView_SetItemState(m_hwndListView, -1, LVIS_SELECTED, LVIS_SELECTED); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_REFRESH) == 0) { SaveState(); m_pView2->Refresh(); RestoreState(); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_UP) == 0) { ChangeDir(".up"); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_CHANGEDIR) == 0) { ChangeDir(".selected"); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_DOWNKEY) == 0) { CallWindowProc(m_wpOrigListViewProc, m_hwndListView, WM_KEYDOWN, VK_DOWN, NULL); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_UPKEY) == 0) { CallWindowProc(m_wpOrigListViewProc, m_hwndListView, WM_KEYDOWN, VK_UP, NULL); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_LEFTKEY) == 0) { CallWindowProc(m_wpOrigListViewProc, m_hwndListView, WM_KEYDOWN, VK_LEFT, NULL); } else if (_stricmp(m_szEventCommand[uEvent], EVENT_ACTION_RIGHTKEY) == 0) { CallWindowProc(m_wpOrigListViewProc, m_hwndListView, WM_KEYDOWN, VK_RIGHT, NULL); } else { LSExecute(m_hwndListView, m_szEventCommand[uEvent], SW_SHOWNORMAL); } }
static BOOL CreateNewValue(HKEY hRootKey, LPCTSTR pszKeyPath, DWORD dwType) { TCHAR szNewValueFormat[128]; TCHAR szNewValue[128]; int iIndex = 1; BYTE data[128]; DWORD dwExistingType, cbData; LONG lResult; HKEY hKey; LVFINDINFO lvfi; if (RegOpenKeyEx(hRootKey, pszKeyPath, 0, KEY_QUERY_VALUE | KEY_SET_VALUE, &hKey) != ERROR_SUCCESS) return FALSE; LoadString(hInst, IDS_NEW_VALUE, szNewValueFormat, COUNT_OF(szNewValueFormat)); do { wsprintf(szNewValue, szNewValueFormat, iIndex++); cbData = sizeof(data); lResult = RegQueryValueEx(hKey, szNewValue, NULL, &dwExistingType, data, &cbData); } while(lResult == ERROR_SUCCESS); switch(dwType) { case REG_DWORD: cbData = sizeof(DWORD); break; case REG_SZ: case REG_EXPAND_SZ: cbData = sizeof(TCHAR); break; case REG_MULTI_SZ: cbData = sizeof(TCHAR) * 2; break; case REG_QWORD: cbData = sizeof(DWORD) * 2; break; default: cbData = 0; break; } memset(data, 0, cbData); lResult = RegSetValueEx(hKey, szNewValue, 0, dwType, data, cbData); RegCloseKey(hKey); if (lResult != ERROR_SUCCESS) { return FALSE; } RefreshListView(g_pChildWnd->hListWnd, hRootKey, pszKeyPath); /* locate the newly added value, and get ready to rename it */ memset(&lvfi, 0, sizeof(lvfi)); lvfi.flags = LVFI_STRING; lvfi.psz = szNewValue; iIndex = ListView_FindItem(g_pChildWnd->hListWnd, -1, &lvfi); if (iIndex >= 0) (void)ListView_EditLabel(g_pChildWnd->hListWnd, iIndex); return TRUE; }
INT_PTR TdlgPropsEdit::msgProc(UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { hlv=GetDlgItem(m_hwnd,IDC_LV_PROPS); int ncol=0; ListView_AddCol(hlv,ncol,300,_l("Original:/Translation"),false); ListView_SetItemCount(hlv,props.size()*2); ListView_SetExtendedListViewStyleEx(hlv,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); return TRUE; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: case IDCANCEL: if (HWND(lParam)==GetDlgItem(m_hwnd,IDOK) || HWND(lParam)==GetDlgItem(m_hwnd,IDCANCEL)) { EndDialog(m_hwnd,LOWORD(wParam)); return TRUE; } break; }; break; case WM_NOTIFY: { NMHDR *nmhdr=LPNMHDR(lParam); if (nmhdr->idFrom==IDC_LV_PROPS) switch (nmhdr->code) { case LVN_GETDISPINFO: { NMLVDISPINFO *nmdi=(NMLVDISPINFO*)lParam; int i=nmdi->item.iItem; if (i==-1) { break; } if (nmdi->item.mask&LVIF_TEXT) switch (nmdi->item.iSubItem) { case 0: { //strcpy(nmdi->item.pszText,((i&1)==0)?props[i/2].first.c_str():props[i/2].second.c_str()); nmdi->item.pszText=(LPTSTR)((i&1)==0?props[i/2].first.c_str():props[i/2].second.c_str()); break; } } return TRUE; } case NM_CUSTOMDRAW: { NMLVCUSTOMDRAW *lvcd=LPNMLVCUSTOMDRAW(lParam); if (lvcd->nmcd.dwDrawStage==CDDS_PREPAINT) { setDlgResult(CDRF_NOTIFYITEMDRAW); return TRUE; } if (lvcd->nmcd.dwDrawStage==CDDS_ITEMPREPAINT) { if (!italicFont) { LOGFONT oldFont; HFONT hf=(HFONT)GetCurrentObject(lvcd->nmcd.hdc,OBJ_FONT); GetObject(hf,sizeof(LOGFONT),&oldFont); oldFont.lfItalic=TRUE; italicFont=CreateFontIndirect(&oldFont); } if ((lvcd->nmcd.dwItemSpec&1)==0) { SelectObject(lvcd->nmcd.hdc,italicFont); } setDlgResult(CDRF_NEWFONT); return TRUE; } return TRUE; } case LVN_BEGINLABELEDIT: { NMLVDISPINFO *nmdi=(NMLVDISPINFO*)lParam; if ((nmdi->item.iItem&1)==0) { setDlgResult(TRUE); return TRUE; } break; } case LVN_ENDLABELEDIT: { NMLVDISPINFO *nmdi=(NMLVDISPINFO*)lParam; if (nmdi->item.pszText) { props[nmdi->item.iItem/2].second=nmdi->item.pszText; setDlgResult(TRUE); return TRUE; } break; } case LVN_KEYDOWN: { NMLVKEYDOWN *nmkd=(NMLVKEYDOWN*)lParam; if (nmkd->wVKey==VK_F2) { ListView_EditLabel(hlv,ListView_GetNextItem(hlv,-1,LVNI_SELECTED)); return TRUE; } break; } } break; } } return Twindow::msgProc(uMsg,wParam,lParam); }
BOOL CALLBACK KnownDllsDialogProc( HWND hdlg, UINT uMessage, WPARAM wParam, LPARAM lParam ) { static HWND hwndDlls; switch (uMessage) { case WM_INITDIALOG: { hwndDlls = GetDlgItem( hdlg, IDC_KNOWN_DLLS ); SetWindowContextHelpId( hwndDlls, IDH_DLLS_OPTIONS ); CenterWindow( GetParent( hdlg ), hwndFrame ); // // set/initialize the image list(s) // HIMAGELIST himlState = ImageList_Create( 16, 16, TRUE, 2, 0 ); ImageList_AddMasked( himlState, LoadBitmap (GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_CHECKSTATES)), RGB (255,0,0) ); ListView_SetImageList( hwndDlls, himlState, LVSIL_STATE ); // // set/initialize the columns // LV_COLUMN lvc = {0}; lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.pszText = "DLL Name"; lvc.iSubItem = 0; lvc.cx = 260; lvc.fmt = LVCFMT_LEFT; ListView_InsertColumn( hwndDlls, 0, &lvc ); } break; case WM_REFRESH_LIST: ListView_DeleteAllItems( hwndDlls ); goto refresh_list; case WM_NOTIFY: switch (((LPNMHDR)lParam)->code) { case PSN_KILLACTIVE: SetWindowLong( hdlg, DWL_MSGRESULT, 0 ); break; case PSN_APPLY: SaveOptions(); SendMessage( GetParent(hdlg), PSM_UNCHANGED, (LPARAM)hdlg, 0 ); SetWindowLong( hdlg, DWL_MSGRESULT, 0 ); break; case NM_CLICK: { DWORD dwpos = GetMessagePos(); LV_HITTESTINFO lvhti = {0}; lvhti.pt.x = LOWORD(dwpos); lvhti.pt.y = HIWORD(dwpos); MapWindowPoints( HWND_DESKTOP, hwndDlls, &lvhti.pt, 1 ); int iItemClicked = ListView_HitTest( hwndDlls, &lvhti ); if (iItemClicked == -1) { // // add a new item // LV_ITEM lvi = {0}; lvi.pszText = ""; lvi.iItem = ListView_GetItemCount( hwndDlls ); lvi.iSubItem = 0; lvi.iImage = 0; lvi.mask = LVIF_TEXT; lvi.state = 0; lvi.stateMask = 0; iItemClicked = ListView_InsertItem( hwndDlls, &lvi ); } ListView_EditLabel( hwndDlls, iItemClicked ); } break; case LVN_ENDLABELEDIT: { LV_DISPINFO *DispInfo = (LV_DISPINFO*)lParam; LPSTR p = ApiMonOptions.KnownDlls; ULONG i = 0; LPSTR nk = (LPSTR) MemAlloc( 2048 ); LPSTR p1 = nk; while( i != (ULONG)DispInfo->item.iItem ) { strcpy( p1, p ); p1 += (strlen(p) + 1); p += (strlen(p) + 1); i += 1; } p += (strlen(p) + 1); if (DispInfo->item.pszText && DispInfo->item.pszText[0]) { strcpy( p1, DispInfo->item.pszText ); p1 += (strlen(DispInfo->item.pszText) + 1); } while( p && *p ) { strcpy( p1, p ); p1 += (strlen(p) + 1); p += (strlen(p) + 1); } *p1 = 0; memcpy( ApiMonOptions.KnownDlls, nk, 2048 ); MemFree( nk ); PostMessage( hdlg, WM_REFRESH_LIST, 0, 0 ); } case PSN_SETACTIVE: refresh_list: { LPSTR p = ApiMonOptions.KnownDlls; LV_ITEM lvi = {0}; int iItem = 0; while( p && *p ) { lvi.pszText = p; lvi.iItem = iItem; iItem += 1; lvi.iSubItem = 0; lvi.iImage = 0; lvi.mask = LVIF_TEXT; lvi.state = 0; lvi.stateMask = 0; ListView_InsertItem( hwndDlls, &lvi ); p += (strlen(p) + 1); } } break; } break; case WM_HELP: { LPHELPINFO hi = (LPHELPINFO)lParam; ProcessHelpRequest( hdlg, hi->iCtrlId ); } break; } return FALSE; }
void CLibraryDetailView::OnLibraryRename() { int nItem = ListView_GetNextItem( GetSafeHwnd(), -1, LVNI_SELECTED ); if ( nItem >= 0 ) ListView_EditLabel( GetSafeHwnd(), nItem ); }
INT_PTR CALLBACK PhpColumnSetEditorDlgProc( _In_ HWND hwndDlg, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ) { PCOLUMNSET_DIALOG_CONTEXT context = NULL; if (uMsg == WM_INITDIALOG) { context = PhAllocate(sizeof(COLUMNSET_DIALOG_CONTEXT)); memset(context, 0, sizeof(COLUMNSET_DIALOG_CONTEXT)); context->SettingName = PhCreateString((PWSTR)lParam); SetProp(hwndDlg, PhMakeContextAtom(), (HANDLE)context); } else { context = (PCOLUMNSET_DIALOG_CONTEXT)GetProp(hwndDlg, PhMakeContextAtom()); } if (!context) return FALSE; switch (uMsg) { case WM_INITDIALOG: { context->DialogHandle = hwndDlg; context->ListViewHandle = GetDlgItem(hwndDlg, IDC_COLUMNSETLIST); context->RenameButtonHandle = GetDlgItem(hwndDlg, IDC_RENAME); context->MoveUpButtonHandle = GetDlgItem(hwndDlg, IDC_MOVEUP); context->MoveDownButtonHandle = GetDlgItem(hwndDlg, IDC_MOVEDOWN); context->RemoveButtonHandle = GetDlgItem(hwndDlg, IDC_REMOVE); PhCenterWindow(hwndDlg, GetParent(hwndDlg)); PhSetListViewStyle(context->ListViewHandle, FALSE, TRUE); PhSetControlTheme(context->ListViewHandle, L"explorer"); PhAddListViewColumn(context->ListViewHandle, 0, 0, 0, LVCFMT_LEFT, 250, L"Name"); PhSetExtendedListView(context->ListViewHandle); context->ColumnSetList = PhInitializeColumnSetList(PhGetString(context->SettingName)); for (ULONG i = 0; i < context->ColumnSetList->Count; i++) { PPH_COLUMN_SET_ENTRY entry = context->ColumnSetList->Items[i]; PhAddListViewItem(context->ListViewHandle, MAXINT, entry->Name->Buffer, entry); } Button_Enable(context->RenameButtonHandle, FALSE); Button_Enable(context->MoveUpButtonHandle, FALSE); Button_Enable(context->MoveDownButtonHandle, FALSE); Button_Enable(context->RemoveButtonHandle, FALSE); } break; case WM_DESTROY: { PhDeleteColumnSetList(context->ColumnSetList); RemoveProp(hwndDlg, PhMakeContextAtom()); PhFree(context); } break; case WM_COMMAND: { switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDCANCEL: EndDialog(hwndDlg, IDCANCEL); break; case IDOK: { if (context->LabelEditActive) break; PhSaveSettingsColumnList(PhGetString(context->SettingName), context->ColumnSetList); EndDialog(hwndDlg, IDOK); } break; case IDC_RENAME: { INT lvItemIndex; lvItemIndex = ListView_GetNextItem(context->ListViewHandle, -1, LVNI_SELECTED); if (lvItemIndex != -1) { SetFocus(context->ListViewHandle); ListView_EditLabel(context->ListViewHandle, lvItemIndex); } } break; case IDC_MOVEUP: { INT lvItemIndex; PPH_COLUMN_SET_ENTRY entry; ULONG index; PhpMoveSelectedListViewItemUp(context->ListViewHandle); lvItemIndex = ListView_GetNextItem(context->ListViewHandle, -1, LVNI_SELECTED); if (lvItemIndex != -1 && PhGetListViewItemParam(context->ListViewHandle, lvItemIndex, (PVOID *)&entry)) { index = PhFindItemList(context->ColumnSetList, entry); if (index != -1) { PhRemoveItemList(context->ColumnSetList, index); PhInsertItemList(context->ColumnSetList, lvItemIndex, entry); } } } break; case IDC_MOVEDOWN: { INT lvItemIndex; PPH_COLUMN_SET_ENTRY entry; ULONG index; PhpMoveSelectedListViewItemDown(context->ListViewHandle); lvItemIndex = ListView_GetNextItem(context->ListViewHandle, -1, LVNI_SELECTED); if (lvItemIndex != -1 && PhGetListViewItemParam(context->ListViewHandle, lvItemIndex, (PVOID *)&entry)) { index = PhFindItemList(context->ColumnSetList, entry); if (index != -1) { PhRemoveItemList(context->ColumnSetList, index); PhInsertItemList(context->ColumnSetList, lvItemIndex, entry); } } } break; case IDC_REMOVE: { INT lvItemIndex; PPH_COLUMN_SET_ENTRY entry; ULONG index; lvItemIndex = ListView_GetNextItem(context->ListViewHandle, -1, LVNI_SELECTED); if (lvItemIndex != -1 && PhGetListViewItemParam(context->ListViewHandle, lvItemIndex, (PVOID *)&entry)) { index = PhFindItemList(context->ColumnSetList, entry); if (index != -1) { PhRemoveItemList(context->ColumnSetList, index); PhRemoveListViewItem(context->ListViewHandle, lvItemIndex); PhClearReference(&entry->Name); PhClearReference(&entry->Setting); PhClearReference(&entry->Sorting); PhFree(entry); } SetFocus(context->ListViewHandle); ListView_SetItemState(context->ListViewHandle, 0, LVNI_SELECTED, LVNI_SELECTED); //ListView_EnsureVisible(context->ListViewHandle, 0, FALSE); } } break; } } break; case WM_NOTIFY: { LPNMHDR header = (LPNMHDR)lParam; switch (header->code) { case NM_DBLCLK: { INT lvItemIndex; lvItemIndex = ListView_GetNextItem(context->ListViewHandle, -1, LVNI_SELECTED); if (lvItemIndex != -1) { SetFocus(context->ListViewHandle); ListView_EditLabel(context->ListViewHandle, lvItemIndex); } } break; case LVN_ITEMCHANGED: { LPNMLISTVIEW listview = (LPNMLISTVIEW)lParam; INT index; INT lvItemIndex; INT count; index = listview->iItem; lvItemIndex = ListView_GetNextItem(context->ListViewHandle, -1, LVNI_SELECTED); count = ListView_GetItemCount(context->ListViewHandle); if (count == 0 || index == -1 || lvItemIndex == -1) { Button_Enable(context->RenameButtonHandle, FALSE); Button_Enable(context->MoveUpButtonHandle, FALSE); Button_Enable(context->MoveDownButtonHandle, FALSE); Button_Enable(context->RemoveButtonHandle, FALSE); break; } if (index != lvItemIndex) break; if (index == 0 && count == 1) { // First and last item Button_Enable(context->MoveUpButtonHandle, FALSE); Button_Enable(context->MoveDownButtonHandle, FALSE); } else if (index == (count - 1)) { // Last item Button_Enable(context->MoveUpButtonHandle, TRUE); Button_Enable(context->MoveDownButtonHandle, FALSE); } else if (index == 0) { // First item Button_Enable(context->MoveUpButtonHandle, FALSE); Button_Enable(context->MoveDownButtonHandle, TRUE); } else { Button_Enable(context->MoveUpButtonHandle, TRUE); Button_Enable(context->MoveDownButtonHandle, TRUE); } Button_Enable(context->RenameButtonHandle, TRUE); Button_Enable(context->RemoveButtonHandle, TRUE); } break; case LVN_BEGINLABELEDIT: context->LabelEditActive = TRUE; break; case LVN_ENDLABELEDIT: { LV_DISPINFO* lvinfo = (LV_DISPINFO*)lParam; if (lvinfo->item.iItem != -1 && lvinfo->item.pszText) { BOOLEAN found = FALSE; PPH_COLUMN_SET_ENTRY entry; ULONG index; for (ULONG i = 0; i < context->ColumnSetList->Count; i++) { entry = context->ColumnSetList->Items[i]; if (PhEqualStringRef2(&entry->Name->sr, lvinfo->item.pszText, FALSE)) { found = TRUE; break; } } if (!found && PhGetListViewItemParam(context->ListViewHandle, lvinfo->item.iItem, (PVOID *)&entry)) { index = PhFindItemList(context->ColumnSetList, entry); if (index != -1) { PhMoveReference(&entry->Name, PhCreateString(lvinfo->item.pszText)); ListView_SetItemText(context->ListViewHandle, lvinfo->item.iItem, 0, lvinfo->item.pszText); } } } context->LabelEditActive = FALSE; } break; } } break; } return FALSE; }
BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCWSTR keyPath) { DWORD max_sub_key_len; DWORD max_val_name_len; DWORD max_val_size; DWORD val_count; HKEY hNewKey; LONG errCode; INT i, c; BOOL AddedDefault = FALSE; if (!hwndLV) return FALSE; (void)ListView_EditLabel(hwndLV, -1); SendMessageW(hwndLV, WM_SETREDRAW, FALSE, 0); DestroyListView(hwndLV); (void)ListView_DeleteAllItems(hwndLV); if(!hKey) return FALSE; errCode = RegOpenKeyExW(hKey, keyPath, 0, KEY_READ, &hNewKey); if (errCode != ERROR_SUCCESS) return FALSE; /* get size information and resize the buffers if necessary */ errCode = RegQueryInfoKeyW(hNewKey, NULL, NULL, NULL, NULL, &max_sub_key_len, NULL, &val_count, &max_val_name_len, &max_val_size, NULL, NULL); if (errCode == ERROR_SUCCESS) { WCHAR* ValName = HeapAlloc(GetProcessHeap(), 0, ++max_val_name_len * sizeof(WCHAR)); DWORD dwValNameLen = max_val_name_len; BYTE* ValBuf = HeapAlloc(GetProcessHeap(), 0, max_val_size + sizeof(WCHAR)); DWORD dwValSize = max_val_size; DWORD dwIndex = 0L; DWORD dwValType; /* if (RegQueryValueExW(hNewKey, NULL, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) { */ /* AddEntryToList(hwndLV, L"(Default)", dwValType, ValBuf, dwValSize); */ /* } */ /* dwValSize = max_val_size; */ while (RegEnumValueW(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) { /* Add a terminating 0 character. Usually this is only necessary for strings. */ ValBuf[dwValSize] = ValBuf[dwValSize + 1] = 0; AddEntryToList(hwndLV, ValName, dwValType, ValBuf, dwValSize, -1, TRUE); dwValNameLen = max_val_name_len; dwValSize = max_val_size; dwValType = 0L; ++dwIndex; if(!wcscmp(ValName, L"")) { AddedDefault = TRUE; } } HeapFree(GetProcessHeap(), 0, ValBuf); HeapFree(GetProcessHeap(), 0, ValName); } RegCloseKey(hNewKey); if(!AddedDefault) { AddEntryToList(hwndLV, L"", REG_SZ, NULL, 0, 0, FALSE); } c = ListView_GetItemCount(hwndLV); for(i = 0; i < c; i++) { ListView_SetItemState(hwndLV, i, 0, LVIS_FOCUSED | LVIS_SELECTED); } ListView_SetItemState(hwndLV, iListViewSelect, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED); (void)ListView_Sort(hwndLV, g_iSortedColumn, -1); SendMessageW(hwndLV, WM_SETREDRAW, TRUE, 0); return TRUE; }