44 Commits

Author SHA1 Message Date
Miko
5ab28c9361 Merge 33f78dd7a8 into ba81d364cf 2025-06-02 17:03:09 +02:00
Toyosatomimi no Miko
33f78dd7a8 Restore original whitespace line breaks 2025-06-02 11:02:48 -04:00
Toyosatomimi no Miko
f1dfc8f2f8 Include additional information on module organisation 2025-06-02 10:57:45 -04:00
ArthurSonzogni
9577dfc0b3 Fix build errors. 2025-06-02 16:02:04 +02:00
ArthurSonzogni
4898e859d8 Add the .cppm to Doxygen 2025-06-02 10:34:44 +02:00
ArthurSonzogni
6a783ce9b5 Revert examples change + add doc. 2025-06-02 10:28:16 +02:00
ArthurSonzogni
a4a4e20902 Fix workflow incorrect merge conflict resolution 2025-06-02 10:21:48 +02:00
ArthurSonzogni
ce43ba6bea Add documentation 2025-06-02 10:21:16 +02:00
ArthurSonzogni
7abac6c5f9 Add documentation + fix errors. 2025-06-02 10:20:05 +02:00
Miko
cdc6a61854 Merge branch 'ArthurSonzogni:main' into main 2025-06-01 15:52:30 -04:00
Miko
118949b295 Merge branch 'ArthurSonzogni:main' into main 2025-05-31 23:39:14 -04:00
Miko
bc3657d62a Merge branch 'ArthurSonzogni:main' into main 2025-05-31 01:58:06 -04:00
Miko
6e7c0cb212 Add mention of ftxui.util module 2025-05-29 15:03:54 +00:00
Miko
2d12c4b3db Merge branch 'main' into main 2025-05-29 10:59:54 -04:00
Toyosatomimi no Miko
88a9132d75 Missing italic declaration 2025-05-15 15:31:39 -04:00
Toyosatomimi no Miko
83b83e30ec Missing header (number 2) 2025-05-15 15:24:11 -04:00
Toyosatomimi no Miko
bc45cd6ad5 Missing header 2025-05-15 15:19:03 -04:00
Toyosatomimi no Miko
cdf8144bf1 This should fix the problem. Forgot to export these 2025-05-15 15:07:49 -04:00
Toyosatomimi no Miko
ed5f04ccc0 Update examples for testing modules 2025-05-15 14:54:42 -04:00
Miko
4b8c8ea00d Merge branch 'ArthurSonzogni:main' into main 2025-05-11 17:12:31 -04:00
Miko
9e1120c146 Merge branch 'main' into main 2025-05-10 22:01:04 -04:00
Miko
006ec1cbed Merge branch 'ArthurSonzogni:main' into main 2025-05-04 19:27:15 -04:00
Miko
16c25ae441 Merge branch 'main' into main 2025-05-01 17:09:57 -04:00
Miko
05b4bffe3b Merge branch 'main' into main 2025-04-30 14:39:52 -04:00
Toyosatomimi no Miko
ffc6dcd3bf Add ftxui module for all submodules 2025-04-19 09:54:02 -04:00
ArthurSonzogni
f6dceabdc9 tweaks 2025-04-11 15:07:58 +02:00
ArthurSonzogni
cb8ebdeb44 fix workflows 3 2025-04-11 02:03:18 +02:00
ArthurSonzogni
dd37fba100 Fix workflow 2 2025-04-11 01:48:07 +02:00
ArthurSonzogni
4d627c1ffb Fix workflow. 2025-04-11 01:43:23 +02:00
ArthurSonzogni
1dff6a5c35 Compile examples with modules. 2025-04-11 01:39:07 +02:00
ArthurSonzogni
0c67566427 Update 2025-04-10 14:45:45 +02:00
ArthurSonzogni
85c3dc45ca Add Changelog and remove flag. 2025-04-09 12:35:46 +02:00
Miko
84f691e9d3 Merge branch 'ArthurSonzogni:main' into main 2025-04-08 11:45:52 -04:00
Miko
2e36aa061a Merge branch 'ArthurSonzogni:main' into main 2025-03-29 22:17:54 -04:00
Miko
8ed06a4812 Merge branch 'ArthurSonzogni:main' into main 2025-03-29 12:26:56 -04:00
Toyosatomimi no Miko
571f6dcdcf Trailing newline 2025-03-29 12:26:07 -04:00
Toyosatomimi no Miko
e57c275512 Make modules opt-in (for pre-C++20 builds not to break) 2025-03-28 08:28:05 -04:00
Miko
1c37cdd192 Merge branch 'ArthurSonzogni:main' into main 2025-03-28 08:22:58 -04:00
Miko
772d4ebeed Merge branch 'ArthurSonzogni:main' into main 2025-03-27 23:56:08 -04:00
Miko
5f5bc9019d Delete modules/CMakeLists.txt
No longer needed
2025-03-28 03:54:48 +00:00
Miko
f87b6a4d12 Update CMakeLists.txt
Directly go to `modules/ftxui`
2025-03-28 03:54:25 +00:00
Toyosatomimi no Miko
0d50fa25fe I assume the version produced by CMake was supposed to be bumped up to 6.0.0, fixing this 2025-03-25 19:09:35 -04:00
Toyosatomimi no Miko
730ebeed1d Add my own project (using FTXUI modules) for an example 2025-03-25 18:59:58 -04:00
Toyosatomimi no Miko
69928b374e Add modules support 2025-03-25 18:49:18 -04:00
49 changed files with 1243 additions and 54 deletions

View File

@@ -165,3 +165,47 @@ jobs:
flags: ${{ runner.os }} flags: ${{ runner.os }}
name: ${{ runner.os }}-coverage name: ${{ runner.os }}-coverage
files: ./build/coverage.xml files: ./build/coverage.xml
test_modules:
name: "Test modules"
strategy:
matrix:
include:
- os: ubuntu-latest
compiler: llvm
# TODO add gcc / msvc
runs-on: ${{ matrix.os }}
steps:
- name: "Checkout repository"
uses: actions/checkout@v3
- name: "Setup Cpp"
uses: aminya/setup-cpp@v1
with:
compiler: ${{ matrix.compiler }}
vcvarsall: ${{ contains(matrix.os, 'windows' )}}
cmake: true
ninja: true
clangtidy: false
cppcheck: false
opencppcoverage: false
- name: "Generate ./examples_modules"
run: >
./tools/generate_examples_modules.sh
- name: "Build modules"
run: >
mkdir build;
cd build;
cmake ..
-DCMAKE_GENERATOR=Ninja
-DFTXUI_BUILD_MODULES=ON
-DFTXUI_BUILD_EXAMPLES=ON
-DCMAKE_BUILD_TYPE=Debug
-DFTXUI_BUILD_DOCS=OFF
-DFTXUI_BUILD_TESTS=OFF
-DFTXUI_BUILD_TESTS_FUZZER=OFF
-DFTXUI_ENABLE_INSTALL=ON
-DFTXUI_DEV_WARNINGS=ON ;
cmake --build .

2
.gitignore vendored
View File

@@ -62,8 +62,10 @@ out/
!include/ftxui/**/*.cpp !include/ftxui/**/*.cpp
# src directory: # src directory:
!src/ftxui/*.cppm
!src/ftxui/**/*.hpp !src/ftxui/**/*.hpp
!src/ftxui/**/*.cpp !src/ftxui/**/*.cpp
!src/ftxui/**/*.cppm
# tools directory: # tools directory:
!tools/**/*.sh !tools/**/*.sh

View File

@@ -9,6 +9,22 @@ Next
- Use Doxygen awesome. Add our own theme. - Use Doxygen awesome. Add our own theme.
- Break the documentation into several pages. - Break the documentation into several pages.
### Build
- Feature: Support C++20 modules.
This requires:
- Using the Ninja or MSVC generator
- A recent Clang/GCC/MSVC compiler.
- Cmake 3.28 or higher.
Usage:
```cpp
import ftxui;
import ftxui.component;
import ftxui.dom;
import ftxui.screen;
import ftxui.util;
```
Thanks @mikomikotaishi for PR #1015.
6.1.9 (2025-05-07) 6.1.9 (2025-05-07)
------------ ------------

View File

