WPF port of multiple tool windows + Convert to vertical slices 🍕#1154
Draft
WPF port of multiple tool windows + Convert to vertical slices 🍕#1154
Conversation
Contributor
There was a problem hiding this comment.
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; |
# Conflicts: # TombEditor/Controls/Panel3D/Panel3DObjectBrush.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.