<!-- Enter a brief description/summary of your PR here. What does it
fix/what does it change/how was it tested (even manually, if necessary)?
-->
## Summary of the Pull Request
This pull request improves the way items are grouped and processed by
depth in the `s_fileOpWorkerThread` function of
`PowerRenameManager.cpp`. Instead of sizing the depth matrix by the
total item count, it now determines the actual maximum depth of items
first, resulting in more efficient memory usage and correctness when
handling items by their depth.
**Improvements to depth-based processing:**
* Added a first pass to determine the maximum depth among all items
before allocating the depth matrix, ensuring the matrix is sized
appropriately and not excessively large.
* Updated the logic to iterate from the maximum depth down to zero when
adding items, aligning with the new matrix sizing and ensuring correct
processing order.
* PowerRename new UI
* Add scrollviewer
* Don't deploy PowerRenameUI_new
* Visual updates
* Visual updates
* Updates
* Update Resources.resw
* Added docs button
* Update MainWindow.xaml
* Wire Docs button
* RegEx -> regular expressions
* Update Show only renamed list on search/replace text changed
* Update Show only renamed list on search/replace text changed - proper fix
Set searchTerm to NULL when cleared - fix Show only renamed files on clear searchTerm
* Files/folders input error handling
* Fix renaming with keeping UI window opened
After renaming folder, all of it's children need path update.
Without path update, further renaming of children items would
fail.
* Update only children, not all items with greater depth
* Fix dictionary false positives
* Remove .NET dep
* Rename PowerRenameUI_new to PowerRenameUILib
Rename executable PowerRenameUIHost to PowerRename
Co-authored-by: Laute <Niels.Laute@philips.com>
* Show progress dialog during startup for selection enumeration that can take a long time.
* Updated with better code organization and a timer to ensure the progress dialog does not appear in most cases.
* Update based on PR feedback
* Change progress dialog delay from 1500ms to 2500ms
* Move progress dialog invocation off the main UI thread
Co-authored-by: Chris Davis (EDGE) <chrdavis@microsoft.com>
* Move retrieveing file attibutes to PowerRenameRegex
Move file attributes unit tests to PowerRenameRegexTests
Add file time field to MockPowerRenameItem
* Add file attributes unittests to PowerRenameManagerTests
* Change variable name
* Rearrange function arguments
* Check if file attributes are used only once
* Change variable name LocalTime -> fileTime, date -> time
* Set fileTime as a member of PowerRenameRegEx rather than passing as an argument
* Change function name isFileAttributesUsed() -> isFileTimeUsed()
Check before resetting fileTime
* Fix small bugs
* Fix typos
* Refactor for readability, move free calls to reachable places
* Fix search for area empty bug
searchTerm being empty is not an invalid argument rather it must return OK without any operation
Tests must check if Replace() returns S_OK becuase later it checks its result
* Check return values of method calls in PowerRenameManager
Remove received argments checks from some methods because argument being null or empty string doesnt mean it is invalid or method fails
* Fix formatting. Remove overlooked comment. Fix error message.
* Change HRESULT declarations according to coding style
* Fix unhandled case. Refactor.
* 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
* Use only fff for milliseconds
* Refactor
* Handle double $ signs.
Move isFileAttributes check to Helpers.
Move File Attributes to perform before regex operation
* Fix typo
* Format date/time test
* Disable problematic features. Add comments
* Fix month/day names
* Add tests
* Add line between tests
* Add local month/day names support
* Make sure month/date names are capitalized
* Fix formatting
* Add basic using file attributes functionality
* Correctly return result
* Refactor
* Move retrieving date attribute to get function
* Cover various milliseconds patterns, retrieve file attributes only when needed
* Correctly check if date/time pattern is used. Remove wstring cast
* Use correct flags on CreateFile call to handle directories
* rebase to master
* Perform transform operation at last to make it not mess with date/time variables
* Refactor, remove extra space
* Add basic transform functionality
* Add basic transform functionality
* Change toupper/tolower/isspace to towupper/towlower/towisspace. For loops omitted if possible.
* Avoid wcslen() in for statement
* Avoid wcslen() in for statement
* Add basic transform functionality
* Change toupper/tolower/isspace to towupper/towlower/towisspace. For loops omitted if possible.
* Avoid wcslen() in for statement
* Avoid wcslen() in for statement
* Add basic transform functionality
* Change toupper/tolower/isspace to towupper/towlower/towisspace. For loops omitted if possible.
* Avoid wcslen() in for statement
* Adjust Powerrename Interface
* Add trimming rename string
* Remove leading and trailing spaces from rename string
* Add support for transforming only item name or extension. Temporarily remove trimming to refactor. Change CAPITALIZED to TITLECASE
* Fix bug when search for area is empty
* Add trimming back with refactor(leading spaces, trailing spaces, trailing dots)
* Now supports transforming when search area is empty
* Add smarter titlecase
Transformation breaks when new filename contains an unusable character (\/?:*?"<>|)
These characters need to be removed from new name anyway.
* minor bugfix
* Add unittests, contains failing tests
* Remove unnecessary/failing tests
* remove generated file
* some code formatting and fix memory leak issues
* Use proper allocation, change int to size_t
* Refactor. Move transforming to Helpers.cpp
* Refactor. Move trimming to Helpers.cpp
* Change StrDup to SHStrDup. Some refactoring.
* Fix memery leak, add proper result controls, use newNameToUse in functon calls becaause it is where the final form of the string is tracked
* Change declarations of strings, add proper result controls
* Slightly widen the labels to cover the whole text
* Add extended characters support
* Rename a variable
* Correctly identify the last word for titlecase
* Add empty line to last line of resource.h
* Update icon and add telemetry calls
This change adds the new PowerRename icon and includes telemetry calls
* Ensure string is freed
* Update event naming convention
* Delete PowerRenameDemo.gif
Deleting this gif as I added it with a separate commit with the README.md update for PowerRename