@@ -1,4 +1,19 @@
option(FTXUI_BUILD_DOCS "Set to ON to build docs" OFF)
option(FTXUI_BUILD_EXAMPLES "Set to ON to build examples" OFF)
option(FTXUI_BUILD_MODULES "Build the C++20 modules" OFF)
option(FTXUI_BUILD_TESTS "Set to ON to build tests" OFF)
option(FTXUI_BUILD_TESTS_FUZZER "Set to ON to enable fuzzing" OFF)
option(FTXUI_CLANG_TIDY "Execute clang-tidy" OFF)
option(FTXUI_DEV_WARNINGS "Enable more compiler warnings and warnings as errors" OFF)
option(FTXUI_ENABLE_COVERAGE "Execute code coverage" OFF)
option(FTXUI_ENABLE_INSTALL "Generate the install target" ON)
option(FTXUI_QUIET "Set to ON for FTXUI to be quiet" OFF)
if (FTXUI_BUILD_MODULES)
cmake_minimum_required(VERSION 3.28.2)
else()
cmake_minimum_required(VERSION 3.12) cmake_minimum_required(VERSION 3.12)
endif()
project(ftxui project(ftxui
LANGUAGES CXX LANGUAGES CXX
@@ -6,15 +21,6 @@ project(ftxui
DESCRIPTION "C++ Functional Terminal User Interface." DESCRIPTION "C++ Functional Terminal User Interface."
) )
option(FTXUI_QUIET "Set to ON for FTXUI to be quiet" OFF)
option(FTXUI_BUILD_EXAMPLES "Set to ON to build examples" OFF)
option(FTXUI_BUILD_DOCS "Set to ON to build docs" OFF)
option(FTXUI_BUILD_TESTS "Set to ON to build tests" OFF)
option(FTXUI_BUILD_TESTS_FUZZER "Set to ON to enable fuzzing" OFF)
option(FTXUI_ENABLE_INSTALL "Generate the install target" ON)
option(FTXUI_CLANG_TIDY "Execute clang-tidy" OFF)
option(FTXUI_ENABLE_COVERAGE "Execute code coverage" OFF)
option(FTXUI_DEV_WARNINGS "Enable more compiler warnings and warnings as errors" OFF)
set(FTXUI_MICROSOFT_TERMINAL_FALLBACK_HELP_TEXT "On windows, assume the \ set(FTXUI_MICROSOFT_TERMINAL_FALLBACK_HELP_TEXT "On windows, assume the \
terminal used will be one of Microsoft and use a set of reasonnable fallback \ terminal used will be one of Microsoft and use a set of reasonnable fallback \
@@ -176,6 +182,13 @@ include(cmake/iwyu.cmake)
include(cmake/ftxui_export.cmake) include(cmake/ftxui_export.cmake)
include(cmake/ftxui_install.cmake) include(cmake/ftxui_install.cmake)
include(cmake/ftxui_package.cmake) include(cmake/ftxui_package.cmake)
include(cmake/ftxui_modules.cmake)
add_subdirectory(examples)
add_subdirectory(doc) add_subdirectory(doc)
add_subdirectory(examples)
# You can generate ./examples_modules/ by running
# ./tools/generate_examples_modules.sh
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/examples_modules/CMakeLists.txt")
add_subdirectory(examples_modules)
endif()

View File

@@ -39,7 +39,8 @@ A simple cross-platform C++ library for terminal based user interfaces!
* Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→ 测试) * Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→ 测试)
* Support for animations. [Demo 1](https://arthursonzogni.github.io/FTXUI/examples/?file=component/menu_underline_animated_gallery), [Demo 2](https://arthursonzogni.github.io/FTXUI/examples/?file=component/button_style) * Support for animations. [Demo 1](https://arthursonzogni.github.io/FTXUI/examples/?file=component/menu_underline_animated_gallery), [Demo 2](https://arthursonzogni.github.io/FTXUI/examples/?file=component/button_style)
* Support for drawing. [Demo](https://arthursonzogni.github.io/FTXUI/examples/?file=component/canvas_animated) * Support for drawing. [Demo](https://arthursonzogni.github.io/FTXUI/examples/?file=component/canvas_animated)
* No dependencies * No dependencies.
* [C++20 Module support](https://arthursonzogni.github.io/FTXUI/cpp20-modules.html)
* **Cross platform**: Linux/MacOS (main target), WebAssembly, Windows (Thanks to contributors!). * **Cross platform**: Linux/MacOS (main target), WebAssembly, Windows (Thanks to contributors!).
* Learn by [examples](#documentation), and [tutorials](#documentation) * Learn by [examples](#documentation), and [tutorials](#documentation)
* Multiple packages: * Multiple packages:
@@ -357,6 +358,7 @@ Feel free to add your projects here:
- [terminal-rain](https://github.com/Oakamoore/terminal-rain) - [terminal-rain](https://github.com/Oakamoore/terminal-rain)
- [keywords](https://github.com/Oakamoore/keywords) ([Play web version :heart:](https://oakamoore.itch.io/keywords)) - [keywords](https://github.com/Oakamoore/keywords) ([Play web version :heart:](https://oakamoore.itch.io/keywords))
- [FTB - tertminal file browser](https://github.com/Cyxuan0311/FTB) - [FTB - tertminal file browser](https://github.com/Cyxuan0311/FTB)
- [openJuice](https://github.com/mikomikotaishi/openJuice)
- [SHOOT!](https://github.com/ShingZhanho/ENGG1340-Project-25Spring) - [SHOOT!](https://github.com/ShingZhanho/ENGG1340-Project-25Spring)
### [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_jam) ### [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_jam)
@@ -435,6 +437,8 @@ If you choose to build and link FTXUI yourself, `ftxui-component` must be first
g++ . . . -lftxui-component -lftxui-dom -lftxui-screen . . . g++ . . . -lftxui-component -lftxui-dom -lftxui-screen . . .
``` ```
To build FTXUI with modules, check [documentation](https://arthursonzogni.github.io/FTXUI/cpp20-modules.html)
## Contributors ## Contributors
<a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"> <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors">

View File

@@ -5,13 +5,14 @@ function(ftxui_message msg)
endfunction() endfunction()
ftxui_message("┌─ FTXUI options ─────────────────────") ftxui_message("┌─ FTXUI options ─────────────────────")
ftxui_message("│ FTXUI_ENABLE_INSTALL : ${FTXUI_ENABLE_INSTALL}")
ftxui_message("│ FTXUI_BUILD_EXAMPLES : ${FTXUI_BUILD_EXAMPLES}")
ftxui_message("│ FTXUI_QUIET : ${FTXUI_QUIET}")
ftxui_message("│ FTXUI_BUILD_DOCS : ${FTXUI_BUILD_DOCS}") ftxui_message("│ FTXUI_BUILD_DOCS : ${FTXUI_BUILD_DOCS}")
ftxui_message("│ FTXUI_BUILD_EXAMPLES : ${FTXUI_BUILD_EXAMPLES}")
ftxui_message("│ FTXUI_BUILD_MODULES : ${FTXUI_BUILD_MODULES}")
ftxui_message("│ FTXUI_BUILD_TESTS : ${FTXUI_BUILD_TESTS}") ftxui_message("│ FTXUI_BUILD_TESTS : ${FTXUI_BUILD_TESTS}")
ftxui_message("│ FTXUI_BUILD_TESTS_FUZZER : ${FTXUI_BUILD_TESTS_FUZZER}") ftxui_message("│ FTXUI_BUILD_TESTS_FUZZER : ${FTXUI_BUILD_TESTS_FUZZER}")
ftxui_message("│ FTXUI_ENABLE_COVERAGE : ${FTXUI_ENABLE_COVERAGE}")
ftxui_message("│ FTXUI_DEV_WARNINGS : ${FTXUI_DEV_WARNINGS}")
ftxui_message("│ FTXUI_CLANG_TIDY : ${FTXUI_CLANG_TIDY}") ftxui_message("│ FTXUI_CLANG_TIDY : ${FTXUI_CLANG_TIDY}")
ftxui_message("│ FTXUI_DEV_WARNINGS : ${FTXUI_DEV_WARNINGS}")
ftxui_message("│ FTXUI_ENABLE_COVERAGE : ${FTXUI_ENABLE_COVERAGE}")
ftxui_message("│ FTXUI_ENABLE_INSTALL : ${FTXUI_ENABLE_INSTALL}")
ftxui_message("│ FTXUI_QUIET : ${FTXUI_QUIET}")
ftxui_message("└─────────────────────────────────────") ftxui_message("└─────────────────────────────────────")

81
cmake/ftxui_modules.cmake Normal file
View File

@@ -0,0 +1,81 @@
if (NOT FTXUI_BUILD_MODULES)
return()
endif()
add_library(ftxui-modules)
target_sources(ftxui-modules
PUBLIC FILE_SET CXX_MODULES FILES
src/ftxui/component.cppm
src/ftxui/component/Animation.cppm
src/ftxui/component/CapturedMouse.cppm
src/ftxui/component/Component.cppm
src/ftxui/component/ComponentBase.cppm
src/ftxui/component/ComponentOptions.cppm
src/ftxui/component/Event.cppm
src/ftxui/component/Loop.cppm
src/ftxui/component/Mouse.cppm
src/ftxui/component/Receiver.cppm
src/ftxui/component/ScreenInteractive.cppm
src/ftxui/component/Task.cppm
src/ftxui/dom.cppm
src/ftxui/dom/Canvas.cppm
src/ftxui/dom/Deprecated.cppm
src/ftxui/dom/Direction.cppm
src/ftxui/dom/Elements.cppm
src/ftxui/dom/FlexboxConfig.cppm
src/ftxui/dom/LinearGradient.cppm
src/ftxui/dom/Node.cppm
src/ftxui/dom/Requirement.cppm
src/ftxui/dom/Selection.cppm
src/ftxui/dom/Table.cppm
src/ftxui/screen.cppm
src/ftxui/screen/Box.cppm
src/ftxui/screen/Color.cppm
src/ftxui/screen/ColorInfo.cppm
src/ftxui/screen/Deprecated.cppm
src/ftxui/screen/Image.cppm
src/ftxui/screen/Pixel.cppm
src/ftxui/screen/Screen.cppm
src/ftxui/screen/String.cppm
src/ftxui/screen/Terminal.cppm
src/ftxui/util.cppm
src/ftxui/util/AutoReset.cppm
src/ftxui/util/Ref.cppm
)
target_link_libraries(ftxui-modules
PUBLIC
ftxui::screen
ftxui::dom
ftxui::component
)
target_compile_features(ftxui-modules PUBLIC cxx_std_20)
if (CMAKE_COMPILER_IS_GNUCXX)
target_compile_options(ftxui-modules PUBLIC -fmodules-ts)
endif ()
add_library(ftxui::modules ALIAS ftxui-modules)
if(FTXUI_ENABLE_INSTALL)
include(GNUInstallDirs)
install(TARGETS ftxui-modules
EXPORT ftxui-targets
FILE_SET CXX_MODULES
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ftxui
FILE_SET HEADERS
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ftxui
INCLUDES
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ftxui
)
install(EXPORT ftxui-targets
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ftxui
CXX_MODULES_DIRECTORY ${CMAKE_INSTALL_LIBDIR}/cmake/ftxui
)
install(FILES my_package-config.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ftxui
)
endif()

View File

@@ -1001,48 +1001,12 @@ INPUT_FILE_ENCODING =
FILE_PATTERNS = *.c \ FILE_PATTERNS = *.c \
*.cc \ *.cc \
*.cxx \
*.cpp \ *.cpp \
*.c++ \
*.java \
*.ii \
*.ixx \
*.ipp \ *.ipp \
*.i++ \
*.inl \
*.idl \
*.ddl \
*.odl \
*.h \ *.h \
*.hh \
*.hxx \
*.hpp \ *.hpp \
*.h++ \
*.cs \
*.d \
*.php \
*.php4 \
*.php5 \
*.phtml \
*.inc \
*.m \
*.markdown \
*.md \ *.md \
*.mm \ *.cppm \
*.dox \
*.py \
*.pyw \
*.f90 \
*.f95 \
*.f03 \
*.f08 \
*.f \
*.for \
*.tcl \
*.vhd \
*.vhdl \
*.ucf \
*.qsf
# The RECURSIVE tag can be used to specify whether or not subdirectories should # The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well. # be searched for input files as well.

92
doc/cpp-modules.md Normal file
View File

@@ -0,0 +1,92 @@
@page cpp20-modules C++20 Modules
> [!WARNING]
> This feature is still in development, and the API may change in future releases.
> Your contribution is needed to help us improve the compatibility and usability
> of C++20 modules in FTXUI. If you encounter any issues or have suggestions,
> please open an issue.
FTXUI provides an experimental support for [C++20
modules](https://en.cppreference.com/w/cpp/language/modules) to improve
compilation times and code organization. The existing API has a module
corresponding to each header.
**Example with CMake and Ninja**
```cpp
import ftxui;
int main() {
auto screen = ftxui::ScreenInteractive::TerminalOutput();
auto button = ftxui::Button("Click me", screen.QuitClosure());
screen.Loop(button);
return 0;
}
```
```sh
cmake \
-DCMAKE_GENERATOR=Ninja \
-DFTXUI_BUILD_MODULES=ON \
..
ninja
```
> [!NOTE]
> To use modules, you need a C++20 compatible compiler, CMake version 3.20 or
> higher, and use a compatible generator like Ninja. Note that Makefile
> generators **do not support modules**.
### Module list
The modules directly reference the corresponding header, or a group of related
headers to provide a more convenient interface. The following modules
are available:
- `ftxui`
- `ftxui.component`
- `ftxui.component.Animation`
- `ftxui.component.CapturedMouse`
- `ftxui.component.Component`
- `ftxui.component.ComponentBase`
- `ftxui.component.ComponentOptions`
- `ftxui.component.Event`
- `ftxui.component.Loop`
- `ftxui.component.Mouse`
- `ftxui.component.Receiver`
- `ftxui.component.ScreenInteractive`
- `ftxui.component.Task`
- `ftxui.dom`
- `ftxui.dom.Canvas`
- `ftxui.dom.Deprecated`
- `ftxui.dom.Direction`
- `ftxui.dom.Elements`
- `ftxui.dom.FlexboxConfig`
- `ftxui.dom.LinearGradient`
- `ftxui.dom.Node`
- `ftxui.dom.Requirement`
- `ftxui.dom.Selection`
- `ftxui.dom.Table`
- `ftxui.screen`
- `ftxui.screen.Box`
- `ftxui.screen.Color`
- `ftxui.screen.ColorInfo`
- `ftxui.screen.Deprecated`
- `ftxui.screen.Image`
- `ftxui.screen.Pixel`
- `ftxui.screen.Screen`
- `ftxui.screen.String`
- `ftxui.screen.Terminal`
- `ftxui.util`
- `ftxui.util.AutoReset`
- `ftxui.util.Ref`
> ![NOTE]
> The module `ftxui` transitively imports all `ftxui.*` modules and thus
> has a dependency on those modules.
> ![NOTE] The list can be generated with the following command:
> ```sh
> git grep "export module" | cut -d: -f2 | cut -d\ -f3
> ```

View File

@@ -3,6 +3,7 @@
// the LICENSE file. // the LICENSE file.
#include <ftxui/component/component.hpp> #include <ftxui/component/component.hpp>
#include <ftxui/component/screen_interactive.hpp> #include <ftxui/component/screen_interactive.hpp>
#include <string>
using namespace ftxui; using namespace ftxui;

View File

@@ -3,6 +3,7 @@
// the LICENSE file. // the LICENSE file.
#include <ftxui/component/component.hpp> #include <ftxui/component/component.hpp>
#include <ftxui/component/screen_interactive.hpp> #include <ftxui/component/screen_interactive.hpp>
#include <string>
using namespace ftxui; using namespace ftxui;

18
src/ftxui/component.cppm Normal file
View File

@@ -0,0 +1,18 @@
/**
* @file component.cppm
* @brief Module file for FTXUI component operations.
*/
export module ftxui.component;
export import ftxui.component.Animation;
export import ftxui.component.CapturedMouse;
export import ftxui.component.Component;
export import ftxui.component.ComponentBase;
export import ftxui.component.ComponentOptions;
export import ftxui.component.Event;
export import ftxui.component.Loop;
export import ftxui.component.Mouse;
export import ftxui.component.Receiver;
export import ftxui.component.ScreenInteractive;
export import ftxui.component.Task;

View File

@@ -0,0 +1,66 @@
/**
* @file Animation.cppm
* @brief Module file for the Animation namespace of the Component module
*/
module;
#include <ftxui/component/animation.hpp>
export module ftxui.component.Animation;
/**
* @namespace ftxui::animation
* @brief The FTXUI ftxui::animation:: namespace
*/
export namespace ftxui::animation {
using ftxui::animation::RequestAnimationFrame;
using ftxui::animation::Clock;
using ftxui::animation::TimePoint;
using ftxui::animation::Duration;
using ftxui::animation::Params;
/**
* @namespace easing
* @brief The FTXUI sf::animation::easing:: namespace
*/
namespace easing {
using ftxui::animation::easing::Function;
using ftxui::animation::easing::Linear;
using ftxui::animation::easing::QuadraticIn;
using ftxui::animation::easing::QuadraticOut;
using ftxui::animation::easing::QuadraticInOut;
using ftxui::animation::easing::CubicIn;
using ftxui::animation::easing::CubicOut;
using ftxui::animation::easing::CubicInOut;
using ftxui::animation::easing::QuarticIn;
using ftxui::animation::easing::QuarticOut;
using ftxui::animation::easing::QuarticInOut;
using ftxui::animation::easing::QuinticIn;
using ftxui::animation::easing::QuinticOut;
using ftxui::animation::easing::QuinticInOut;
using ftxui::animation::easing::SineIn;
using ftxui::animation::easing::SineOut;
using ftxui::animation::easing::SineInOut;
using ftxui::animation::easing::CircularIn;
using ftxui::animation::easing::CircularOut;
using ftxui::animation::easing::CircularInOut;
using ftxui::animation::easing::ExponentialIn;
using ftxui::animation::easing::ExponentialOut;
using ftxui::animation::easing::ExponentialInOut;
using ftxui::animation::easing::ElasticIn;
using ftxui::animation::easing::ElasticOut;
using ftxui::animation::easing::ElasticInOut;
using ftxui::animation::easing::BackIn;
using ftxui::animation::easing::BackOut;
using ftxui::animation::easing::BackInOut;
using ftxui::animation::easing::BounceIn;
using ftxui::animation::easing::BounceOut;
using ftxui::animation::easing::BounceInOut;
}
using ftxui::animation::Animator;
}

View File

@@ -0,0 +1,18 @@
/**
* @file CapturedMouse.cppm
* @brief Module file for the CapturedMouseInterface class of the Component module
*/
module;
#include <ftxui/component/captured_mouse.hpp>
export module ftxui.component.CapturedMouse;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::CapturedMouseInterface;
}

View File

@@ -0,0 +1,61 @@
/**
* @file Component.cppm
* @brief Module file for the Component classes of the Component module
*/
module;
#include <ftxui/component/component.hpp>
export module ftxui.component.Component;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::ButtonOption;
using ftxui::CheckboxOption;
using ftxui::Event;
using ftxui::InputOption;
using ftxui::MenuOption;
using ftxui::RadioboxOption;
using ftxui::MenuEntryOption;
using ftxui::Make;
using ftxui::ComponentDecorator;
using ftxui::ElementDecorator;
using ftxui::operator|;
using ftxui::operator|=;
namespace Container {
using ftxui::Container::Vertical;
using ftxui::Container::Horizontal;
using ftxui::Container::Tab;
using ftxui::Container::Stacked;
}
using ftxui::Button;
using ftxui::Checkbox;
using ftxui::Input;
using ftxui::Menu;
using ftxui::MenuEntry;
using ftxui::Radiobox;
using ftxui::Dropdown;
using ftxui::Toggle;
using ftxui::Slider;
using ftxui::ResizableSplit;
using ftxui::ResizableSplitLeft;
using ftxui::ResizableSplitRight;
using ftxui::ResizableSplitTop;
using ftxui::ResizableSplitBottom;
using ftxui::Renderer;
using ftxui::CatchEvent;
using ftxui::Maybe;
using ftxui::Modal;
using ftxui::Collapsible;
using ftxui::Hoverable;
using ftxui::Window;
}

View File

@@ -0,0 +1,28 @@
/**
* @file ComponentBase.cppm
* @brief Module file for the ComponentBase class of the Component module
*/
module;
#include <ftxui/component/component_base.hpp>
export module ftxui.component.ComponentBase;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Delegate;
using ftxui::Focus;
using ftxui::Event;
namespace animation {
using ftxui::animation::Params;
}
using ftxui::ComponentBase;
using ftxui::Component;
using ftxui::Components;
}

View File

@@ -0,0 +1,33 @@
/**
* @file ComponentOptions.cppm
* @brief Module file for options for the Component class of the Component module
*/
module;
#include <ftxui/component/component_options.hpp>
export module ftxui.component.ComponentOptions;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::EntryState;
using ftxui::UnderlineOption;
using ftxui::AnimatedColorOption;
using ftxui::AnimatedColorsOption;
using ftxui::MenuEntryOption;
using ftxui::MenuOption;
using ftxui::ButtonOption;
using ftxui::CheckboxOption;
using ftxui::InputState;
using ftxui::InputOption;
using ftxui::RadioboxOption;
using ftxui::ResizableSplitOption;
using ftxui::SliderOption;
using ftxui::WindowRenderState;
using ftxui::WindowOptions;
using ftxui::DropdownOption;
}

View File

@@ -0,0 +1,21 @@
/**
* @file Event.cppm
* @brief Module file for the Event struct of the Component module
*/
module;
#include <ftxui/component/event.hpp>
export module ftxui.component.Event;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::ScreenInteractive;
using ftxui::ComponentBase;
using ftxui::Event;
}

View File

@@ -0,0 +1,22 @@
/**
* @file Loop.cppm
* @brief Module file for the Loop class of the Component module
*/
module;
#include <ftxui/component/loop.hpp>
export module ftxui.component.Loop;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::ComponentBase;
using ftxui::Component;
using ftxui::ScreenInteractive;
using ftxui::Loop;
}

View File

@@ -0,0 +1,18 @@
/**
* @file Mouse.cppm
* @brief Module file for the Mouse struct of the Component module
*/
module;
#include <ftxui/component/mouse.hpp>
export module ftxui.component.Mouse;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Mouse;
}

View File

@@ -0,0 +1,22 @@
/**
* @file Receiver.cppm
* @brief Module file for the Receiver class of the Component module
*/
module;
#include <ftxui/component/receiver.hpp>
export module ftxui.component.Receiver;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::SenderImpl;
using ftxui::ReceiverImpl;
using ftxui::Sender;
using ftxui::Receiver;
using ftxui::MakeReceiver;
}

View File

@@ -0,0 +1,25 @@
/**
* @file ScreenInteractive.cppm
* @brief Module file for the ScreenInteractive class of the Component module
*/
module;
#include <ftxui/component/screen_interactive.hpp>
export module ftxui.component.ScreenInteractive;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::ComponentBase;
using ftxui::Loop;
using ftxui::Event;
using ftxui::Component;
using ftxui::Screen;
using ftxui::ScreenInteractivePrivate;
using ftxui::ScreenInteractive;
}

View File

@@ -0,0 +1,20 @@
/**
* @file Task.cppm
* @brief Module file for the Task class of the Component module
*/
module;
#include <ftxui/component/task.hpp>
export module ftxui.component.Task;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::AnimationTask;
using ftxui::Closure;
using ftxui::Task;
}

17
src/ftxui/dom.cppm Normal file
View File

@@ -0,0 +1,17 @@
/**
* @file dom.cppm
* @brief Module file for FTXUI main operations.
*/
export module ftxui.dom;
export import ftxui.dom.Canvas;
export import ftxui.dom.Deprecated;
export import ftxui.dom.Direction;
export import ftxui.dom.Elements;
export import ftxui.dom.FlexboxConfig;
export import ftxui.dom.LinearGradient;
export import ftxui.dom.Node;
export import ftxui.dom.Requirement;
export import ftxui.dom.Selection;
export import ftxui.dom.Table;

18
src/ftxui/dom/Canvas.cppm Normal file
View File

@@ -0,0 +1,18 @@
/**
* @file Canvas.cppm
* @brief Module file for the Canvas struct of the Dom module
*/
module;
#include <ftxui/dom/canvas.hpp>
export module ftxui.dom.Canvas;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Canvas;
}

