Skip to content

WPF port of multiple tool windows + Convert to vertical slices 🍕#1154

Draft
Nickelony wants to merge 7 commits intodevelopfrom
Nickelony/NEW-WPF
Draft

WPF port of multiple tool windows + Convert to vertical slices 🍕#1154
Nickelony wants to merge 7 commits intodevelopfrom
Nickelony/NEW-WPF

Conversation

@Nickelony
Copy link
Copy Markdown
Collaborator

No description provided.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports several TombEditor tool windows from WinForms to WPF (hosted via ElementHost) and reorganizes UI code into Features/* namespaces, while also updating localization key resolution to be more resilient to common view suffixes.

Changes:

  • Added WPF-based dockable views (Sector/Room options, Lighting, Palette, Texture panel, etc.) and corresponding ViewModels.
  • Introduced WPF utility helpers (color/brush conversions, frozen pens/brushes) and new WPF converters/styles in DarkUI.
  • Updated localization to trim common component suffixes (View, Window, Page, Dialog) during key resolution.

Reviewed changes

Copilot reviewed 84 out of 106 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
TombLib/TombLib.WPF/WPFUtils.cs New WPF helper utilities (interop + color/brush helpers + control enumeration).
TombLib/TombLib.WPF/Services/Abstract/ILocalizationService.cs Documentation update describing suffix trimming behavior.
TombLib/TombLib.WPF/Localizer.cs Trims common component suffixes in localized key lookups.
TombLib/TombLib.WPF/LocalizeExtension.cs Documentation update for suffix trimming behavior.
TombEditor/ToolWindows/ToolPaletteFloating.cs Removed legacy ToolPalette floating toolbox implementation.
TombEditor/ToolWindows/ToolPalette.cs Removed legacy ToolPalette tool window implementation.
TombEditor/ToolWindows/SectorOptions.cs Removed legacy SectorOptions tool window implementation.
TombEditor/ToolWindows/RoomOptions.cs Removed legacy RoomOptions tool window implementation.
TombEditor/ToolWindows/Palette.cs Removed legacy Palette tool window implementation.
TombEditor/ToolWindows/Palette.Designer.cs Removed legacy Palette designer file.
TombEditor/ToolWindows/Lighting.cs Removed legacy Lighting tool window implementation.
TombEditor/TombEditor.csproj Enables C# 12, adds WPF behaviors package, updates resources/compile items.
TombEditor/Forms/FormMain.cs Switches tool window/toolbox references to new Features/* locations.
TombEditor/Features/Panel3D/ToolPalette/ToolboxViewModel.cs Renames/moves Toolbox ViewModel into Features.Panel3D.ToolPalette.
TombEditor/Features/Panel3D/ToolPalette/ToolboxView.xaml.cs Renames/moves Toolbox WPF view code-behind.
TombEditor/Features/Panel3D/ToolPalette/ToolboxView.xaml Updates Toolbox WPF view XAML class/namespace bindings.
TombEditor/Features/Panel3D/ToolPalette/Toolbox.resx New resources for Toolbox WinForms host control.
TombEditor/Features/Panel3D/ToolPalette/Toolbox.cs Renames/moves WinForms host control to Toolbox.
TombEditor/Features/Panel3D/ToolPalette/Toolbox.Designer.cs Updates designer to instantiate new ToolboxView.
TombEditor/Features/Panel3D/ToolPalette/ToolPaletteFloating.resx New resources for floating ToolPalette.
TombEditor/Features/Panel3D/ToolPalette/ToolPaletteFloating.cs New floating ToolPalette wrapper class.
TombEditor/Features/Panel3D/ToolPalette/ToolPaletteFloating.Designer.cs Designer updated to use new Toolbox control type.
TombEditor/Features/Panel3D/ToolPalette/ToolPalette.resx New resources for docked ToolPalette.
TombEditor/Features/Panel3D/ToolPalette/ToolPalette.cs New docked ToolPalette wrapper class.
TombEditor/Features/Panel3D/ToolPalette/ToolPalette.Designer.cs Designer updated to use new Toolbox control type.
TombEditor/Features/Panel3D/ObjectBrush/ObjectBrushToolboxViewModel.cs Moves ObjectBrush toolbox VM into Features.Panel3D.ObjectBrush.
TombEditor/Features/Panel3D/ObjectBrush/ObjectBrushToolboxView.xaml.cs Moves ObjectBrush toolbox WPF view into new namespace.
TombEditor/Features/Panel3D/ObjectBrush/ObjectBrushToolboxView.xaml Updates ObjectBrush toolbox XAML class/namespace bindings.
TombEditor/Features/Panel3D/ObjectBrush/ObjectBrushToolbox.resx New resources for ObjectBrush toolbox host.
TombEditor/Features/Panel3D/ObjectBrush/ObjectBrushToolbox.cs New ObjectBrush floating toolbox host (ElementHost).
TombEditor/Features/Panel3D/ObjectBrush/ObjectBrushToolbox.Designer.cs Designer updated to instantiate new WPF view.
TombEditor/Features/Panel3D/ObjectBrush/Helper.cs Renames helper class to Helpers and adjusts logic/cleanup.
TombEditor/Features/Panel3D/ObjectBrush/Constants.cs New shared constants for object brush feature.
TombEditor/Features/Panel3D/ObjectBrush/Actions.cs Updates brush actions to use renamed helpers/constants.
TombEditor/Features/DockableViews/TriggerList/TriggerListView.xaml.cs New WPF TriggerList view code-behind.
TombEditor/Features/DockableViews/TriggerList/TriggerListView.xaml New WPF TriggerList layout (WindowsFormsHost + buttons).
TombEditor/Features/DockableViews/TriggerList/TriggerList.resx New resources for TriggerList.
TombEditor/Features/DockableViews/TriggerList/TriggerList.cs Moves TriggerList tool window into Features.DockableViews.
TombEditor/Features/DockableViews/TriggerList/TriggerList.Designer.cs Updates TriggerList designer namespace.
TombEditor/Features/DockableViews/TexturePanel/TexturePanelView.xaml.cs New WPF TexturePanel view code-behind.
TombEditor/Features/DockableViews/TexturePanel/TexturePanelView.xaml New WPF TexturePanel layout (WindowsFormsHost + toolbars).
TombEditor/Features/DockableViews/TexturePanel/TexturePanel.resx New resources for TexturePanel.
TombEditor/Features/DockableViews/TexturePanel/TexturePanel.cs Moves TexturePanel tool window into Features.DockableViews.
TombEditor/Features/DockableViews/TexturePanel/TexturePanel.Designer.cs Updates TexturePanel designer namespace.
TombEditor/Features/DockableViews/SectorOptionsPanel/SectorOptionsViewModel.cs New WPF/MVVM SectorOptions logic + command bindings.
TombEditor/Features/DockableViews/SectorOptionsPanel/SectorOptionsView.xaml.cs New WPF SectorOptions view code-behind and cleanup wiring.
TombEditor/Features/DockableViews/SectorOptionsPanel/SectorOptions.resx New resources for SectorOptionsPanel.
TombEditor/Features/DockableViews/SectorOptionsPanel/SectorOptions.cs New tool window host for SectorOptions WPF view.
TombEditor/Features/DockableViews/SectorOptionsPanel/SectorOptions.Designer.cs ElementHost-based designer wiring for SectorOptions.
TombEditor/Features/DockableViews/RoomOptionsPanel/RoomOptionsView.xaml.cs New WPF RoomOptions view code-behind.
TombEditor/Features/DockableViews/RoomOptionsPanel/RoomOptions.resx New resources for RoomOptionsPanel.
TombEditor/Features/DockableViews/RoomOptionsPanel/RoomOptions.cs New tool window host for RoomOptions WPF view.
TombEditor/Features/DockableViews/RoomOptionsPanel/RoomOptions.Designer.cs ElementHost-based designer wiring for RoomOptions.
TombEditor/Features/DockableViews/PalettePanel/PaletteViewModel.cs New Palette MVVM state + command wrappers.
TombEditor/Features/DockableViews/PalettePanel/PaletteView.xaml.cs New Palette WPF view hosting custom PaletteGrid.
TombEditor/Features/DockableViews/PalettePanel/PaletteView.xaml New Palette WPF layout + command bindings.
TombEditor/Features/DockableViews/PalettePanel/PaletteGrid.cs New custom-rendered WPF palette grid with interaction logic.
TombEditor/Features/DockableViews/PalettePanel/Palette.resx New resources for PalettePanel.
TombEditor/Features/DockableViews/PalettePanel/Palette.cs New tool window host for Palette WPF view.
TombEditor/Features/DockableViews/PalettePanel/Palette.Designer.cs ElementHost-based designer wiring for Palette.
TombEditor/Features/DockableViews/ObjectList/ObjectListView.xaml.cs New WPF ObjectList view code-behind.
TombEditor/Features/DockableViews/ObjectList/ObjectListView.xaml New WPF ObjectList layout (WindowsFormsHost + buttons).
TombEditor/Features/DockableViews/ObjectList/ObjectList.resx New resources for ObjectList.
TombEditor/Features/DockableViews/ObjectList/ObjectList.cs Moves ObjectList tool window into Features.DockableViews.
TombEditor/Features/DockableViews/ObjectList/ObjectList.Designer.cs Updates ObjectList designer namespace/minor formatting.
TombEditor/Features/DockableViews/LightingPanel/LightingViewModel.cs New Lighting MVVM logic (properties + commands + state).
TombEditor/Features/DockableViews/LightingPanel/LightingView.xaml.cs New Lighting WPF view code-behind and cleanup.
TombEditor/Features/DockableViews/LightingPanel/LightingView.xaml New Lighting WPF layout + bindings for numeric/checkbox controls.
TombEditor/Features/DockableViews/LightingPanel/Lighting.resx New resources for LightingPanel.
TombEditor/Features/DockableViews/LightingPanel/Lighting.cs New tool window host for Lighting WPF view.
TombEditor/Features/DockableViews/LightingPanel/Lighting.Designer.cs ElementHost-based designer wiring for Lighting.
TombEditor/Features/DockableViews/ItemBrowser/ItemBrowserView.xaml.cs New WPF ItemBrowser view code-behind.
TombEditor/Features/DockableViews/ItemBrowser/ItemBrowserView.xaml New WPF ItemBrowser layout (WindowsFormsHost + buttons).
TombEditor/Features/DockableViews/ItemBrowser/ItemBrowser.resx New resources for ItemBrowser.
TombEditor/Features/DockableViews/ItemBrowser/ItemBrowser.cs Moves ItemBrowser tool window into Features.DockableViews.
TombEditor/Features/DockableViews/ItemBrowser/ItemBrowser.Designer.cs Updates ItemBrowser designer namespace/minor formatting.
TombEditor/Features/DockableViews/ImportedGeometryBrowser/ImportedGeometryBrowserView.xaml.cs New WPF ImportedGeometryBrowser view code-behind.
TombEditor/Features/DockableViews/ImportedGeometryBrowser/ImportedGeometryBrowserView.xaml New WPF ImportedGeometryBrowser layout (WindowsFormsHost + buttons).
TombEditor/Features/DockableViews/ImportedGeometryBrowser/ImportedGeometryBrowser.resx New resources for ImportedGeometryBrowser.
TombEditor/Features/DockableViews/ImportedGeometryBrowser/ImportedGeometryBrowser.cs Moves ImportedGeometryBrowser tool window into Features.DockableViews.
TombEditor/Features/DockableViews/ImportedGeometryBrowser/ImportedGeometryBrowser.Designer.cs Updates ImportedGeometryBrowser designer namespace/minor formatting.
TombEditor/Features/DockableViews/ContentBrowser/FilterOption.cs Extracts filter option model from VM into standalone type.
TombEditor/Features/DockableViews/ContentBrowser/ContentBrowserViewModel.cs Moves ContentBrowser VM into Features.DockableViews.ContentBrowser and removes embedded models/enums.
TombEditor/Features/DockableViews/ContentBrowser/ContentBrowserView.xaml.cs Moves ContentBrowser view code-behind into new namespace.
TombEditor/Features/DockableViews/ContentBrowser/ContentBrowserView.xaml Updates ContentBrowser XAML class/namespace and DataTemplate type refs.
TombEditor/Features/DockableViews/ContentBrowser/ContentBrowser.cs Moves ContentBrowser tool window into Features.DockableViews.
TombEditor/Features/DockableViews/ContentBrowser/ContentBrowser.Designer.cs Designer updated to instantiate new ContentBrowserView.
TombEditor/Features/DockableViews/ContentBrowser/AssetItemViewModel.cs Extracts asset tile view model into its own file.
TombEditor/Features/DockableViews/ContentBrowser/AssetCategory.cs Extracts asset category enum into its own file.
TombEditor/Controls/Panel3D/Panel3DObjectBrush.cs Updates object brush references to new Features.Panel3D.ObjectBrush types.
TombEditor/Controls/ObjectBrush/ObjectBrushToolbox.cs Removes legacy ObjectBrush toolbox host.
TombEditor/Controls/ObjectBrush/ObjectBrushConstants.cs Removes legacy ObjectBrush constants.
TombEditor/Command.cs Adds WPF ICommand adapter and constructor overload for CommandArgs; updates usings for moved tool windows.
DarkUI/DarkUI.WPF/Styles/NumericUpDown.xaml Ensures NumericUpDown foreground uses theme text brush.
DarkUI/DarkUI.WPF/Converters/VectorToUIColorConverter.cs New converter for Vector4 <-> WPF Color.
DarkUI/DarkUI.WPF/Converters/VectorToBrushConverter.cs New converter for Vector4 <-> SolidColorBrush.
DarkUI/DarkUI.WPF/Converters/HtmlToUIColorConverter.cs New converter for HTML color strings <-> WPF Color.
.gitignore Ignores TEMP_WPF/.
Files not reviewed (8)
  • TombEditor/Features/DockableViews/LightingPanel/Lighting.Designer.cs: Language not supported
  • TombEditor/Features/DockableViews/PalettePanel/Palette.Designer.cs: Language not supported
  • TombEditor/Features/DockableViews/RoomOptionsPanel/RoomOptions.Designer.cs: Language not supported
  • TombEditor/Features/DockableViews/SectorOptionsPanel/SectorOptions.Designer.cs: Language not supported
  • TombEditor/ToolWindows/Lighting.Designer.cs: Language not supported
  • TombEditor/ToolWindows/Palette.Designer.cs: Language not supported
  • TombEditor/ToolWindows/RoomOptions.Designer.cs: Language not supported
  • TombEditor/ToolWindows/SectorOptions.Designer.cs: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment on lines +233 to +241
int oldColumns = _oldPaletteSize.Width > 0 ? (int)(_oldPaletteSize.Width / CellWidth) : ColumnCount;
int newColumns = ColumnCount;

if (oldColumns > 0 && newColumns > 0 && oldColumns != newColumns)
{
int x = _selectedIndex % oldColumns;
int y = _selectedIndex / oldColumns;
_selectedIndex = (y * oldColumns) + x;
}
Comment on lines 61 to +73
public class CommandArgs
{
public Editor Editor;
public IWin32Window Window;
public Keys KeyData = Keys.None;

public CommandArgs() { }

public CommandArgs(IWin32Window window, Editor editor)
{
Window = window;
Editor = editor;
}
Comment on lines +279 to +285
for (int x = 0; x < columns; x++)
{
int index = (y * columns) + x;
var color = GetColorAtIndex(index);
var brush = WPFUtils.CreateFrozenBrush(color);
dc.DrawRectangle(brush, null, new Rect(x * CellWidth, y * CellHeight, CellWidth, CellHeight));
}
Comment on lines +67 to +72
public static IEnumerable<Control> AllSubControls(DependencyObject depObj)
{
if (depObj == null)
yield return (Control)Enumerable.Empty<Control>();

foreach (var child in LogicalTreeHelper.GetChildren(depObj))
Comment on lines +19 to +21

public static Brush ToWPFBrush(this Vector3 color) => new Vector4(color, 255.0f).ToWPFBrush();
public static Vector3 ToFloat3Color(this Color color) => new Vector3(color.R, color.G, color.B) / 255.0f;
Base automatically changed from Nickelony/Content-Browser to develop March 15, 2026 12:06
# Conflicts:
#	TombEditor/Controls/Panel3D/Panel3DObjectBrush.cs
@Nickelony Nickelony added this to the Version 2.0 milestone Mar 23, 2026
@Nickelony Nickelony added enhancement A task which adds something new or improves on existing features. new feature This is a new feature task. refactoring Task which involves a refactor. work in progress The Pull Request is not finished yet or needs some extra work done to it. labels Mar 23, 2026
@Nickelony Nickelony changed the title WPF port of SectorOptions, RoomOptions, Lighting and Palette ToolWindows WPF port of multiple tool windows + Convert to vertical slices 🍕 Mar 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement A task which adds something new or improves on existing features. new feature This is a new feature task. refactoring Task which involves a refactor. work in progress The Pull Request is not finished yet or needs some extra work done to it.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants