mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 03:37:59 +01:00
[PowerRename] Add Filtering Feature (#6017)
* Implement basic functionality * Change approach. move filter controls to manager edit redrawing to always work with new GetVisibleItemCount() and GetVisibleItemByIndex() calls * Fix performance issues. Some refactoring. * Handle toggleAll correctly * Handle dangling elements when filter is on Make an item visible if it has at least one visible subitem * Support filtering for selected and shouldRename * Refactor for readability, remove useless member from PowerRenameUI * Change variable names in PowerRenameUI for clarity Use wrapper function RedrawItems() and SetItemCount() for consistency * Handle result value properly in getVisibleItemByIndex() * Add FlagsApplicable filter * Add visual indication of filters * Improve performance Check if no filter is selected Call SetItemCount() only when necessary * Refactor for readability * Get lock in setVisible() * Change function names to camel case * Change function names to start with uppercase * Change filter behaviour when search area is empty Show all elements when search area is empty and ShouldRename filter is selected Avoid warnings * Resolve conflicts
This commit is contained in:
committed by
GitHub
parent
3ede1a0b53
commit
d3b80b26e3
@@ -30,7 +30,7 @@ IFACEMETHODIMP CPowerRenameItem::QueryInterface(_In_ REFIID riid, _Outptr_ void*
|
||||
return QISearch(this, qit, riid, ppv);
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_path(_Outptr_ PWSTR* path)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetPath(_Outptr_ PWSTR* path)
|
||||
{
|
||||
*path = nullptr;
|
||||
CSRWSharedAutoLock lock(&m_lock);
|
||||
@@ -42,7 +42,7 @@ IFACEMETHODIMP CPowerRenameItem::get_path(_Outptr_ PWSTR* path)
|
||||
return hr;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_date(_Outptr_ SYSTEMTIME* date)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetDate(_Outptr_ SYSTEMTIME* date)
|
||||
{
|
||||
CSRWSharedAutoLock lock(&m_lock);
|
||||
HRESULT hr = m_isDateParsed ? S_OK : E_FAIL ;
|
||||
@@ -72,12 +72,12 @@ IFACEMETHODIMP CPowerRenameItem::get_date(_Outptr_ SYSTEMTIME* date)
|
||||
return hr;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_shellItem(_Outptr_ IShellItem** ppsi)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetShellItem(_Outptr_ IShellItem** ppsi)
|
||||
{
|
||||
return SHCreateItemFromParsingName(m_path, nullptr, IID_PPV_ARGS(ppsi));
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_originalName(_Outptr_ PWSTR* originalName)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetOriginalName(_Outptr_ PWSTR* originalName)
|
||||
{
|
||||
CSRWSharedAutoLock lock(&m_lock);
|
||||
HRESULT hr = m_originalName ? S_OK : E_FAIL;
|
||||
@@ -88,7 +88,7 @@ IFACEMETHODIMP CPowerRenameItem::get_originalName(_Outptr_ PWSTR* originalName)
|
||||
return hr;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::put_newName(_In_opt_ PCWSTR newName)
|
||||
IFACEMETHODIMP CPowerRenameItem::PutNewName(_In_opt_ PCWSTR newName)
|
||||
{
|
||||
CSRWSharedAutoLock lock(&m_lock);
|
||||
CoTaskMemFree(m_newName);
|
||||
@@ -101,7 +101,7 @@ IFACEMETHODIMP CPowerRenameItem::put_newName(_In_opt_ PCWSTR newName)
|
||||
return hr;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_newName(_Outptr_ PWSTR* newName)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetNewName(_Outptr_ PWSTR* newName)
|
||||
{
|
||||
CSRWSharedAutoLock lock(&m_lock);
|
||||
HRESULT hr = m_newName ? S_OK : E_FAIL;
|
||||
@@ -112,42 +112,42 @@ IFACEMETHODIMP CPowerRenameItem::get_newName(_Outptr_ PWSTR* newName)
|
||||
return hr;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_isFolder(_Out_ bool* isFolder)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetIsFolder(_Out_ bool* isFolder)
|
||||
{
|
||||
CSRWSharedAutoLock lock(&m_lock);
|
||||
*isFolder = m_isFolder;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_isSubFolderContent(_Out_ bool* isSubFolderContent)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetIsSubFolderContent(_Out_ bool* isSubFolderContent)
|
||||
{
|
||||
CSRWSharedAutoLock lock(&m_lock);
|
||||
*isSubFolderContent = m_depth > 0;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_selected(_Out_ bool* selected)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetSelected(_Out_ bool* selected)
|
||||
{
|
||||
CSRWSharedAutoLock lock(&m_lock);
|
||||
*selected = m_selected;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::put_selected(_In_ bool selected)
|
||||
IFACEMETHODIMP CPowerRenameItem::PutSelected(_In_ bool selected)
|
||||
{
|
||||
CSRWSharedAutoLock lock(&m_lock);
|
||||
m_selected = selected;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_id(_Out_ int* id)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetId(_Out_ int* id)
|
||||
{
|
||||
CSRWSharedAutoLock lock(&m_lock);
|
||||
*id = m_id;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_iconIndex(_Out_ int* iconIndex)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetIconIndex(_Out_ int* iconIndex)
|
||||
{
|
||||
if (m_iconIndex == -1)
|
||||
{
|
||||
@@ -157,13 +157,13 @@ IFACEMETHODIMP CPowerRenameItem::get_iconIndex(_Out_ int* iconIndex)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::get_depth(_Out_ UINT* depth)
|
||||
IFACEMETHODIMP CPowerRenameItem::GetDepth(_Out_ UINT* depth)
|
||||
{
|
||||
*depth = m_depth;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::put_depth(_In_ int depth)
|
||||
IFACEMETHODIMP CPowerRenameItem::PutDepth(_In_ int depth)
|
||||
{
|
||||
m_depth = depth;
|
||||
return S_OK;
|
||||
@@ -179,7 +179,29 @@ IFACEMETHODIMP CPowerRenameItem::ShouldRenameItem(_In_ DWORD flags, _Out_ bool*
|
||||
bool excludeBecauseSubFolderContent = (m_depth > 0 && (flags & PowerRenameFlags::ExcludeSubfolders));
|
||||
*shouldRename = (m_selected && m_canRename && hasChanged && !excludeBecauseFile &&
|
||||
!excludeBecauseFolder && !excludeBecauseSubFolderContent);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP CPowerRenameItem::IsItemVisible(_In_ DWORD filter, _In_ DWORD flags, _Out_ bool* isItemVisible)
|
||||
{
|
||||
bool shouldRenameItem = false;
|
||||
switch (filter)
|
||||
{
|
||||
case PowerRenameFilters::None:
|
||||
*isItemVisible = true;
|
||||
break;
|
||||
case PowerRenameFilters::Selected:
|
||||
GetSelected(isItemVisible);
|
||||
break;
|
||||
case PowerRenameFilters::FlagsApplicable:
|
||||
*isItemVisible = !((m_isFolder && (flags & PowerRenameFlags::ExcludeFolders)) ||
|
||||
(!m_isFolder && (flags & PowerRenameFlags::ExcludeFiles)) ||
|
||||
(m_depth > 0 && (flags & PowerRenameFlags::ExcludeSubfolders)));
|
||||
break;
|
||||
case PowerRenameFilters::ShouldRename:
|
||||
ShouldRenameItem(flags, isItemVisible);
|
||||
break;
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user