View File

@@ -0,0 +1,20 @@
/**
* @file Deprecated.cppm
* @brief Module file for deprecated parts of the Dom module
*/
module;
#include <ftxui/dom/deprecated.hpp>
export module ftxui.dom.Deprecated;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::text;
using ftxui::vtext;
using ftxui::paragraph;
}

View File

@@ -0,0 +1,18 @@
/**
* @file Direction.cppm
* @brief Module file for the Direction enum of the Dom module
*/
module;
#include <ftxui/dom/direction.hpp>
export module ftxui.dom.Direction;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Direction;
}

137
src/ftxui/dom/Elements.cppm Normal file
View File

@@ -0,0 +1,137 @@
/**
* @file Canvas.cppm
* @brief Module file for the Element classes and functions of the Dom module
*/
module;
#include <ftxui/dom/elements.hpp>
export module ftxui.dom.Elements;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Node;
using ftxui::Element;
using ftxui::Elements;
using ftxui::Decorator;
using ftxui::GraphFunction;
using ftxui::BorderStyle;
using ftxui::operator|;
using ftxui::operator|=;
using ftxui::text;
using ftxui::vtext;
using ftxui::separator;
using ftxui::separatorLight;
using ftxui::separatorDashed;
using ftxui::separatorHeavy;
using ftxui::separatorDouble;
using ftxui::separatorEmpty;
using ftxui::separatorStyled;
using ftxui::separatorCharacter;
using ftxui::separatorHSelector;
using ftxui::separatorVSelector;
using ftxui::gauge;
using ftxui::gaugeLeft;
using ftxui::gaugeRight;
using ftxui::gaugeUp;
using ftxui::gaugeDown;
using ftxui::gaugeDirection;
using ftxui::border;
using ftxui::borderLight;
using ftxui::borderDashed;
using ftxui::borderHeavy;
using ftxui::borderDouble;
using ftxui::borderRounded;
using ftxui::borderEmpty;
using ftxui::borderStyled;
using ftxui::borderWith;
using ftxui::window;
using ftxui::spinner;
using ftxui::paragraph;
using ftxui::paragraphAlignLeft;
using ftxui::paragraphAlignRight;
using ftxui::paragraphAlignCenter;
using ftxui::paragraphAlignJustify;
using ftxui::graph;
using ftxui::emptyElement;
using ftxui::canvas;
using ftxui::bold;
using ftxui::dim;
using ftxui::italic;
using ftxui::inverted;
using ftxui::underlined;
using ftxui::underlinedDouble;
using ftxui::blink;
using ftxui::strikethrough;
using ftxui::color;
using ftxui::bgcolor;
using ftxui::focusPosition;
using ftxui::focusPositionRelative;
using ftxui::automerge;
using ftxui::hyperlink;
using ftxui::selectionStyleReset;
using ftxui::selectionColor;
using ftxui::selectionBackgroundColor;
using ftxui::selectionForegroundColor;
using ftxui::selectionStyle;
using ftxui::hbox;
using ftxui::vbox;
using ftxui::dbox;
using ftxui::flexbox;
using ftxui::gridbox;
using ftxui::hflow;
using ftxui::vflow;
using ftxui::flex;
using ftxui::flex_grow;
using ftxui::flex_shrink;
using ftxui::xflex;
using ftxui::xflex_grow;
using ftxui::xflex_shrink;
using ftxui::yflex;
using ftxui::yflex_grow;
using ftxui::yflex_shrink;
using ftxui::notflex;
using ftxui::filler;
using ftxui::WidthOrHeight;
using ftxui::Constraint;
using ftxui::size;
using ftxui::frame;
using ftxui::xframe;
using ftxui::yframe;
using ftxui::focus;
using ftxui::select;
using ftxui::focusCursorBlock;
using ftxui::focusCursorBlockBlinking;
using ftxui::focusCursorBar;
using ftxui::focusCursorBarBlinking;
using ftxui::focusCursorUnderline;
using ftxui::focusCursorUnderlineBlinking;
using ftxui::vscroll_indicator;
using ftxui::hscroll_indicator;
using ftxui::reflect;
using ftxui::clear_under;
using ftxui::hcenter;
using ftxui::vcenter;
using ftxui::center;
using ftxui::align_right;
using ftxui::nothing;
namespace Dimension {
using ftxui::Dimension::Fit;
}
}

View File

@@ -0,0 +1,18 @@
/**
* @file FlexboxConfig.cppm
* @brief Module file for the FlexboxConfig struct of the Dom module
*/
module;
#include <ftxui/dom/flexbox_config.hpp>
export module ftxui.dom.FlexboxConfig;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::FlexboxConfig;
}

View File

@@ -0,0 +1,18 @@
/**
* @file LinearGradient.cppm
* @brief Module file for the LinearGradient struct of the Dom module
*/
module;
#include <ftxui/dom/linear_gradient.hpp>
export module ftxui.dom.LinearGradient;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::LinearGradient;
}

25
src/ftxui/dom/Node.cppm Normal file
View File

@@ -0,0 +1,25 @@
/**
* @file Node.cppm
* @brief Module file for the Node class of the Dom module
*/
module;
#include <ftxui/dom/node.hpp>
export module ftxui.dom.Node;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Node;
using ftxui::Screen;
using ftxui::Element;
using ftxui::Elements;
using ftxui::Render;
using ftxui::GetNodeSelectedContent;
}

View File

@@ -0,0 +1,18 @@
/**
* @file Requirement.cppm
* @brief Module file for the Requirement struct of the Dom module
*/
module;
#include <ftxui/dom/requirement.hpp>
export module ftxui.dom.Requirement;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Requirement;
}

