mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 02:36:19 +02:00
[PowerRename] Tweak UI and fix performance issues (#14365)
* Init * Update MainWindow.xaml * Add identation * Remove template selector * Vertical UI * Update PowerRenameUILib.vcxproj * Revert "Vertical UI" This reverts commitd0b3d264fb. * Revert "Update PowerRenameUILib.vcxproj" This reverts commitba18503db2. * Tweaks to margins * Updated tweaks * Update MainWindow.xaml * Wire counters * Improve perf: Constant O(1) find-item-by-id time instead of O(n) Co-authored-by: Laute <Niels.Laute@philips.com>
This commit is contained in:
@@ -163,18 +163,11 @@ namespace winrt::PowerRenameUILib::implementation
|
||||
return m_uiUpdatesItem;
|
||||
}
|
||||
|
||||
void MainWindow::AddExplorerItem(int32_t id, hstring const& original, hstring const& renamed, int32_t type, int32_t parentId, bool checked)
|
||||
void MainWindow::AddExplorerItem(int32_t id, hstring const& original, hstring const& renamed, int32_t type, uint32_t depth, bool checked)
|
||||
{
|
||||
auto newItem = winrt::make<PowerRenameUILib::implementation::ExplorerItem>(id, original, renamed, type, checked);
|
||||
if (parentId == 0)
|
||||
{
|
||||
m_explorerItems.Append(newItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto parent = FindById(parentId);
|
||||
parent.Children().Append(newItem);
|
||||
}
|
||||
auto newItem = winrt::make<PowerRenameUILib::implementation::ExplorerItem>(id, original, renamed, type, depth, checked);
|
||||
m_explorerItems.Append(newItem);
|
||||
m_explorerItemsMap[id] = newItem;
|
||||
}
|
||||
|
||||
void MainWindow::UpdateExplorerItem(int32_t id, hstring const& newName)
|
||||
@@ -208,43 +201,12 @@ namespace winrt::PowerRenameUILib::implementation
|
||||
|
||||
PowerRenameUILib::ExplorerItem MainWindow::FindById(int32_t id)
|
||||
{
|
||||
auto fakeRoot = winrt::make<PowerRenameUILib::implementation::ExplorerItem>(0, L"Fake", L"", 0, false);
|
||||
fakeRoot.Children(m_explorerItems);
|
||||
return FindById(fakeRoot, id);
|
||||
return m_explorerItemsMap.contains(id) ? m_explorerItemsMap[id] : NULL;
|
||||
}
|
||||
|
||||
PowerRenameUILib::ExplorerItem MainWindow::FindById(PowerRenameUILib::ExplorerItem& root, int32_t id)
|
||||
void MainWindow::ToggleAll(bool checked)
|
||||
{
|
||||
if (root.Id() == id)
|
||||
return root;
|
||||
|
||||
if (root.Type() == static_cast<UINT>(ExplorerItem::ExplorerItemType::Folder))
|
||||
{
|
||||
for (auto c : root.Children())
|
||||
{
|
||||
auto result = FindById(c, id);
|
||||
if (result != NULL)
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void MainWindow::ToggleAll(PowerRenameUILib::ExplorerItem node, bool checked)
|
||||
{
|
||||
if (node == NULL)
|
||||
return;
|
||||
|
||||
node.Checked(checked);
|
||||
|
||||
if (node.Type() == static_cast<UINT>(ExplorerItem::ExplorerItemType::Folder))
|
||||
{
|
||||
for (auto c : node.Children())
|
||||
{
|
||||
ToggleAll(c, 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::Windows::UI::Xaml::RoutedEventArgs const&)
|
||||
@@ -252,7 +214,7 @@ namespace winrt::PowerRenameUILib::implementation
|
||||
auto checkbox = sender.as<Windows::UI::Xaml::Controls::CheckBox>();
|
||||
auto id = std::stoi(std::wstring{ checkbox.Name() });
|
||||
auto item = FindById(id);
|
||||
if (checkbox.IsChecked().GetBoolean() != item.Checked())
|
||||
if (item != NULL && checkbox.IsChecked().GetBoolean() != item.Checked())
|
||||
{
|
||||
m_uiUpdatesItem.Checked(checkbox.IsChecked().GetBoolean());
|
||||
m_uiUpdatesItem.ChangedExplorerItemId(id);
|
||||
@@ -263,9 +225,7 @@ namespace winrt::PowerRenameUILib::implementation
|
||||
{
|
||||
if (checkBox_selectAll().IsChecked().GetBoolean() != m_allSelected)
|
||||
{
|
||||
auto fakeRoot = winrt::make<PowerRenameUILib::implementation::ExplorerItem>(0, L"Fake", L"", 0, false);
|
||||
fakeRoot.Children(m_explorerItems);
|
||||
ToggleAll(fakeRoot, checkBox_selectAll().IsChecked().GetBoolean());
|
||||
ToggleAll(checkBox_selectAll().IsChecked().GetBoolean());
|
||||
m_uiUpdatesItem.ToggleAll();
|
||||
m_allSelected = !m_allSelected;
|
||||
}
|
||||
@@ -278,6 +238,7 @@ namespace winrt::PowerRenameUILib::implementation
|
||||
if (!m_uiUpdatesItem.ShowAll())
|
||||
{
|
||||
m_explorerItems.Clear();
|
||||
m_explorerItemsMap.clear();
|
||||
m_uiUpdatesItem.ShowAll(true);
|
||||
}
|
||||
}
|
||||
@@ -289,6 +250,7 @@ namespace winrt::PowerRenameUILib::implementation
|
||||
if (m_uiUpdatesItem.ShowAll())
|
||||
{
|
||||
m_explorerItems.Clear();
|
||||
m_explorerItemsMap.clear();
|
||||
m_uiUpdatesItem.ShowAll(false);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user