Files
FTXUI/en/v2.0.0/examples_2component_2homescreen_8cpp-example.html
2025-12-13 19:38:34 +00:00

714 lines
52 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- HTML header for doxygen 1.8.14-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="cache-control" content="max-age=86400"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FTXUI: examples/component/homescreen.cpp</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen_extra.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">FTXUI
&#160;<span id="projectnumber">2.0.0</span>
</div>
<div id="projectbrief">C++ functional terminal UI.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('examples_2component_2homescreen_8cpp-example.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">examples/component/homescreen.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="preprocessor">#include &lt;stddef.h&gt;</span> <span class="comment">// for size_t</span></div>
<div class="line"><span class="preprocessor">#include &lt;array&gt;</span> <span class="comment">// for array</span></div>
<div class="line"><span class="preprocessor">#include &lt;chrono&gt;</span> <span class="comment">// for operator&quot;&quot;s, chrono_literals</span></div>
<div class="line"><span class="preprocessor">#include &lt;cmath&gt;</span> <span class="comment">// for sin</span></div>
<div class="line"><span class="preprocessor">#include &lt;functional&gt;</span> <span class="comment">// for ref, reference_wrapper, function</span></div>
<div class="line"><span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// for allocator, shared_ptr, __shared_ptr_access</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span> <span class="comment">// for string, basic_string, operator+, to_string, char_traits</span></div>
<div class="line"><span class="preprocessor">#include &lt;thread&gt;</span> <span class="comment">// for sleep_for, thread</span></div>
<div class="line"><span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// for move</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span> <span class="comment">// for vector</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="captured__mouse_8hpp.html">ftxui/component/captured_mouse.hpp</a>&quot;</span> <span class="comment">// for ftxui</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="component_8hpp.html">ftxui/component/component.hpp</a>&quot;</span> <span class="comment">// for Checkbox, Renderer, Horizontal, Vertical, Input, Menu, Radiobox, ResizableSplitLeft, Tab, Toggle</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="component__base_8hpp.html">ftxui/component/component_base.hpp</a>&quot;</span> <span class="comment">// for ComponentBase</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="component__options_8hpp.html">ftxui/component/component_options.hpp</a>&quot;</span> <span class="comment">// for InputOption</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="event_8hpp.html">ftxui/component/event.hpp</a>&quot;</span> <span class="comment">// for Event, Event::Custom</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="screen__interactive_8hpp.html">ftxui/component/screen_interactive.hpp</a>&quot;</span> <span class="comment">// for Component, ScreenInteractive</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="elements_8hpp.html">ftxui/dom/elements.hpp</a>&quot;</span> <span class="comment">// for text, operator|, color, bgcolor, filler, Element, size, vbox, flex, hbox, separator, graph, EQUAL, paragraph, hcenter, WIDTH, bold, window, border, vscroll_indicator, Elements, HEIGHT, hflow, frame, flex_grow, flexbox, gauge, paragraphAlignCenter, paragraphAlignJustify, paragraphAlignLeft, paragraphAlignRight, dim, spinner, Decorator, LESS_THAN, center, yflex, GREATER_THAN</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="color_8hpp.html">ftxui/screen/color.hpp</a>&quot;</span> <span class="comment">// for Color, Color::Blue, Color::BlueLight, Color::RedLight, Color::Black, Color::Cyan, Color::CyanLight, Color::GrayDark, Color::GrayLight, Color::Green, Color::GreenLight, Color::Magenta, Color::MagentaLight, Color::Red, Color::White, Color::Yellow, Color::YellowLight, Color::Default</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="terminal_8hpp.html">ftxui/screen/terminal.hpp</a>&quot;</span> <span class="comment">// for Size, Dimensions</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">using namespace </span><a class="code hl_namespace" href="namespaceftxui.html">ftxui</a>;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keyword">const</span> <span class="keywordtype">char</span>* argv[]) {</div>
<div class="line"> <span class="keyword">auto</span> screen = ScreenInteractive::Fullscreen();</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="comment">// HTOP</span></div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> </div>
<div class="line"> <span class="keywordtype">int</span> shift = 0;</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> my_graph = [&amp;shift](<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height) {</div>
<div class="line"> std::vector&lt;int&gt; output(width);</div>
<div class="line"> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; width; ++i) {</div>
<div class="line"> <span class="keywordtype">float</span> v = 0.5f;</div>
<div class="line"> v += 0.1f * sin((i + shift) * 0.1f);</div>
<div class="line"> v += 0.2f * sin((i + shift + 10) * 0.15f);</div>
<div class="line"> v += 0.1f * sin((i + shift) * 0.03f);</div>
<div class="line"> v *= height;</div>
<div class="line"> output[i] = (int)v;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">return</span> output;</div>
<div class="line"> };</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> htop = Renderer([&amp;] {</div>
<div class="line"> <span class="keyword">auto</span> frequency = vbox({</div>
<div class="line"> text(<span class="stringliteral">&quot;Frequency [Mhz]&quot;</span>) | hcenter,</div>
<div class="line"> hbox({</div>
<div class="line"> vbox({</div>
<div class="line"> text(<span class="stringliteral">&quot;2400 &quot;</span>),</div>
<div class="line"> filler(),</div>
<div class="line"> text(<span class="stringliteral">&quot;1200 &quot;</span>),</div>
<div class="line"> filler(),</div>
<div class="line"> text(<span class="stringliteral">&quot;0 &quot;</span>),</div>
<div class="line"> }),</div>
<div class="line"> graph(std::ref(my_graph)) | flex,</div>
<div class="line"> }) | flex,</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> utilization = vbox({</div>
<div class="line"> text(<span class="stringliteral">&quot;Utilization [%]&quot;</span>) | hcenter,</div>
<div class="line"> hbox({</div>
<div class="line"> vbox({</div>
<div class="line"> text(<span class="stringliteral">&quot;100 &quot;</span>),</div>
<div class="line"> filler(),</div>
<div class="line"> text(<span class="stringliteral">&quot;50 &quot;</span>),</div>
<div class="line"> filler(),</div>
<div class="line"> text(<span class="stringliteral">&quot;0 &quot;</span>),</div>
<div class="line"> }),</div>
<div class="line"> graph(std::ref(my_graph)) | color(Color::RedLight),</div>
<div class="line"> }) | flex,</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> ram = vbox({</div>
<div class="line"> text(<span class="stringliteral">&quot;Ram [Mo]&quot;</span>) | hcenter,</div>
<div class="line"> hbox({</div>
<div class="line"> vbox({</div>
<div class="line"> text(<span class="stringliteral">&quot;8192&quot;</span>),</div>
<div class="line"> filler(),</div>
<div class="line"> text(<span class="stringliteral">&quot;4096 &quot;</span>),</div>
<div class="line"> filler(),</div>
<div class="line"> text(<span class="stringliteral">&quot;0 &quot;</span>),</div>
<div class="line"> }),</div>
<div class="line"> graph(std::ref(my_graph)) | color(Color::BlueLight),</div>
<div class="line"> }) | flex,</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> hbox({</div>
<div class="line"> vbox({</div>
<div class="line"> frequency | flex,</div>
<div class="line"> separator(),</div>
<div class="line"> utilization | flex,</div>
<div class="line"> }) | flex,</div>
<div class="line"> separator(),</div>
<div class="line"> ram | flex,</div>
<div class="line"> }) |</div>
<div class="line"> flex | border;</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="comment">// Compiler</span></div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> </div>
<div class="line"> <span class="keyword">const</span> std::vector&lt;std::string&gt; compiler_entries = {</div>
<div class="line"> <span class="stringliteral">&quot;gcc&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;clang&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;emcc&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;game_maker&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Ada compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;ALGOL 60 compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;ALGOL 68 compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Assemblers (Intel *86)&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Assemblers (Motorola 68*)&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Assemblers (Zilog Z80)&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Assemblers (other)&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;BASIC Compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;BASIC interpreters&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Batch compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;C compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Source-to-source compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;C++ compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;C# compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;COBOL compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Common Lisp compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;D compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;DIBOL/DBL compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;ECMAScript interpreters&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Eiffel compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Fortran compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Go compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Haskell compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Java compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Pascal compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Perl Interpreters&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;PHP compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;PL/I compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Python compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Scheme compilers and interpreters&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Smalltalk compilers&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Tcl Interpreters&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;VMS Interpreters&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;Rexx Interpreters&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;CLI compilers&quot;</span>,</div>
<div class="line"> };</div>
<div class="line"> </div>
<div class="line"> <span class="keywordtype">int</span> compiler_selected = 0;</div>
<div class="line"> <a class="code hl_typedef" href="namespaceftxui.html#af1479ede01dbf087342534ab4ada11d3">Component</a> compiler = Radiobox(&amp;compiler_entries, &amp;compiler_selected);</div>
<div class="line"> </div>
<div class="line"> std::array&lt;std::string, 8&gt; options_label = {</div>
<div class="line"> <span class="stringliteral">&quot;-Wall&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;-Werror&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;-lpthread&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;-O3&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;-Wabi-tag&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;-Wno-class-conversion&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;-Wcomma-subscript&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;-Wno-conversion-null&quot;</span>,</div>
<div class="line"> };</div>
<div class="line"> std::array&lt;bool, 8&gt; options_state = {</div>
<div class="line"> <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>,</div>
<div class="line"> };</div>
<div class="line"> </div>
<div class="line"> std::vector&lt;std::string&gt; input_entries;</div>
<div class="line"> <span class="keywordtype">int</span> input_selected = 0;</div>
<div class="line"> <a class="code hl_typedef" href="namespaceftxui.html#af1479ede01dbf087342534ab4ada11d3">Component</a> input = Menu(&amp;input_entries, &amp;input_selected);</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> input_option = <a id="_a0" name="_a0"></a><a class="code hl_struct" href="namespaceftxui.html#structftxui_1_1InputOption">InputOption</a>();</div>
<div class="line"> std::string input_add_content;</div>
<div class="line"> input_option.on_enter = [&amp;] {</div>
<div class="line"> input_entries.push_back(input_add_content);</div>
<div class="line"> input_add_content = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"> };</div>
<div class="line"> <a class="code hl_typedef" href="namespaceftxui.html#af1479ede01dbf087342534ab4ada11d3">Component</a> input_add = Input(&amp;input_add_content, <span class="stringliteral">&quot;input files&quot;</span>, input_option);</div>
<div class="line"> </div>
<div class="line"> std::string executable_content_ = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"> <a class="code hl_typedef" href="namespaceftxui.html#af1479ede01dbf087342534ab4ada11d3">Component</a> executable_ = Input(&amp;executable_content_, <span class="stringliteral">&quot;executable&quot;</span>);</div>
<div class="line"> </div>
<div class="line"> <a class="code hl_typedef" href="namespaceftxui.html#af1479ede01dbf087342534ab4ada11d3">Component</a> flags = Container::Vertical({</div>
<div class="line"> Checkbox(&amp;options_label[0], &amp;options_state[0]),</div>
<div class="line"> Checkbox(&amp;options_label[1], &amp;options_state[1]),</div>
<div class="line"> Checkbox(&amp;options_label[2], &amp;options_state[2]),</div>
<div class="line"> Checkbox(&amp;options_label[3], &amp;options_state[3]),</div>
<div class="line"> Checkbox(&amp;options_label[4], &amp;options_state[4]),</div>
<div class="line"> Checkbox(&amp;options_label[5], &amp;options_state[5]),</div>
<div class="line"> Checkbox(&amp;options_label[6], &amp;options_state[6]),</div>
<div class="line"> Checkbox(&amp;options_label[7], &amp;options_state[7]),</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> compiler_component = Container::Horizontal({</div>
<div class="line"> compiler,</div>
<div class="line"> flags,</div>
<div class="line"> Container::Vertical({</div>
<div class="line"> executable_,</div>
<div class="line"> Container::Horizontal({</div>
<div class="line"> input_add,</div>
<div class="line"> input,</div>
<div class="line"> }),</div>
<div class="line"> }),</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> render_command = [&amp;] {</div>
<div class="line"> <a class="code hl_typedef" href="namespaceftxui.html#a5d4aa06ca6cc6a72e981bd5386f93f0a">Elements</a> line;</div>
<div class="line"> <span class="comment">// Compiler</span></div>
<div class="line"> line.push_back(text(compiler_entries[compiler_selected]) | bold);</div>
<div class="line"> <span class="comment">// flags</span></div>
<div class="line"> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 8; ++i) {</div>
<div class="line"> <span class="keywordflow">if</span> (options_state[i]) {</div>
<div class="line"> line.push_back(text(<span class="stringliteral">&quot; &quot;</span>));</div>
<div class="line"> line.push_back(text(options_label[i]) | dim);</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="comment">// Executable</span></div>
<div class="line"> <span class="keywordflow">if</span> (!executable_content_.empty()) {</div>
<div class="line"> line.push_back(text(<span class="stringliteral">&quot; -o &quot;</span>) | bold);</div>
<div class="line"> line.push_back(text(executable_content_) | color(Color::BlueLight) |</div>
<div class="line"> bold);</div>
<div class="line"> }</div>
<div class="line"> <span class="comment">// Input</span></div>
<div class="line"> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; it : input_entries) {</div>
<div class="line"> line.push_back(text(<span class="stringliteral">&quot; &quot;</span> + it) | color(Color::RedLight));</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">return</span> line;</div>
<div class="line"> };</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> compiler_renderer = Renderer(compiler_component, [&amp;] {</div>
<div class="line"> <span class="keyword">auto</span> compiler_win = window(text(<span class="stringliteral">&quot;Compiler&quot;</span>),</div>
<div class="line"> compiler-&gt;Render() | vscroll_indicator | frame);</div>
<div class="line"> <span class="keyword">auto</span> flags_win =</div>
<div class="line"> window(text(<span class="stringliteral">&quot;Flags&quot;</span>), flags-&gt;Render() | vscroll_indicator | frame);</div>
<div class="line"> <span class="keyword">auto</span> executable_win = window(text(<span class="stringliteral">&quot;Executable:&quot;</span>), executable_-&gt;Render());</div>
<div class="line"> <span class="keyword">auto</span> input_win =</div>
<div class="line"> window(text(<span class="stringliteral">&quot;Input&quot;</span>), hbox({</div>
<div class="line"> vbox({</div>
<div class="line"> hbox({</div>
<div class="line"> text(<span class="stringliteral">&quot;Add: &quot;</span>),</div>
<div class="line"> input_add-&gt;Render(),</div>
<div class="line"> }) | size(WIDTH, EQUAL, 20) |</div>
<div class="line"> size(HEIGHT, EQUAL, 1),</div>
<div class="line"> filler(),</div>
<div class="line"> }),</div>
<div class="line"> separator(),</div>
<div class="line"> input-&gt;Render() | vscroll_indicator | frame |</div>
<div class="line"> size(HEIGHT, EQUAL, 3) | flex,</div>
<div class="line"> }));</div>
<div class="line"> <span class="keywordflow">return</span> vbox({</div>
<div class="line"> hbox({</div>
<div class="line"> compiler_win,</div>
<div class="line"> flags_win,</div>
<div class="line"> vbox({</div>
<div class="line"> executable_win | size(WIDTH, EQUAL, 20),</div>
<div class="line"> input_win | size(WIDTH, EQUAL, 60),</div>
<div class="line"> }),</div>
<div class="line"> filler(),</div>
<div class="line"> }) | size(HEIGHT, LESS_THAN, 8),</div>
<div class="line"> hflow(render_command()) | flex_grow,</div>
<div class="line"> }) |</div>
<div class="line"> flex_grow | border;</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="comment">// Spiner</span></div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="keyword">auto</span> spinner_tab_renderer = Renderer([&amp;] {</div>
<div class="line"> <a class="code hl_typedef" href="namespaceftxui.html#a5d4aa06ca6cc6a72e981bd5386f93f0a">Elements</a> entries;</div>
<div class="line"> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 22; ++i) {</div>
<div class="line"> entries.push_back(spinner(i, shift / 2) | bold |</div>
<div class="line"> size(WIDTH, GREATER_THAN, 2) | border);</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">return</span> hflow(std::move(entries)) | border;</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="comment">// Colors</span></div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="keyword">auto</span> color_tab_renderer = Renderer([] {</div>
<div class="line"> <span class="keywordflow">return</span> hbox({</div>
<div class="line"> vbox({</div>
<div class="line"> color(Color::Default, text(<span class="stringliteral">&quot;Default&quot;</span>)),</div>
<div class="line"> color(Color::Black, text(<span class="stringliteral">&quot;Black&quot;</span>)),</div>
<div class="line"> color(Color::GrayDark, text(<span class="stringliteral">&quot;GrayDark&quot;</span>)),</div>
<div class="line"> color(Color::GrayLight, text(<span class="stringliteral">&quot;GrayLight&quot;</span>)),</div>
<div class="line"> color(Color::White, text(<span class="stringliteral">&quot;White&quot;</span>)),</div>
<div class="line"> color(Color::Blue, text(<span class="stringliteral">&quot;Blue&quot;</span>)),</div>
<div class="line"> color(Color::BlueLight, text(<span class="stringliteral">&quot;BlueLight&quot;</span>)),</div>
<div class="line"> color(Color::Cyan, text(<span class="stringliteral">&quot;Cyan&quot;</span>)),</div>
<div class="line"> color(Color::CyanLight, text(<span class="stringliteral">&quot;CyanLight&quot;</span>)),</div>
<div class="line"> color(Color::Green, text(<span class="stringliteral">&quot;Green&quot;</span>)),</div>
<div class="line"> color(Color::GreenLight, text(<span class="stringliteral">&quot;GreenLight&quot;</span>)),</div>
<div class="line"> color(Color::Magenta, text(<span class="stringliteral">&quot;Magenta&quot;</span>)),</div>
<div class="line"> color(Color::MagentaLight, text(<span class="stringliteral">&quot;MagentaLight&quot;</span>)),</div>
<div class="line"> color(Color::Red, text(<span class="stringliteral">&quot;Red&quot;</span>)),</div>
<div class="line"> color(Color::RedLight, text(<span class="stringliteral">&quot;RedLight&quot;</span>)),</div>
<div class="line"> color(Color::Yellow, text(<span class="stringliteral">&quot;Yellow&quot;</span>)),</div>
<div class="line"> color(Color::YellowLight, text(<span class="stringliteral">&quot;YellowLight&quot;</span>)),</div>
<div class="line"> }),</div>
<div class="line"> vbox({</div>
<div class="line"> bgcolor(Color::Default, text(<span class="stringliteral">&quot;Default&quot;</span>)),</div>
<div class="line"> bgcolor(Color::Black, text(<span class="stringliteral">&quot;Black&quot;</span>)),</div>
<div class="line"> bgcolor(Color::GrayDark, text(<span class="stringliteral">&quot;GrayDark&quot;</span>)),</div>
<div class="line"> bgcolor(Color::GrayLight, text(<span class="stringliteral">&quot;GrayLight&quot;</span>)),</div>
<div class="line"> bgcolor(Color::White, text(<span class="stringliteral">&quot;White&quot;</span>)),</div>
<div class="line"> bgcolor(Color::Blue, text(<span class="stringliteral">&quot;Blue&quot;</span>)),</div>
<div class="line"> bgcolor(Color::BlueLight, text(<span class="stringliteral">&quot;BlueLight&quot;</span>)),</div>
<div class="line"> bgcolor(Color::Cyan, text(<span class="stringliteral">&quot;Cyan&quot;</span>)),</div>
<div class="line"> bgcolor(Color::CyanLight, text(<span class="stringliteral">&quot;CyanLight&quot;</span>)),</div>
<div class="line"> bgcolor(Color::Green, text(<span class="stringliteral">&quot;Green&quot;</span>)),</div>
<div class="line"> bgcolor(Color::GreenLight, text(<span class="stringliteral">&quot;GreenLight&quot;</span>)),</div>
<div class="line"> bgcolor(Color::Magenta, text(<span class="stringliteral">&quot;Magenta&quot;</span>)),</div>
<div class="line"> bgcolor(Color::MagentaLight, text(<span class="stringliteral">&quot;MagentaLight&quot;</span>)),</div>
<div class="line"> bgcolor(Color::Red, text(<span class="stringliteral">&quot;Red&quot;</span>)),</div>
<div class="line"> bgcolor(Color::RedLight, text(<span class="stringliteral">&quot;RedLight&quot;</span>)),</div>
<div class="line"> bgcolor(Color::Yellow, text(<span class="stringliteral">&quot;Yellow&quot;</span>)),</div>
<div class="line"> bgcolor(Color::YellowLight, text(<span class="stringliteral">&quot;YellowLight&quot;</span>)),</div>
<div class="line"> }),</div>
<div class="line"> }) |</div>
<div class="line"> hcenter | border;</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="comment">// Gauges</span></div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="keyword">auto</span> render_gauge = [&amp;shift](<span class="keywordtype">int</span> delta) {</div>
<div class="line"> <span class="keywordtype">float</span> progress = (shift + delta) % 1000 / 1000.f;</div>
<div class="line"> <span class="keywordflow">return</span> hbox({</div>
<div class="line"> text(std::to_string(<span class="keywordtype">int</span>(progress * 100)) + <span class="stringliteral">&quot;% &quot;</span>) |</div>
<div class="line"> size(WIDTH, EQUAL, 5),</div>
<div class="line"> gauge(progress),</div>
<div class="line"> });</div>
<div class="line"> };</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> gauge_component = Renderer([render_gauge] {</div>
<div class="line"> <span class="keywordflow">return</span> vbox({</div>
<div class="line"> render_gauge(0) | color(Color::Black),</div>
<div class="line"> render_gauge(100) | color(Color::GrayDark),</div>
<div class="line"> render_gauge(50) | color(Color::GrayLight),</div>
<div class="line"> render_gauge(6894) | color(Color::White),</div>
<div class="line"> separator(),</div>
<div class="line"> render_gauge(6841) | color(Color::Blue),</div>
<div class="line"> render_gauge(9813) | color(Color::BlueLight),</div>
<div class="line"> render_gauge(98765) | color(Color::Cyan),</div>
<div class="line"> render_gauge(98) | color(Color::CyanLight),</div>
<div class="line"> render_gauge(9846) | color(Color::Green),</div>
<div class="line"> render_gauge(1122) | color(Color::GreenLight),</div>
<div class="line"> render_gauge(84) | color(Color::Magenta),</div>
<div class="line"> render_gauge(645) | color(Color::MagentaLight),</div>
<div class="line"> render_gauge(568) | color(Color::Red),</div>
<div class="line"> render_gauge(2222) | color(Color::RedLight),</div>
<div class="line"> render_gauge(220) | color(Color::Yellow),</div>
<div class="line"> render_gauge(348) | color(Color::YellowLight),</div>
<div class="line"> }) |</div>
<div class="line"> border;</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="comment">// Paragraph</span></div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="keyword">auto</span> make_box = [](<span class="keywordtype">size_t</span> dimx, <span class="keywordtype">size_t</span> dimy) {</div>
<div class="line"> std::string title = std::to_string(dimx) + <span class="stringliteral">&quot;x&quot;</span> + std::to_string(dimy);</div>
<div class="line"> <span class="keywordflow">return</span> window(text(title) | hcenter | bold,</div>
<div class="line"> text(<span class="stringliteral">&quot;content&quot;</span>) | hcenter | dim) |</div>
<div class="line"> size(WIDTH, EQUAL, dimx) | size(HEIGHT, EQUAL, dimy);</div>
<div class="line"> };</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> paragraph_renderer_left = Renderer([&amp;] {</div>
<div class="line"> <span class="keyword">auto</span> title_style = bold | bgcolor(Color::Blue) | color(Color::Black);</div>
<div class="line"> std::string str =</div>
<div class="line"> <span class="stringliteral">&quot;Lorem Ipsum is simply dummy text of the printing and typesetting &quot;</span></div>
<div class="line"> <span class="stringliteral">&quot;industry. Lorem Ipsum has been the industry&#39;s standard dummy text &quot;</span></div>
<div class="line"> <span class="stringliteral">&quot;ever since the 1500s, when an unknown printer took a galley of type &quot;</span></div>
<div class="line"> <span class="stringliteral">&quot;and scrambled it to make a type specimen book.&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> vbox({</div>
<div class="line"> <span class="comment">// [ Left ]</span></div>
<div class="line"> text(<span class="stringliteral">&quot;Align left:&quot;</span>) | title_style,</div>
<div class="line"> paragraphAlignLeft(str),</div>
<div class="line"> <span class="comment">// [ Center ]</span></div>
<div class="line"> text(<span class="stringliteral">&quot;Align center:&quot;</span>) | title_style,</div>
<div class="line"> paragraphAlignCenter(str),</div>
<div class="line"> <span class="comment">// [ Right ]</span></div>
<div class="line"> text(<span class="stringliteral">&quot;Align right:&quot;</span>) | title_style,</div>
<div class="line"> paragraphAlignRight(str),</div>
<div class="line"> <span class="comment">// [ Justify]</span></div>
<div class="line"> text(<span class="stringliteral">&quot;Align justify:&quot;</span>) | title_style,</div>
<div class="line"> paragraphAlignJustify(str),</div>
<div class="line"> <span class="comment">// [ Side by side ]</span></div>
<div class="line"> text(<span class="stringliteral">&quot;Side by side:&quot;</span>) | title_style,</div>
<div class="line"> hbox({</div>
<div class="line"> paragraph(str),</div>
<div class="line"> separator() | color(Color::Blue),</div>
<div class="line"> paragraph(str),</div>
<div class="line"> }),</div>
<div class="line"> <span class="comment">// [ Misc ]</span></div>
<div class="line"> text(<span class="stringliteral">&quot;Elements with different size:&quot;</span>) | title_style,</div>
<div class="line"> flexbox({</div>
<div class="line"> make_box(10, 5),</div>
<div class="line"> make_box(9, 4),</div>
<div class="line"> make_box(8, 4),</div>
<div class="line"> make_box(6, 3),</div>
<div class="line"> make_box(10, 5),</div>
<div class="line"> make_box(9, 4),</div>
<div class="line"> make_box(8, 4),</div>
<div class="line"> make_box(6, 3),</div>
<div class="line"> make_box(10, 5),</div>
<div class="line"> make_box(9, 4),</div>
<div class="line"> make_box(8, 4),</div>
<div class="line"> make_box(6, 3),</div>
<div class="line"> }),</div>
<div class="line"> }) |</div>
<div class="line"> vscroll_indicator | yframe | flex;</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> paragraph_renderer_right = Renderer([] {</div>
<div class="line"> <span class="keywordflow">return</span> paragraph(<span class="stringliteral">&quot;&lt;--- This vertical bar is resizable using the mouse&quot;</span>) |</div>
<div class="line"> center;</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="keywordtype">int</span> paragraph_renderer_split_position = Terminal::Size().dimx / 2;</div>
<div class="line"> <span class="keyword">auto</span> paragraph_renderer_group =</div>
<div class="line"> ResizableSplitLeft(paragraph_renderer_left, paragraph_renderer_right,</div>
<div class="line"> &amp;paragraph_renderer_split_position);</div>
<div class="line"> <span class="keyword">auto</span> paragraph_renderer_group_renderer =</div>
<div class="line"> Renderer(paragraph_renderer_group,</div>
<div class="line"> [&amp;] { <span class="keywordflow">return</span> paragraph_renderer_group-&gt;Render() | border; });</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> <span class="comment">// Tabs</span></div>
<div class="line"> <span class="comment">// ---------------------------------------------------------------------------</span></div>
<div class="line"> </div>
<div class="line"> <span class="keywordtype">int</span> tab_index = 0;</div>
<div class="line"> std::vector&lt;std::string&gt; tab_entries = {</div>
<div class="line"> <span class="stringliteral">&quot;htop&quot;</span>, <span class="stringliteral">&quot;color&quot;</span>, <span class="stringliteral">&quot;spinner&quot;</span>, <span class="stringliteral">&quot;gauge&quot;</span>, <span class="stringliteral">&quot;compiler&quot;</span>, <span class="stringliteral">&quot;paragraph&quot;</span>,</div>
<div class="line"> };</div>
<div class="line"> <span class="keyword">auto</span> tab_selection = Toggle(&amp;tab_entries, &amp;tab_index);</div>
<div class="line"> <span class="keyword">auto</span> tab_content = Container::Tab(</div>
<div class="line"> {</div>
<div class="line"> htop,</div>
<div class="line"> color_tab_renderer,</div>
<div class="line"> spinner_tab_renderer,</div>
<div class="line"> gauge_component,</div>
<div class="line"> compiler_renderer,</div>
<div class="line"> paragraph_renderer_group_renderer,</div>
<div class="line"> },</div>
<div class="line"> &amp;tab_index);</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> main_container = Container::Vertical({</div>
<div class="line"> tab_selection,</div>
<div class="line"> tab_content,</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">auto</span> main_renderer = Renderer(main_container, [&amp;] {</div>
<div class="line"> <span class="keywordflow">return</span> vbox({</div>
<div class="line"> text(<span class="stringliteral">&quot;FTXUI Demo&quot;</span>) | bold | hcenter,</div>
<div class="line"> tab_selection-&gt;Render() | hcenter,</div>
<div class="line"> tab_content-&gt;Render() | flex,</div>
<div class="line"> });</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> <span class="keywordtype">bool</span> refresh_ui_continue = <span class="keyword">true</span>;</div>
<div class="line"> std::thread refresh_ui([&amp;] {</div>
<div class="line"> <span class="keywordflow">while</span> (refresh_ui_continue) {</div>
<div class="line"> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"> std::this_thread::sleep_for(0.05s);</div>
<div class="line"> shift++;</div>
<div class="line"> screen.PostEvent(Event::Custom);</div>
<div class="line"> }</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> screen.Loop(main_renderer);</div>
<div class="line"> refresh_ui_continue = <span class="keyword">false</span>;</div>
<div class="line"> refresh_ui.join();</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Copyright 2020 Arthur Sonzogni. All rights reserved.</span></div>
<div class="line"><span class="comment">// Use of this source code is governed by the MIT license that can be found in</span></div>
<div class="line"><span class="comment">// the LICENSE file.</span></div>
<div class="ttc" id="acaptured__mouse_8hpp_html"><div class="ttname"><a href="captured__mouse_8hpp.html">captured_mouse.hpp</a></div></div>
<div class="ttc" id="acolor_8hpp_html"><div class="ttname"><a href="color_8hpp.html">color.hpp</a></div></div>
<div class="ttc" id="acomponent_8hpp_html"><div class="ttname"><a href="component_8hpp.html">component.hpp</a></div></div>
<div class="ttc" id="acomponent__base_8hpp_html"><div class="ttname"><a href="component__base_8hpp.html">component_base.hpp</a></div></div>
<div class="ttc" id="acomponent__options_8hpp_html"><div class="ttname"><a href="component__options_8hpp.html">component_options.hpp</a></div></div>
<div class="ttc" id="aelements_8hpp_html"><div class="ttname"><a href="elements_8hpp.html">elements.hpp</a></div></div>
<div class="ttc" id="aevent_8hpp_html"><div class="ttname"><a href="event_8hpp.html">event.hpp</a></div></div>
<div class="ttc" id="anamespaceftxui_html"><div class="ttname"><a href="namespaceftxui.html">ftxui</a></div><div class="ttdef"><b>Definition</b> <a href="captured__mouse_8hpp_source.html#l00006">captured_mouse.hpp:6</a></div></div>
<div class="ttc" id="anamespaceftxui_html_a5d4aa06ca6cc6a72e981bd5386f93f0a"><div class="ttname"><a href="namespaceftxui.html#a5d4aa06ca6cc6a72e981bd5386f93f0a">ftxui::Elements</a></div><div class="ttdeci">std::vector&lt; Element &gt; Elements</div><div class="ttdef"><b>Definition</b> <a href="elements_8hpp_source.html#l00019">elements.hpp:19</a></div></div>
<div class="ttc" id="anamespaceftxui_html_af1479ede01dbf087342534ab4ada11d3"><div class="ttname"><a href="namespaceftxui.html#af1479ede01dbf087342534ab4ada11d3">ftxui::Component</a></div><div class="ttdeci">std::shared_ptr&lt; ComponentBase &gt; Component</div><div class="ttdef"><b>Definition</b> <a href="component__base_8hpp_source.html#l00017">component_base.hpp:17</a></div></div>
<div class="ttc" id="anamespaceftxui_html_structftxui_1_1InputOption"><div class="ttname"><a href="namespaceftxui.html#structftxui_1_1InputOption">ftxui::InputOption</a></div><div class="ttdoc">Option for the Input component.</div><div class="ttdef"><b>Definition</b> <a href="component__options_8hpp_source.html#l00060">component_options.hpp:60</a></div></div>
<div class="ttc" id="ascreen__interactive_8hpp_html"><div class="ttname"><a href="screen__interactive_8hpp.html">screen_interactive.hpp</a></div></div>
<div class="ttc" id="aterminal_8hpp_html"><div class="ttname"><a href="terminal_8hpp.html">terminal.hpp</a></div></div>
</div><!-- fragment --> </div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.14-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const projectNumber = document.getElementById('projectname');
if (!projectNumber) {
console.warn('Doxygen element with ID "projectnumber" not found. Cannot add version switcher.');
return;
}
const langs = ["en", "es", "fr", "ja", "zh-CH", "zh-TW"];
const lang_paths = {"en": "../../index.html", "es": "../../es/index.html", "fr": "../../fr/index.html", "ja": "../../ja/index.html", "zh-CH": "../../zh-CH/index.html", "zh-TW": "../../zh-TW/index.html"};
const lang_display = {"en": "English", "es": "Espa\u00f1ol", "fr": "Fran\u00e7ais", "ja": "\u65e5\u672c\u8a9e", "zh-CH": "\u4e2d\u6587 (\u7b80\u4f53)", "zh-TW": "\u4e2d\u6587 (\u7e41\u9ad4)"};
const versions = ["main", "v6.1.9", "v6.1.8", "v6.1.7", "v6.1.6", "v6.1.5", "v6.1.4", "v6.1.3", "v6.1.2", "v6.1.1", "v6.1.0", "v6.0.2", "v6.0.1", "v6.0.0", "v5.0.0", "v4.1.1", "v4.1.0", "v4.0.0", "v3.0.0", "v2.0.0", "v0.9", "v0.11", "v0.10"];
const version_paths = {"main": "../../index.html", "v6.1.9": "../v6.1.9/index.html", "v6.1.8": "../v6.1.8/index.html", "v6.1.7": "../v6.1.7/index.html", "v6.1.6": "../v6.1.6/index.html", "v6.1.5": "../v6.1.5/index.html", "v6.1.4": "../v6.1.4/index.html", "v6.1.3": "../v6.1.3/index.html", "v6.1.2": "../v6.1.2/index.html", "v6.1.1": "../v6.1.1/index.html", "v6.1.0": "../v6.1.0/index.html", "v6.0.2": "../v6.0.2/index.html", "v6.0.1": "../v6.0.1/index.html", "v6.0.0": "../v6.0.0/index.html", "v5.0.0": "../v5.0.0/index.html", "v4.1.1": "../v4.1.1/index.html", "v4.1.0": "../v4.1.0/index.html", "v4.0.0": "../v4.0.0/index.html", "v3.0.0": "../v3.0.0/index.html", "v2.0.0": "index.html", "v0.9": "../v0.9/index.html", "v0.11": "../v0.11/index.html", "v0.10": "../v0.10/index.html"};
const currentLang = "en";
const currentVersion = "v2.0.0";
// Helper function to create a styled select element
const createSelect = (options, current, paths, label, displayMap = null) => {
const select = document.createElement('select');
select.title = label;
select.onchange = function() {
const selectedValue = this.value;
if (selectedValue in paths) {
window.location.href = paths[selectedValue];
}
};
// Sort versions: 'main' first, then others numerically descending.
options.sort((a, b) => {
if (a === 'main') return -1;
if (b === 'main') return 1;
return b.localeCompare(a, undefined, { numeric: true, sensitivity: 'base' });
});
options.forEach(v => {
const option = document.createElement('option');
option.value = v;
// Use the displayMap if provided, otherwise default to the value (v)
option.textContent = displayMap ? displayMap[v] : v;
if (v === current) {
option.selected = true;
}
select.appendChild(option);
});
// Apply some styling to make it look good.
Object.assign(select.style, {
backgroundColor: 'rgba(0, 0, 0, 0.8)',
color: 'white',
border: '1px solid rgba(255, 255, 255, 0.2)',
padding: '5px',
borderRadius: '5px',
fontSize: '14px',
fontFamily: 'inherit',
margin: '0 5px 0 0',
cursor: 'pointer'
});
return select;
};
// 1. Create Language Switcher, passing the language display names map
const langSelect = createSelect(langs, currentLang, lang_paths, 'Select Language', lang_display);
// 2. Create Version Switcher
const versionSelect = createSelect(versions, currentVersion, version_paths, 'Select Version');
// 3. Create FTXUI title.
const ftxuiTitle = document.createElement('span');
ftxuiTitle.textContent = 'FTXUI: ';
Object.assign(ftxuiTitle.style, {
color: 'white',
fontSize: '20px',
fontWeight: 'bold',
marginRight: '10px'
});
// 3. Create a container to hold both selectors
const container = document.createElement('div');
container.id = 'version-lang-switchers';
Object.assign(container.style, {
display: 'flex',
alignItems: 'center',
justifyContent: 'flex-end',
width: 'auto'
});
container.appendChild(ftxuiTitle);
container.appendChild(langSelect);
container.appendChild(versionSelect);
Object.assign(container.style, {
backgroundColor: 'rgba(0, 0, 0, 0.5)',
padding: '5px 10px',
borderRadius: '8px'
});
// Replace the Doxygen project number element with our container.
projectNumber.replaceWith(container);
// Clean up the original Doxygen project number text if it still exists nearby
const parent = container.parentElement;
if (parent) {
const textNode = Array.from(parent.childNodes).find(n => n.nodeType === 3 && n.textContent.trim() !== '');
if (textNode) {
textNode.remove();
}
}
});
</script>
</body>
</html>