View File

@@ -0,0 +1,18 @@
/**
* @file Selection.cppm
* @brief Module file for the Selection class of the Dom module
*/
module;
#include <ftxui/dom/selection.hpp>
export module ftxui.dom.Selection;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Selection;
}

19
src/ftxui/dom/Table.cppm Normal file
View File

@@ -0,0 +1,19 @@
/**
* @file Table.cppm
* @brief Module file for the Table class of the Dom module
*/
module;
#include <ftxui/dom/table.hpp>
export module ftxui.dom.Table;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Table;
using ftxui::TableSelection;
}

11
src/ftxui/ftxui.cppm Normal file
View File

@@ -0,0 +1,11 @@
/**
* @file ftxui.cppm
* @brief Module file re-exporting all FTXUI submodules.
*/
export module ftxui;
export import ftxui.component;
export import ftxui.dom;
export import ftxui.screen;
export import ftxui.util;

16
src/ftxui/screen.cppm Normal file
View File

@@ -0,0 +1,16 @@
/**
* @file screen.cppm
* @brief Module file for FTXUI screen operations.
*/
export module ftxui.screen;
export import ftxui.screen.Box;
export import ftxui.screen.Color;
export import ftxui.screen.ColorInfo;
export import ftxui.screen.Deprecated;
export import ftxui.screen.Image;
export import ftxui.screen.Pixel;
export import ftxui.screen.Screen;
export import ftxui.screen.String;
export import ftxui.screen.Terminal;

