0install-win icon indicating copy to clipboard operation
0install-win copied to clipboard

Eto.Forms spike: Convert PortableCreatorDialog and SelectCommandDialog

Open Copilot opened this issue 2 months ago • 0 comments

Proof of concept converting two WinForms dialogs to Eto.Forms to evaluate cross-platform UI modernization.

Implementation

New Projects

  • Central.Eto - Library with Eto.Forms dialog implementations
  • Central.Eto.Demo - Demo application showcasing converted dialogs

Converted Dialogs

  • PortableCreatorDialog - Portable installation creator
  • SelectCommandDialog - Command selection interface (simplified)

Key Patterns

  • Manual UI construction using TableLayout and StackLayout
  • Resx localization via ResourceManager (17 languages preserved)
  • Event handlers map directly from WinForms equivalents
// Eto.Forms layout approach
Content = new TableLayout
{
    Spacing = new Size(5, 10),
    Rows =
    {
        new TableRow(labelInfo),
        new TableRow(targetLayout),
        new TableRow { ScaleHeight = true }
    }
};

Findings

Viable for cross-platform UI - Resx localization works unchanged, layout system is more flexible than WinForms anchoring, but requires manual UI construction.

Trade-offs - ~2x LOC per dialog (no designer code separation), steeper learning curve, but cleaner diffs and explicit layout logic.

See ETO_FORMS_SPIKE.md for detailed analysis and src/Central.Eto/README.md for technical comparison.

[!WARNING]

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • ci.appveyor.com
    • Triggering command: /usr/bin/dotnet dotnet restore (dns block)
    • Triggering command: /usr/bin/dotnet dotnet build (dns block)
    • Triggering command: /usr/bin/dotnet dotnet build Central.Eto.Demo/Central.Eto.Demo.csproj --no-restore (dns block)
  • t1.symcb.com
    • Triggering command: /usr/bin/dotnet dotnet build (dns block)
  • t2.symcb.com
    • Triggering command: /usr/bin/dotnet dotnet build (dns block)
  • tl.symcb.com
    • Triggering command: /usr/bin/dotnet dotnet build (dns block)
  • tl.symcd.com
    • Triggering command: /usr/bin/dotnet dotnet build (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>Eto.Forms spike</issue_title> <issue_description>Pick one or two simple Forms in the project and convert them from WinForms to Eto.Forms as a proof of concept. Make sure to retain resx-based localization.</issue_description>

Comments on the Issue (you are @copilot in this section)

  • Fixes 0install/0install-win#236

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot avatar Dec 23 '25 14:12 Copilot