[PowerRename] Cleanup and fix for renaming to empty string (#19691)

* Add UI items using OnItemAdded callback

* Simplify ToggleAll() logic

* Simplify items' Checkbox logic

* Do not allow renaming to empty string

* Simplify ShowAll/ShowRenamed logic

* Simplify rename button logic
This commit is contained in:
Stefan Markovic
2022-08-05 19:14:53 +02:00
committed by GitHub
parent 6ef439bda4
commit 1fe9d95322
7 changed files with 56 additions and 153 deletions

View File

@@ -185,7 +185,6 @@ namespace winrt::PowerRenameUI::implementation
}
try
{
PopulateExplorerItems();
UpdateCounts();
SetHandlers();
ReadSettings();
@@ -195,7 +194,7 @@ namespace winrt::PowerRenameUI::implementation
Logger::error("Exception thrown during explorer items population: {}", std::string{ e.what() });
}
m_uiUpdatesItem.ButtonRenameEnabled(false);
button_rename().IsEnabled(false);
InitAutoComplete();
SearchReplaceChanged();
}
@@ -203,6 +202,15 @@ namespace winrt::PowerRenameUI::implementation
void MainWindow::AddExplorerItem(int32_t id, hstring const& original, hstring const& renamed, int32_t type, uint32_t depth, bool checked)
{
auto newItem = winrt::make<PowerRenameUI::implementation::ExplorerItem>(id, original, renamed, type, depth, checked);
newItem.PropertyChanged([this](Windows::Foundation::IInspectable const& sender, Microsoft::UI::Xaml::Data::PropertyChangedEventArgs const& e) {
auto item = sender.as<ExplorerItem>();
std::wstring property{ e.PropertyName() };
if (item && property == L"Checked")
{
ToggleItem(item->Id(), item->Checked());
}
});
m_explorerItems.Append(newItem);
m_explorerItemsMap[id] = newItem;
}
@@ -241,29 +249,11 @@ namespace winrt::PowerRenameUI::implementation
return m_explorerItemsMap.contains(id) ? m_explorerItemsMap[id] : NULL;
}
void MainWindow::ToggleAll(bool checked)
{
std::for_each(m_explorerItems.begin(), m_explorerItems.end(), [checked](auto item) { item.Checked(checked); });
}
void MainWindow::Checked_ids(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
{
auto checkbox = sender.as<Microsoft::UI::Xaml::Controls::CheckBox>();
auto id = std::stoi(std::wstring{ checkbox.Name() });
auto item = FindById(id);
if (item != NULL && checkbox.IsChecked().GetBoolean() != item.Checked())
{
m_uiUpdatesItem.Checked(checkbox.IsChecked().GetBoolean());
m_uiUpdatesItem.ChangedExplorerItemId(id);
}
}
void MainWindow::SelectAll(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
{
if (checkBox_selectAll().IsChecked().GetBoolean() != m_allSelected)
{
ToggleAll(checkBox_selectAll().IsChecked().GetBoolean());
m_uiUpdatesItem.ToggleAll();
ToggleAll();
m_allSelected = !m_allSelected;
}
}
@@ -272,11 +262,16 @@ namespace winrt::PowerRenameUI::implementation
{
button_showAll().IsChecked(true);
button_showRenamed().IsChecked(false);
if (!m_uiUpdatesItem.ShowAll())
DWORD filter = 0;
m_prManager->GetFilter(&filter);
if (filter != PowerRenameFilters::None)
{
m_explorerItems.Clear();
m_explorerItemsMap.clear();
m_uiUpdatesItem.ShowAll(true);
m_prManager->SwitchFilter(0);
PopulateExplorerItems();
UpdateCounts();
}
}
@@ -284,11 +279,16 @@ namespace winrt::PowerRenameUI::implementation
{
button_showRenamed().IsChecked(true);
button_showAll().IsChecked(false);
if (m_uiUpdatesItem.ShowAll())
DWORD filter = 0;
m_prManager->GetFilter(&filter);
if (filter != PowerRenameFilters::ShouldRename)
{
m_explorerItems.Clear();
m_explorerItemsMap.clear();
m_uiUpdatesItem.ShowAll(false);
m_prManager->SwitchFilter(0);
PopulateExplorerItems();
UpdateCounts();
}
}
@@ -308,14 +308,12 @@ namespace winrt::PowerRenameUI::implementation
void MainWindow::button_rename_Click(winrt::Microsoft::UI::Xaml::Controls::SplitButton const&, winrt::Microsoft::UI::Xaml::Controls::SplitButtonClickEventArgs const&)
{
m_uiUpdatesItem.CloseUIWindow(false);
m_uiUpdatesItem.Rename();
Rename(false);
}
void MainWindow::MenuFlyoutItem_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
{
m_uiUpdatesItem.CloseUIWindow(true);
m_uiUpdatesItem.Rename();
Rename(true);
}
void MainWindow::OpenDocs(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
@@ -556,26 +554,6 @@ namespace winrt::PowerRenameUI::implementation
{
_TRACER_;
m_uiUpdatesItem.PropertyChanged([&](auto const&, auto const& e) {
std::wstring property{ e.PropertyName() };
if (property == L"ShowAll")
{
SwitchView();
}
else if (property == L"ChangedItemId")
{
ToggleItem(m_uiUpdatesItem.ChangedExplorerItemId(), m_uiUpdatesItem.Checked());
}
else if (property == L"ToggleAll")
{
ToggleAll();
}
else if (property == L"Rename")
{
Rename(m_uiUpdatesItem.CloseUIWindow());
}
});
// AutoSuggestBox Search
textBox_search().TextChanged([&](auto const&, auto const&) {
SearchReplaceChanged();
@@ -739,6 +717,10 @@ namespace winrt::PowerRenameUI::implementation
if (SUCCEEDED(m_prManager->GetItemByIndex(i, &spItem)))
{
spItem->PutSelected(selected);
int id = 0;
spItem->GetId(&id);
auto item = FindById(id);
item.Checked(selected);
}
}
UpdateCounts();
@@ -965,15 +947,35 @@ namespace winrt::PowerRenameUI::implementation
m_renamingCount = renamingCount;
// Update Rename button state
m_uiUpdatesItem.ButtonRenameEnabled(renamingCount > 0);
button_rename().IsEnabled(renamingCount > 0);
}
m_uiUpdatesItem.OriginalCount(std::to_wstring(m_explorerItems.Size()));
m_uiUpdatesItem.RenamedCount(std::to_wstring(m_renamingCount));
}
HRESULT MainWindow::OnItemAdded(_In_ IPowerRenameItem*)
HRESULT MainWindow::OnItemAdded(_In_ IPowerRenameItem* renameItem)
{
int id = 0;
renameItem->GetId(&id);
PWSTR originalName = nullptr;
renameItem->GetOriginalName(&originalName);
PWSTR newName = nullptr;
renameItem->GetNewName(&newName);
bool selected;
renameItem->GetSelected(&selected);
UINT depth = 0;
renameItem->GetDepth(&depth);
bool isFolder = false;
winrt::check_hresult(renameItem->GetIsFolder(&isFolder));
AddExplorerItem(
id, originalName, newName == nullptr ? hstring{} : hstring{ newName }, isFolder ? 0 : 1, depth, selected);
return S_OK;
}