mirror of
https://github.com/vczh-libraries/Release.git
synced 2026-02-06 03:42:11 +08:00
7.7 KiB
7.7 KiB
TODO
https://zhuanlan.zhihu.com/p/39369370
GacUI 1.0
Bugs
-
Controls
- DocumentEditor: When a document's height is smaller than the control, the lower part cannot click to interact with the last line.
- DocumentEditor: In default font, the lower part of "g" in the last line is clipped, not rendered properly.
- DocumentEditorRibbon: The dropdown menu for ribbon gallery cannot be properly resized by dragging the resize bar.
-
Github Issues
- https://github.com/vczh-libraries/GacUI/issues/66
- https://github.com/vczh-libraries/GacUI/issues/56
GlobalStringKeyneed to remember theGlobalStringKeyManagerobject, and if the global object is changed, it means this key becomes a wild pointer, it should crash. https://github.com/vczh-libraries/GacUI/issues/46
Workflow
- Collection literal
{a b c}should react to the "receiving type" if the receiving type is a known collection type.- So that it is able to do
DealWithObservableList({1 2 3});
- So that it is able to do
new(name: string, items: observe X^[]) { this.Name = name; this.Items = items; }doesn't work foritems.let X = Y in (F(X.a.b.c))reportsX does not exist in the current scopein binding property value- while
F((let X = Y.a.b).c)works
- while
Other Issues
- Update bash scripts to support VC++ Shared Items Project
Feature (not necessary 1.0)
- Drag and Drop framework
IColumnItemView- Change column size from
intto{minSize:int, columnOption:Absolute|Percentage, absolute:int, percentage:float} - Column drag and drop
- ListView: swap column object, texts in list view items are not touch
- DataGrid: swap column object, cells are changed due to binding
- Change column size from
- ListView
GroupedListViewandBindableGroupedListViewfromGuiVirtualListView: Group headers on all viewsTreeListViewandBindableTreeListViewfromGuiVirtualTreeView
- New
GuiListControl::IItemArrangerthat can accept aGuiRepeatCompositionBase - -
<eval Eval="expression"/>tags - INativeImage::SaveToStream handle correctly for git format. It is possible that LoadFromStream need to process diff between git raw frames.
- New skin
- New default control templates with animation, written in XML generated C++ code.
- A window can be called to update all its controls' and components' template
- Tutorials use the new default control templates
GacUI 2.0
Vlpp
- Add
char8_tandUString, and make following library supportUStringnatively:TextWriter/TextReader, encoder, decoder- Regex
- Parser
- Add
Utf32EncoderandUtf32Decodertovl::stream. - Consider about heterougeneous tree string
- Regex supports UTF-16 (instead of UCS-2) on MSVC.
- Always convert to UTF-32 internally (
vl::regex::Utf32Reader).
- Always convert to UTF-32 internally (
- Redesign vl::parsing.
- No need to specify ambiguity
- Will print all ambiguous cases and marked AST node
- ToString with hints and custom options
- Print diff when updating AST (for IDE)
- All existing features and backward compatible interface design
- Add DisposedFlag to collections and all reflectable classes and interfaces
- Reflectable interfaces like
IReflectableReadableCollection<T>, inherits fromIReadableCollection<T>andIReadableCollection<Value> - Remove
FOREACHandFOREACH_INDEXER, replaced by range-based for loop - Fix
Linqso that lambda parameters can beauto, instead of specifiedtypes - Redesign
VCZH_MSVCseries macros- Separate OS dependent implementations to different files for all repos, not only GacUI.
Workflow
- Don't create IValueList if apply
{1 2 3}onList<int>argument. - Support
<category>nameidentifier, make generated code re-parsable. - Recognize collection interfaces instead of collection entities.
- Reconsider how to implement collection creating code in Workflow.
- Move to new ParserGen.
- WorkflowCompiler.exe (x32/x64)
- Enable external symbols
- Compile
- Binary Output (full assembly or types only)
- C++ Codegen (x32/x64)
- (probably not do)
- Macro
- Context-Grammar Sensitive Macro
- Virtual function
- Class implements interface
Hero DB
ParserGen 2
GacUI
- Use collection interfaces on function signatures.
- UI Automation
- Test Automation for
GacUISrc
Cross Platforms
INativeHostedController+INativeHostedWindow- Implementing these interfaces enable GacUI to run in the
hosted single windowmode, all GacUI windows and menus are rendered in one native window
- Implementing these interfaces enable GacUI to run in the
- SyncTree architecture that streams layout/element changes per
GuiControlHost - Port GacUI to other platforms:
- Windows
- Command/Powershell Line in Windows (hosted)
- GDI (hosted mode)
- Direct2d (hosted mode)
- UWP (hosted mode + sync tree)
- Linux
- Ncurses on Ubuntu (hosted)
- gGac repo: complete development process for release
- macOS
- iGac repo: complete development process for release
- Web Assembly (hosted mode + sync tree)
- Canvas?
- DOM?
- Windows
Graphics
- 2D drawing API
- restriction-based MetaImageElement
- Remove PolygonElement
- Default non-text element renderer using 2D drawing API
- Meta3DElement and Meta3D data structure
- Default Meta3DElement renderer using MetaImageElement with a surface sorting based algorithm
- GIF player
- video player
Controls
- Chart
- Dock Container
- Touch support
Binders
- Other languages
- XML still generate C++ files, and they need to be compiled to an appropriate form.
- Other programming languages doesn't access GacUI objects, instead they implement view model interfaces that defined in XML.
- Users need to compile C++ code by themselves.
- Users are not required to write C++ code, but they can.
- Users can add attributes in XML defined interfaces, so that GacGen can generate a list of them. After that, by reading generated workflow assembly files, glue code can be generated so that users can implement required view model interfaces directly. I will provide some tools for listed languages.
- Resources need to be generated in C++ files, because other languages cannot access GacUI objects, which means they cannot load resources manually.
- Languages:
- JavaScript / TypeScript through Web assembly
- .NET (core?) through dll
- Python through dll
Refactoring
- Modulized GacUISrc sources and projects
- NativeWindow
- Windows
- WindowsGDI
- WindowsDirect2D
- GacUI
- Basic Controls / List Controls / Toolstrip Controls / TextBox Controls
- Controls in future
- UI in future (e.g. Wizard framework)
- With reflections / virtual classes / loaders placed separately
- CodePack-ed files don't change
- Compiler
GacGen.exe
- Enable linking to external symbols
- Remove all loader implementation
mynamespaces::VirtualClassesXfor adding classes (under this namespace) and specifying their base types- X for anything, for simulating partial classes
- following a naming convention, like:
GuiSelectableButton* CheckBox()
mynamespaces::XXXLoaderfor implementing different kinds of properties / constructors that are not actually exist inmynamespaces::XXX- following a naming convention, e.g.
GuiTableComposition's rows/columns properties - searching for correct default control templates
- following a naming convention, e.g.
- GacGen.exe uses external files for control types (but not for elements / compositions)
- external files provide reflection-only type information, maybe created by Workflow
- In the final pass, only workflow scripts are printed
- Use WorkflowCompiler.exe to do codegen externally
- Incremental build inside single resource.
- Calculate dependencies by only parsing.
- Cache workflow assembly per resource in file.
- Codegen c++ from multiple workflow assembly.