18
src/ftxui/screen/Box.cppm Normal file
View File

@@ -0,0 +1,18 @@
/**
* @file Box.cppm
* @brief Module file for the Box struct of the Screen module
*/
module;
#include <ftxui/screen/box.hpp>
export module ftxui.screen.Box;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Box;
}

View File

@@ -0,0 +1,22 @@
/**
* @file Color.cppm
* @brief Module file for the Color class of the Screen module
*/
module;
#include <ftxui/screen/color.hpp>
export module ftxui.screen.Color;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Color;
inline namespace literals {
using ftxui::literals::operator""_rgb;
}
}

View File

@@ -0,0 +1,20 @@
/**
* @file ColorInfo.cppm
* @brief Module file for the ColorInfo struct of the Screen module
*/
module;
#include <ftxui/screen/color_info.hpp>
export module ftxui.screen.ColorInfo;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::ColorInfo;
using ftxui::GetColorInfo;
}

View File

@@ -0,0 +1,19 @@
/**
* @file Box.cppm
* @brief Module file for the deprecated parts of the Screen module
*/
module;
#include <ftxui/screen/deprecated.hpp>
export module ftxui.screen.Deprecated;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::wchar_width;
using ftxui::wstring_width;
}

View File

@@ -0,0 +1,18 @@
/**
* @file Image.cppm
* @brief Module file for the Image class of the Screen module
*/
module;
#include <ftxui/screen/image.hpp>
export module ftxui.screen.Image;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Image;
}

