{"id":19133554,"url":"https://github.com/gui-cs/terminalguidesigner","last_synced_at":"2025-05-15T20:07:31.375Z","repository":{"id":37045110,"uuid":"461422335","full_name":"gui-cs/TerminalGuiDesigner","owner":"gui-cs","description":"Forms Designer for Terminal.Gui (aka gui.cs)","archived":false,"fork":false,"pushed_at":"2025-05-05T19:28:50.000Z","size":2948,"stargazers_count":490,"open_issues_count":40,"forks_count":33,"subscribers_count":14,"default_branch":"v2","last_synced_at":"2025-05-15T20:07:05.750Z","etag":null,"topics":["csharp","curses","designer","dotnet","editor","gui","terminal","toolkit","ui"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gui-cs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-02-20T08:03:10.000Z","updated_at":"2025-05-15T18:02:29.000Z","dependencies_parsed_at":"2023-10-11T14:24:19.737Z","dependency_job_id":"6596af33-ea9d-4046-8e3e-b815ea62093d","html_url":"https://github.com/gui-cs/TerminalGuiDesigner","commit_stats":{"total_commits":1237,"total_committers":10,"mean_commits":123.7,"dds":0.5206143896523848,"last_synced_commit":"cf5c192711cb654bb582c8331c10f220da9f6a43"},"previous_names":["tznind/terminalguidesigner"],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gui-cs%2FTerminalGuiDesigner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gui-cs%2FTerminalGuiDesigner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gui-cs%2FTerminalGuiDesigner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gui-cs%2FTerminalGuiDesigner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gui-cs","download_url":"https://codeload.github.com/gui-cs/TerminalGuiDesigner/tar.gz/refs/heads/v2","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254414501,"owners_count":22067272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","curses","designer","dotnet","editor","gui","terminal","toolkit","ui"],"created_at":"2024-11-09T06:22:54.341Z","updated_at":"2025-05-15T20:07:26.199Z","avatar_url":"https://github.com/gui-cs.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terminal Gui Designer\n\n![example workflow](https://github.com/tznind/TerminalGuiDesigner/actions/workflows/build.yml/badge.svg) [![NuGet](https://img.shields.io/nuget/v/TerminalGuiDesigner.svg)](https://www.nuget.org/packages/TerminalGuiDesigner/)\n![Code Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/tznind/2a31eee1c9151917aa8d17b59bc86633/raw/code-coverage.json)\n\nCross platform designer for [Terminal.Gui](https://github.com/migueldeicaza/gui.cs) applications.  \n\nBuilt with CodeDom and Roslyn, TerminalGuiDesigner lets you create complicated Views with drag and drop just like the WinForms designer you know and love (or hate).\n\n\n## V1\n\nInstall the tool from NuGet or follow the [Hello World Tutorial](./README.md#usage):\n```\ndotnet tool install --global TerminalGuiDesigner\n```\n\nUpdate to the latest version using\n```\ndotnet tool update --global TerminalGuiDesigner\n```\nThis project is in alpha.  See the [feature list](./README.md#features) for progress.\n\n## V2 \n\nIf you are targetting Terminal.Gui version 2 (currently pre-alpha) then you will want to install version 2 of the designer\n```\ndotnet tool install --global TerminalGuiDesigner --prerelease\n```\nEnsure that you match the Terminal.Gui library version you reference to the designer version.\n\n![image](https://github.com/user-attachments/assets/1ee4833e-b2c7-4b52-846a-9db288c72440)\n\n## Demo\n\n![long-demo](https://github.com/gui-cs/TerminalGuiDesigner/assets/31306100/5df9f545-8c61-4655-bc0c-1e75d1c149d9)\n\n### Building\n----------------\nBuild using the dotnet 8.0 sdk\n```\ncd src\ndotnet run\n```\n\n### Usage\n------------------\nInstall the dotnet sdk and create a new console application with references to Terminal.Gui.  Install the TerminalGuiDesigner and create a new dialog:\n```\ndotnet new console -n hello\ncd hello\ndotnet add package Terminal.Gui\ndotnet tool install --global TerminalGuiDesigner\nTerminalGuiDesigner MyDialog.cs\n```\n\nEnter a namespace then add a Button to the view.  Save with Ctrl+S.  Exit the designer with Ctrl+Q.\n\nEnter the following into Program.cs\n\n```csharp\nusing Terminal.Gui;\n\nApplication.Init();\n\nApplication.Run(new YourNamespace.MyDialog());\n\nApplication.Shutdown();\n```\n\nRun your program with \n`dotnet run`\n\nYou can add new code to `MyDialog.cs` but avoid making any changes to `MyDialog.Designer.cs` as this will be rewritten when saving.\n\nFor example in `MyDialog.cs` after `InitializeComponent()` add the following:\n\n```csharp\nbutton1.Accepting += ()=\u003eMessageBox.Query(\"Hello\",\"Hello World\",\"Ok\");\n```\nNow when run clicking the button will trigger a message box.\n\n![msgbox](https://user-images.githubusercontent.com/31306100/168493639-c7230505-0215-45e3-90a7-b7c24934a8fa.jpg)\n\nYou can re-open the designer by running it from the command line with the file you want to edit/create.\n\n```\nTerminalGuiDesigner MyDialog.cs\n```\n\nYou can remove the tool using the following:\n\n```\ndotnet tool uninstall --global TerminalGuiDesigner\n```\n\n### Troubleshooting \nIf when running the tool you have issues seeing the colors add the `--usc` flag:\n```\nTerminalGuiDesigner --usc\n```\n\nThe designer is built to be robust and has top level catch blocks but if you are still able to crash it you may find your console blocking input.  If this happens you should be able to fix your console by typing `reset\u003center\u003e` but also :heart: [please report it](https://github.com/tznind/TerminalGuiDesigner/issues/new) :heart:\n\n### Keybindings \u0026 Controls\n----------------\nYou can change keybindings by copying [Keys.yaml](https://raw.githubusercontent.com/tznind/TerminalGuiDesigner/main/src/Keys.yaml) into your current directory.\n\nTo edit MenuBar items use the following controls\n\n| Key          |  Action |\n|--------------|------------|\n| Shift Up/Down | Move selected menu item up/down|\n| Shift Right   | Move selected menu item to a submenu of the one above |\n| Shift Left    | Move selected sub menu item up a level |\n| Del    | Remove selected menu item |\n| Enter    | Add a new menu item |\n| Typing    | Edit the Title of the selected item |\n| Ctrl + T | Set Shortcut |\n| Ctrl + R | Set menu field name |\n\nNew root level menus can be added by right clicking the `MenuBar` and selecting 'Add Menu'.\n\nYou can create a menu separator by typing `---`\n\n### Features\n-------------------------------\n\nThe following feature list shows the current capabilities and the roadmap.  Features in\nitalics are experimental and require passing the `-e` flag when starting application.\n\n- [x] Design classes \n    - [x] Window\n    - [x] Dialog\n    - [x] View\n    - [x] Top level\n- [x] Configure root properties (e.g. Window.Width, Title etc)\n- [x] Configure subview properties\n    - [x] (Name)\n    - [x] X/Y\n    - [x] Width/Height\n    - [x] Text\n    - [x] Color Schemes\n- [x] Edit multiple Views' property at once (e.g. select 3 views and set all Width to 10)\n- [x] Mouse Input\n  - [x] Drag to move\n  - [x] Drag into/out of sub view\n  - [x] Drag to resize\n- [x] Undo/Redo\n- [x] Direct editing of Text just by typing\n- [x] Easy Menu Bar Designing\n  - [x] Create new items\n  - [x] Move items\n  - [x] Move in/out of submenus\n  - [x] Add menu bar separators (Type '---')\n  - [x] Assign shortcuts\n  - [x] Set fieldnames `(Name)`\n- [x] Easy Status Bar Designing\n- [ ] Create Events e.g. MyButton_OnClick\n- [x] View Dependency Management\n  - [x] Prevent deleting views where other Views hold RelativeTo dependencies\n  - [x] Write out dependant views to `InitializeComponent` before dependers\n  - [x] Order Multi Delete operations to delete dependers before dependants\n- [x] Mutli select\n  - [x] Multi delete\n  - [x] Multi keyboard move\n  - [x] Multi mouse drag move\n  - [x] Multi set Property\n  - [x] Multi Copy/Paste\n- [x] Copy/Paste \n  - [x] Single simple views\n  - [ ] Cut\n  - [x] Container views (e.g. TabView)\n  - [ ] To OS clipboard (e.g. open one Designer.cs View and copy to another)\n  - [x] Retain PosRelative mappings in pasted views (e.g. `A` LeftOf `B`)\n- [x] Move views to SubViews\n  - [x] With mouse\n  - [ ] With keyboard\n- [ ] Read and present xmldoc comments when editing properties\n- [ ] Dev Environment Integration\n  - [ ] Visual Studio plugin (e.g. right click a .Designer.cs to open in TerminalGuiDesigner console)\n  - [ ] Visual Studio Code plugin \n- [x] Comprehensive Tests\n- [x] CI\n- [ ] Ability to lock some of the views (prevent changes).  This prevents accidentally dragging a given control\n- [ ] Support adding user defined `View` Types e.g. `MyCustomView`\n- [ ] Corner Cases\n  - [ ] Allow designing `abstract` classes\n  - [ ] Allow designing generic classes (e.g. `MyDialog\u003cT\u003e`)\n  - [ ] Allow designing classes that inherit from another e.g. `class MyDialog : MyOtherDialog`\n     - [ ] Inherited views should be locked to prevent editing\n- [x] Create and edit views\n  - [x] Button\n  - [x] Checkbox\n  - [x] ComboBox\n  - [x] DateField\n  - [x] FrameView\n  - [x] GraphView\n  - [x] HexView\n  - [x] Label\n  - [x] LineView\n  - [x] ListView\n  - [x] MenuBar\n    - [ ] Copy/Paste preserve menu entries\n  - [x] ProgressBar\n  - [x] RadioGroup\n  - [ ] [SplitContainer](https://github.com/gui-cs/Terminal.Gui/pull/2258) (Unreleased)\n    - [ ] Copy/Paste preserve split content panels\n  - [x] StatusBar\n    - [ ] Copy/Paste preserve menu entries\n  - [x] TableView\n    - [x] Add/Remove Columns\n    - [x] Copy/Paste preserve table schema\n  - [x] TabView\n    - [x] Add/Remove new Tabs\n    - [x] Reorder Tabs\n    - [x] Copy/Paste preserve tabs/content\n  - [x] TextField\n  - [x] TextValidateField\n  - [x] TextView\n  - [x] TimeField\n  - [x] TreeView\n  - [x] View\n  - [x] Slider\n\n### Class Diagram\n-------------------------------\n![Terminal.Gui Class Diagram](./TerminalGuiDesigner.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgui-cs%2Fterminalguidesigner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgui-cs%2Fterminalguidesigner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgui-cs%2Fterminalguidesigner/lists"}