miqt/TODO

95 lines
3.3 KiB
Plaintext

Phase zero
- [X] Handwritten bindings
Phase 1
- [X] Parse headers
- [ ] Generate types
- [X] Convert parameter pointer types to binding types
- [X] Basic methods
- [X] Special methods
- [X] Constructors
- [X] Prevent calling ctor of abstract class
- [X] ~~Destructors~~ We only need .Delete()
- [X] Copy-constructors
- [ ] Move-constructors (e.g. QWidgetData)
- [X] Operator overloading
- [X] Class inheritance
- [X] Detect in AST
- [X] ~~Downcast helper methods~~ Direct type available
- [ ] Public member variables
- [ ] Static methods (e.g. QWidget::setTabOrder)
- [X] Return of class types passed by pointer
- [X] Return of class types passed by value (e.g. `_Icon()`)
- ~~want to copy-construct into Go-provided memory~~ Go can't allocate a C++ type
- Return as a heap pointer instead
- [X] Class parameters passed by pointer (want to call `cPointer()`)
- [X] Class parameters passed by value (need to dereference) e.g. `_SetIcon()`
- [X] QString type conversion
- [X] For parameters
- [X] For return types
- [X] QList type conversion (e.g. QWidget::Actions())
- [X] For parameters
- [X] For return types
- [X] QStringList combination type conversion
- [X] ~~QByteArray type conversion~~ Seems to be fine as a non-templated type
- [X] Hide private methods
- [X] Optional parameters
- [X] Overloaded methods
- [ ] Simple typedefs (e.g. WId)
- [ ] Qt:: namespace enums/const values
- e.g. Qt::WindowFlags (global)
- e.g. QWidget::RenderFlag (per-class)
- [ ] Free functions
- [ ] QtCore
- [ ] QtGui
- [ ] QtWidgets
- [ ] `connect`
- [ ] Minimal example
- [ ] Calling connect
- [X] Pick a name for the package
- [ ] Make github repo, rename module
- [ ] v0 Public release
Phase 2
- [X] ~~QString / QList helper functions~~ Lean on native Go types
- [ ] Other Qt template containers
- [ ] QVector
- [ ] QMap / QHash
- [ ] QSet
- [ ] Test edge cases
- Exercising QString interop
- Exercising QList interop
- QByteArray::split returning QList<QByteArray> memory safety
- QIcon.SetThemeSearchPaths taking QStringList
- Calling methods on base class
- Anything where we use runtime.SetFinalizer
- [ ] Documentation
- [ ] Adapt examples from other Go Qt bindings
- [ ] Document comparison with other Qt binding packages
- [ ] Document use for Windows/macOS/Linux
Wishlist
- [X] Remove P* types (Cgo does support pointers to incomplete C types)
- [ ] CI action to rebuild bindings
- [ ] Convert generated cpp files to amalgamation build for faster compilation
- https://github.com/golang/go/issues/9887
- [ ] Consider projecting QByteArray as []byte
- [ ] Subclassing (e.g. render delegates)
- [ ] Custom Q_PROPERTY support
- [ ] uic implementation
- [ ] Use clang ast's `mangledName` to make a dlsym/LazyDLL cgo-free version
- [ ] Copy Qt documentation into function doc comments for IDE hinting
- [ ] Generate bindings for all current Qt versions (Debian Qt / Qt LTS), expose as git tags
- [ ] Reuse CABI to generate Qt bindings for other non-Go languages
- [ ] Reduce necessary memory copies around ABI boundaries
- [ ] Bypass malloc/free for zero-length strings
- [ ] Bypass malloc/free for zero-length arrays
- [ ] Generate other Qt libraries e.g. QtSvg
- [ ] Document process for binding more libraries e.g. QScintilla, QZXing
- [ ] Qt Creator integration
- [ ] Get down to zero ErrTooComplex skips