View File

@@ -0,0 +1,18 @@
/**
* @file Pixel.cppm
* @brief Module file for the Pixel struct of the Screen module
*/
module;
#include <ftxui/screen/pixel.hpp>
export module ftxui.screen.Pixel;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Pixel;
}

View File

@@ -0,0 +1,24 @@
/**
* @file Screen.cppm
* @brief Module file for the Screen class of the Screen module
*/
module;
#include <ftxui/screen/screen.hpp>
export module ftxui.screen.Screen;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
namespace Dimension {
using ftxui::Dimension::Fixed;
using ftxui::Dimension::Full;
}
using ftxui::Image;
using ftxui::Screen;
}

View File

@@ -0,0 +1,22 @@
/**
* @file String.cppm
* @brief Module file for string functions of the Screen module
*/
module;
#include <ftxui/screen/string.hpp>
export module ftxui.screen.String;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::to_string;
using ftxui::to_wstring;
using ftxui::string_width;
using ftxui::Utf8ToGlyphs;
using ftxui::CellToGlyphIndex;
}

View File

@@ -0,0 +1,26 @@
/**
* @file Terminal.cppm
* @brief Module file for the Terminal namespace of the Screen module
*/
module;
#include <ftxui/screen/terminal.hpp>
export module ftxui.screen.Terminal;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::Dimensions;
namespace Terminal {
using ftxui::Terminal::Size;
using ftxui::Terminal::SetFallbackSize;
using ftxui::Terminal::Color;
using ftxui::Terminal::ColorSupport;
using ftxui::Terminal::SetColorSupport;
}
}

9
src/ftxui/util.cppm Normal file
View File

@@ -0,0 +1,9 @@
/**
* @file util.cppm
* @brief Module file for FTXUI utility operations.
*/
export module ftxui.util;
export import ftxui.util.AutoReset;
export import ftxui.util.Ref;

View File

@@ -0,0 +1,18 @@
/**
* @file AutoReset.cppm
* @brief Module file for the AutoReset class of the Util module
*/
module;
#include <ftxui/util/autoreset.hpp>
export module ftxui.util.AutoReset;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::AutoReset;
}

22
src/ftxui/util/Ref.cppm Normal file
View File

@@ -0,0 +1,22 @@
/**
* @file Ref.cppm
* @brief Module file for the Ref classes of the Util module
*/
module;
#include <ftxui/util/ref.hpp>
export module ftxui.util.Ref;
/**
* @namespace ftxui
* @brief The FTXUI ftxui:: namespace
*/
export namespace ftxui {
using ftxui::ConstRef;
using ftxui::Ref;
using ftxui::StringRef;
using ftxui::ConstStringRef;
using ftxui::ConstStringListRef;
}

View File

@@ -0,0 +1,29 @@
#!/bin/bash
# Generate ./examples_modules from ./examples to using C++20 modules instead of
# #includes for ftxui.
# This is useful for testing ftxui with modules. This ensures we don't forget
# to update the FTXUI modules when adding new features to FTXUI.
echo "Generating ./examples_modules"
rm -rf ./examples_modules
cp -r ./examples ./examples_modules
for file in ./examples_modules/**/*.cpp; do
echo "Generating $file"
sed -i '/#include "ftxui/d' "$file"
sed -i '/#include <ftxui/d' "$file"
sed -i '1i\import ftxui.component;' "$file"
sed -i '2i\import ftxui.dom;' "$file"
sed -i '3i\import ftxui.screen;' "$file"
sed -i '4i\import ftxui.util;' "$file"
sed -i '5i\\' "$file"
done
# Modify the CMakeLists.txt file to link against ftxui-modules
sed -i 's/${DIRECTORY_LIB}/ftxui-modules/g' ./examples_modules/CMakeLists.txt
sed -i 's/ftxui_example_/ftxui_modules_example_/g' ./examples_modules/CMakeLists.txt