Update details in the roadmap.

This commit is contained in:
Russell Keith-Magee 2024-03-24 08:46:56 +08:00
parent fe9cac581a
commit 860bf80fe2
No known key found for this signature in database
GPG key ID: 3D2DAB6A37BB5BC3

View file

@ -20,35 +20,67 @@ Input
Inputs are mechanisms for displaying and editing input provided by the user.
* ``ComboBox`` - A free entry text field that provides options (e.g., text with past choices)
Partially implemented widgets
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Cocoa: ``NSComboBox``
- GTK: ``Gtk.ComboBox.new_with_model_and_entry``
- iOS: ?
- Winforms: ``ComboBox``
- Android: ``Spinner``
* ``Table``
Mobile platforms don't provide a native "Table" widget; however, table-like
data could be rendered by using a :class:`~toga.DetailedList`, where the
title and subtitle are the "important" columns selected by the user, and
selecting a row on the table navigates to a sub-page showing the full row
detail.
* ``Tree``
As with Table, mobile platforms don't provide a native "Tree" widget; however,
we could use a similar approach to Table.
On Windows, the native widget doesn't provide support for more than one column. This
means we either need to make a special case on Windows for a "simple" tree; or we need
to form a composite widget that pairs the scrolling of a table with a tree.
* ``DateTimeInput`` - A widget for selecting a date and a time.
- Cocoa: ``NSDatePicker``
- GTK: `Gtk.Calendar` + ?
- iOS: ``UIDatePicker``
- Cocoa: ``NSDatePicker``
- GTK: `Gtk.Calendar` + ?
- iOS: ``UIDatePicker``
New widgets
^^^^^^^^^^^
* ``RadioButton`` - a set of mutually exclusive options.
Functionally, the use case of "select one from a list of options" can be met with a
:class:`~toga.Selection`; however, from a UI design perspective, a radio button is a
common design pattern.
See `this issue <https://github.com/beeware/toga/issues/2225>`__ for discussion of how
this widget may be implemented in a way that compliments existing widgets.
* ``ComboBox`` - A free entry text field that provides options (e.g., text with past choices)
- Cocoa: ``NSComboBox``
- GTK: ``Gtk.ComboBox.new_with_model_and_entry``
- iOS: ?
- Winforms: ``ComboBox``
- Android: ``Spinner``
* ``ColorInput`` - A widget for selecting a color
- Cocoa: ``NSColorWell``
- GTK: ``Gtk.ColorButton`` or ``Gtk.ColorSelection``
- iOS: ?
- Winforms: ?
- Android: ?
- Cocoa: ``NSColorWell``
- GTK: ``Gtk.ColorButton`` or ``Gtk.ColorSelection``
- iOS: ?
- Winforms: ?
- Android: ?
* ``SearchInput`` - A variant of ``TextField`` that is decorated as a search box.
- Cocoa: ``NSSearchField``
- GTK: ``Gtk.Entry``
- iOS: ``UISearchBar``?
- Winforms: ?
- Android: ?
- Cocoa: ``NSSearchField``
- GTK: ``Gtk.Entry``
- iOS: ``UISearchBar``?
- Winforms: ?
- Android: ?
Views
~~~~~
@ -58,19 +90,19 @@ usually in a read-only manner.
* ``VideoView`` - Display a video
- Cocoa: ``AVPlayerView``
- GTK: Custom integration with ``GStreamer``
- iOS: ``MPMoviePlayerController``
- Winforms: ?
- Android: ?
- Cocoa: ``AVPlayerView``
- GTK: Custom integration with ``GStreamer``
- iOS: ``MPMoviePlayerController``
- Winforms: ?
- Android: ?
* ``PDFView`` - Display a PDF document
- Cocoa: ``PDFView``
- GTK: ?
- iOS: Integration with QuickLook?
- Winforms: ?
- Android: ?
- Cocoa: ``PDFView``
- GTK: ?
- iOS: Integration with QuickLook?
- Winforms: ?
- Android: ?
Container widgets
~~~~~~~~~~~~~~~~~
@ -79,42 +111,55 @@ Containers are widgets that can contain other widgets.
* ``FormContainer`` - A layout for a "key/value" or "label/widget" form
- Cocoa: ``NSForm``, or ``NSView`` with pre-set constraints.
- GTK:
- iOS:
- Winforms: ?
- Android: ?
- Cocoa: ``NSForm``, or ``NSView`` with pre-set constraints.
- GTK:
- iOS:
- Winforms: ?
- Android: ?
* ``NavigationContainer`` - A container view that holds a navigable tree of sub-views
Essentially a view that has a "back" button to return to the previous view
in a hierarchy. Example of use: Top level navigation in the macOS System
Preferences panel.
Essentially a view that has a "back" button to return to the previous view
in a hierarchy. Example of use: Top level navigation in the macOS System
Preferences panel.
- Cocoa: No native control
- GTK: No native control; ``Gtk.HeaderBar`` in 3.10+
- iOS: ``UINavigationBar`` + ``NavigationController``
- Winforms: ?
- Android: ?
- Cocoa: No native control
- GTK: No native control; ``Gtk.HeaderBar`` in 3.10+
- iOS: ``UINavigationBar`` + ``NavigationController``
- Winforms: ?
- Android: ?
Miscellaneous
~~~~~~~~~~~~~
Other capabilities
------------------
One of the aims of Toga is to provide a rich, feature-driven approach to
app development. This requires the development of APIs to support rich
features.
* Preferences - Support for saving app preferences, and visualizing them in a
* **Preferences** - Support for saving app preferences, and visualizing them in a
platform native way.
* Notification when updates are available
* **Notification** - A mechanism to display popup "toast"-style notifications
* Easy Licensing/registration of apps - Monetization is not a bad thing, and
shouldn't be mutually exclusive with open source.
* **System tray icons** - Presenting an icon and/or menu in the platform's system tray -
possibly without having a main app window at all.
* **Licensing/registration** - Monetization is not a bad thing, and shouldn't be
mutually exclusive with open source.
* **Audio** - The ability to play sound files, either once off, or on a loop.
* **Cloud data access** - Traditional apps store all their files locally; however,
using cloud services or network resources is increasingly common, especially in
mobile apps. However, accessing cloud-based files can be very complicated; Toga
is in a position to provide a file-like API that abstracts accessing these APIs.
* **QR code scanning** - The ability to scan QR codes and bar codes in an app, and
return the encoded data.
Platforms
---------
Toga currently has good support for Cocoa on macOS, GTK on Linux, Winforms on
Windows, iOS and Android. Proof-of-concept support exists for single page web
apps and consoles. Support for a more modern Windows API would be desirable.
Toga currently has good support for Cocoa on macOS, GTK on Linux, Winforms on Windows,
iOS and Android. Proof-of-concept support exists for single page web apps and consoles.
Support for a more modern Windows API would be desirable, as would support for Qt.