miqt/TODO

145 lines
5.6 KiB
Plaintext
Raw Normal View History

2024-08-06 01:06:50 +00:00
Phase zero
- [X] Handwritten bindings
Phase 1
- [X] Parse headers
2024-08-08 07:06:50 +00:00
- [ ] Generate types
- [X] Convert parameter pointer types to binding types
- [X] Basic methods
2024-08-10 00:54:31 +00:00
- [X] Special methods
- [X] Constructors
- [X] Prevent calling ctor of abstract class
- [X] ~~Destructors~~ We only need .Delete()
- [X] Copy-constructors
2024-08-08 07:06:50 +00:00
- [X] Operator overloading
2024-08-17 00:40:00 +00:00
- [ ] Move-constructors (e.g. QWidgetData)
2024-08-10 00:54:31 +00:00
- [X] Class inheritance
- [X] Detect in AST
- [X] ~~Downcast helper methods~~ Direct type available
2024-08-17 00:40:00 +00:00
- [ ] Types
2024-08-17 02:11:41 +00:00
- [X] ~~PVoid typedefs~~ Removed/no longer needed as CGo supports pointers to incomplete C types
2024-08-17 00:40:00 +00:00
- [X] Class types passed by pointer
- [X] For parameters (want to call `cPointer()`)
- [X] For return types
- [X] Class types passed by value
- [X] For parameters (need to dereference) e.g. `_SetIcon()`
- [X] For return types (e.g. `_Icon()`)
- ~~want to copy-construct into Go-provided memory~~ Go can't allocate a C++ type
- Return as a heap pointer instead, convert to fake value-type using SetFinalizer
- [X] QString type conversion
2024-08-22 09:56:34 +00:00
- [X] For input parameters
- [ ] For output parameters by pointer (e.g. QLockInfo::getLockInfo)
2024-08-17 00:40:00 +00:00
- [X] For return types
- [X] QList type conversion (e.g. QWidget::Actions())
- [X] For parameters
2024-08-22 09:56:34 +00:00
- [ ] For output parameters by pointer (n.b. does this happen??)
2024-08-17 00:40:00 +00:00
- [X] For return types
- [X] Combinations
- [X] QList<T*>
- [X] For parameters
- [X] For return types
- [X] QList<T> of value types
- [X] For parameters
- [X] For return types
- [ ] COMBINATION: Need to use SetFinalizer?
- [X] QStringList combination type conversion
- [X] For parameters
- [X] For return types
- [X] ~~QByteArray type conversion~~ Seems to be fine as a non-templated type
2024-08-18 05:48:28 +00:00
- [X] C array style used by QApplication constructor (int& argc, char** argv)
2024-08-17 00:40:00 +00:00
- [ ] Typedefs
- [X] Simple typedefs e.g. WId (hardcoded)
- [X] QRgb (hardcoded)
- [X] Parse from AST
- [ ] Generic replacement
2024-08-08 07:06:50 +00:00
- [X] Hide private methods
2024-08-11 04:37:26 +00:00
- [X] Optional parameters
2024-08-15 07:53:28 +00:00
- [X] Overloaded methods
2024-08-18 05:48:28 +00:00
- [X] Static methods (e.g. QWidget::setTabOrder)
- [ ] Signals
- [X] Add `connect` wrappers for each signal
- [ ] Argument marshalling
- [ ] Overload disambiguation (e.g. QProcess signals)
- [ ] Automatic memory management
- [ ] Disconnect()
2024-08-17 00:40:00 +00:00
- [ ] Public member variables
2024-08-09 22:36:41 +00:00
- [ ] Qt:: namespace enums/const values
2024-08-11 04:37:26 +00:00
- e.g. Qt::WindowFlags (global)
- e.g. QWidget::RenderFlag (per-class)
2024-08-09 22:36:41 +00:00
- [ ] Free functions
2024-08-25 03:33:08 +00:00
- [X] QtCore
- [X] QtGui
- [X] QtWidgets
- Successful `go build` of 409 C++ headers first achieved 2024-08-25.
2024-08-11 04:37:26 +00:00
- [ ] Minimal example
- [ ] Calling connect
2024-08-08 07:06:50 +00:00
- [X] Pick a name for the package
- [ ] Make github repo, rename module
2024-08-06 01:06:50 +00:00
- [ ] v0 Public release
Phase 2
2024-08-15 07:53:28 +00:00
- [X] ~~QString / QList helper functions~~ Lean on native Go types
- [ ] Other Qt template containers
2024-08-17 00:40:00 +00:00
- [X] QVector // Seems to mostly work identically using QList code
2024-08-17 02:11:41 +00:00
- [ ] QPair (e.g. QGradientStop)
2024-08-15 07:53:28 +00:00
- [ ] QMap / QHash
- [ ] QSet
2024-08-22 09:56:34 +00:00
- [ ] Nested templates e.g. QList<QPair<..>> (e.g. ...)
2024-08-15 07:53:28 +00:00
- [ ] Test edge cases
- Exercising QString interop
- Exercising QList interop
2024-08-17 00:40:00 +00:00
- QList<Qt type by pointer> return (...), parameter (...)
- QList<Qt type by value> return (QByteArray::split ), parameter (...)
- QStringList return (QColor_ColorNames), parameter (QIcon.SetThemeSearchPaths)
- QList<int> return (QImage_ColorTable), parameter (...)
2024-08-15 07:53:28 +00:00
- Calling methods on base class
- Anything where we use runtime.SetFinalizer
2024-08-17 02:11:41 +00:00
- Check mallocs/frees match in all cases
- Run under valgrind to ensure no Qt memory leakage
2024-08-15 07:53:28 +00:00
- [ ] Documentation
- [ ] Adapt examples from other Go Qt bindings
- [ ] Document comparison with other Qt binding packages
- [ ] Document use for Windows/macOS/Linux
2024-08-06 01:06:50 +00:00
Wishlist
2024-08-17 02:11:41 +00:00
- [ ] Check compilation on x86_32/ARM32 architecture with 32-bit pointer width
2024-08-22 09:56:34 +00:00
- [ ] Exception-safety? Does Qt rely on exceptions anywhere?
- Advanced Qt functionality
2024-08-17 02:11:41 +00:00
- [ ] Subclassing (e.g. render delegates)
2024-08-18 05:48:28 +00:00
- [ ] Test of model-view list rendering
2024-08-17 02:11:41 +00:00
- [ ] Custom Q_PROPERTY support
2024-08-22 09:56:34 +00:00
- Usability
2024-08-18 05:48:28 +00:00
- [X] QPaintEngine::fix_neg_rect should have a better name
2024-08-17 02:11:41 +00:00
- [ ] Project DeprecatedAttr as `// Deprecated` comment
- [ ] Consider projecting QByteArray as []byte
2024-08-22 09:56:34 +00:00
- [ ] Consider projecting QDate/QTime/QDateTime as *time.Time
2024-08-17 02:11:41 +00:00
- [ ] Use clang ast's `mangledName` to make a dlsym/LazyDLL cgo-free version
- [ ] Copy Qt documentation into function doc comments for IDE hinting
- What license is the Qt documentation under, what are the license implications of this?
- [ ] Generate bindings for all current Qt versions (Debian Qt / Qt LTS), expose as git tags
2024-08-22 09:56:34 +00:00
- Outreach/community
2024-08-17 02:11:41 +00:00
- [ ] Dockerize a reproducible build process
- [ ] CI action to rebuild bindings
- [ ] Reuse CABI to generate Qt bindings for other non-Go languages
2024-08-22 09:56:34 +00:00
- Performance
2024-08-17 02:11:41 +00:00
- [ ] Convert generated cpp files to amalgamation build for faster compilation
- https://github.com/golang/go/issues/9887
2024-08-22 09:56:34 +00:00
- [ ] Move some inlined generated code into helper functions to reduce total compile workload / binary size
2024-08-17 02:11:41 +00:00
- [ ] Reduce necessary memory copies around ABI boundaries
- [ ] Bypass malloc/free for zero-length strings
- [ ] Bypass malloc/free for zero-length arrays
2024-08-22 09:56:34 +00:00
- Broader coverage
2024-08-17 02:11:41 +00:00
- [ ] Get 100% of all QtCore, QtGui, QtWidgets binding
- [ ] Generate other Qt libraries e.g. QtSvg
- [ ] Document process for binding more libraries e.g. QScintilla, QZXing
- [ ] Add public QFoo_FromCPointer(uintptr) to ease interop with extra generated classes
2024-08-22 09:56:34 +00:00
- [ ] Template inherited classes e.g. QMatrix3x3 is a QGenericMatrix<>
2024-08-17 02:11:41 +00:00
- [ ] Get down to zero ErrTooComplex skips
2024-08-22 09:56:34 +00:00
- Support other Qt ecosystem tooling
2024-08-17 02:11:41 +00:00
- [ ] Qt Creator integration
- [ ] uic implementation