From 805c9061e5d7bb9e141e9ee103429ca4f46fbe52 Mon Sep 17 00:00:00 2001
From: Arthur Sonzogni <sonzogniarthur@gmail.com>
Date: Sun, 6 Jan 2019 16:10:57 +0100
Subject: [PATCH] Clean source code. Add to_wstring<T> T={int, float, double,
 ...}

---
 examples/dom/frame.cpp                  | 70 ++++++++++++-------------
 examples/dom/package_manager.cpp        |  2 +-
 ftxui/include/ftxui/component/input.hpp |  2 +-
 ftxui/include/ftxui/component/menu.hpp  |  2 +-
 ftxui/include/ftxui/dom/elements.hpp    | 16 +-----
 ftxui/include/ftxui/requirement.hpp     | 20 ++-----
 ftxui/include/ftxui/util/string.hpp     |  5 ++
 ftxui/src/ftxui/dom/gauge_test.cpp      |  4 +-
 ftxui/src/ftxui/dom/vbox_test.cpp       |  2 +-
 9 files changed, 52 insertions(+), 71 deletions(-)

diff --git a/examples/dom/frame.cpp b/examples/dom/frame.cpp
index 52ec6df8..0cfccbc8 100644
--- a/examples/dom/frame.cpp
+++ b/examples/dom/frame.cpp
@@ -8,41 +8,41 @@
 int main(int argc, const char *argv[])
 {
   using namespace ftxui::dom;
-	auto document =
-		hbox(
-			window(hcenter(text(L" main frame ")),
-				vbox(
-					text(L"Line 1"),
-					text(L"Line 2"),
-					text(L"Line 3"),
-					frame(
-						vbox(
-							text(L"Line 4"),
-							text(L"Line 5"),
-							text(L"Line 6")
-						)
-					),
-					hbox(
-						window(text(L"frame 2"),
-							vbox(
-								text(L"Line 4"),
-								text(L"Line 5"),
-								text(L"Line 6")
-							)
-						),
-						window(text(L"frame 3"),
-							vbox(
-								text(L"Line 7"),
-								text(L"Line 8"),
-								text(L"Line 9")
-							)
-						)
-					),
-					text(L"footer footer footer footer footer")
-				)
-			),
-			filler()
-		);
+  auto document =
+    hbox(
+      window(text(L" main frame ") | hcenter,
+        vbox(
+          text(L"Line 1"),
+          text(L"Line 2"),
+          text(L"Line 3"),
+          frame(
+            vbox(
+              text(L"Line 4"),
+              text(L"Line 5"),
+              text(L"Line 6")
+            )
+          ),
+          hbox(
+            window(text(L"frame 2"),
+              vbox(
+                text(L"Line 4"),
+                text(L"Line 5"),
+                text(L"Line 6")
+              )
+            ),
+            window(text(L"frame 3"),
+              vbox(
+                text(L"Line 7"),
+                text(L"Line 8"),
+                text(L"Line 9")
+              )
+            )
+          ),
+          text(L"footer footer footer footer footer")
+        )
+      ),
+      filler()
+    );
   auto screen = ftxui::Screen::TerminalOutput(document);
   Render(screen, document.get());
   std::cout << screen.ToString() << std::endl;
diff --git a/examples/dom/package_manager.cpp b/examples/dom/package_manager.cpp
index 21c803a6..1987bec6 100644
--- a/examples/dom/package_manager.cpp
+++ b/examples/dom/package_manager.cpp
@@ -44,7 +44,7 @@ int main(int argc, const char *argv[])
   int nb_done = 0;
 
   auto to_text = [](int number) {
-    std::wstring t = to_wstring(std::to_string(number));
+    std::wstring t = to_wstring(number);
     while(t.size() < 3)
       t = L" " + t;
     return text(t);
diff --git a/ftxui/include/ftxui/component/input.hpp b/ftxui/include/ftxui/component/input.hpp
index 232d88e6..6f8537c5 100644
--- a/ftxui/include/ftxui/component/input.hpp
+++ b/ftxui/include/ftxui/component/input.hpp
@@ -23,7 +23,7 @@ class Input : public Component {
 
   // Component implementation.
   dom::Element Render() override;
-	bool OnEvent(Event) override;
+  bool OnEvent(Event) override;
 
  private:
   int cursor_position = 0;
diff --git a/ftxui/include/ftxui/component/menu.hpp b/ftxui/include/ftxui/component/menu.hpp
index b426c6db..6b4f045d 100644
--- a/ftxui/include/ftxui/component/menu.hpp
+++ b/ftxui/include/ftxui/component/menu.hpp
@@ -27,7 +27,7 @@ class Menu : public Component {
 
   // Component implementation.
   dom::Element Render() override;
-	bool OnEvent(Event) override;
+  bool OnEvent(Event) override;
 };
 
 }  // namespace component
diff --git a/ftxui/include/ftxui/dom/elements.hpp b/ftxui/include/ftxui/dom/elements.hpp
index 6609fd7c..67ebe7de 100644
--- a/ftxui/include/ftxui/dom/elements.hpp
+++ b/ftxui/include/ftxui/dom/elements.hpp
@@ -52,20 +52,8 @@ Element nothing(Element element);
 Element operator|(Element, Decorator);
 Decorator operator|(Decorator, Decorator);
 
-// Make container able to take several children.
-template <class... Args>
-Children unpack(Args... args) {
-  Children vec;
-  (vec.push_back(std::forward<Args>(args)), ...);
-  return vec;
-}
-
-#define TAKE_ANY_ARGS(container) \
-  template <class... Args> \
-  Element container(Args... children) { \
-    return container(unpack(std::forward<Args>(children)...)); \
-  } \
-
+// Make container able to take any number of children as input.
+#include "take_any_args.hpp"
 TAKE_ANY_ARGS(vbox)
 TAKE_ANY_ARGS(hbox)
 TAKE_ANY_ARGS(dbox)
diff --git a/ftxui/include/ftxui/requirement.hpp b/ftxui/include/ftxui/requirement.hpp
index 2b4e714a..f5a96055 100644
--- a/ftxui/include/ftxui/requirement.hpp
+++ b/ftxui/include/ftxui/requirement.hpp
@@ -4,23 +4,11 @@
 namespace ftxui {
 
 struct Requirement {
-  // Minimal dimensions.
-  struct {
-    int x = 0;
-    int y = 0;
-  } min;
+  // The required size to fully draw the element.
+  struct { int x = 0; int y = 0; } min;
 
-  // Maximal dimensions.
-  struct {
-    int x = -1;
-    int y = -1;
-  } max;
-
-  // Flex.
-  struct {
-    int x = 0;
-    int y = 0;
-  } flex;
+  // How much flexibility is given to the component.
+  struct { int x = 0; int y = 0; } flex;
 };
 
 };  // namespace ftxui
diff --git a/ftxui/include/ftxui/util/string.hpp b/ftxui/include/ftxui/util/string.hpp
index d2383e78..72d0b051 100644
--- a/ftxui/include/ftxui/util/string.hpp
+++ b/ftxui/include/ftxui/util/string.hpp
@@ -2,3 +2,8 @@
 
 std::string to_string(const std::wstring& s);
 std::wstring to_wstring(const std::string& s);
+
+template<typename T>
+std::wstring to_wstring(T s) {
+  return to_wstring(std::to_string(s));
+}
diff --git a/ftxui/src/ftxui/dom/gauge_test.cpp b/ftxui/src/ftxui/dom/gauge_test.cpp
index c3f88814..ef78951a 100644
--- a/ftxui/src/ftxui/dom/gauge_test.cpp
+++ b/ftxui/src/ftxui/dom/gauge_test.cpp
@@ -18,8 +18,8 @@ TEST(GaugeTest, half) {
   Screen screen(11,1);
   Render(screen, root.get());
 
-  EXPECT_EQ("█████▏▋    ", screen.ToString());
-//"  ▏▎▍▌▊▉█";
+  EXPECT_EQ("█████▍     ", screen.ToString());
+  //"  ▏▎▍▌▊▉█";
 }
 
 TEST(GaugeTest, one) {
diff --git a/ftxui/src/ftxui/dom/vbox_test.cpp b/ftxui/src/ftxui/dom/vbox_test.cpp
index 3e1ef453..6f24fb8b 100644
--- a/ftxui/src/ftxui/dom/vbox_test.cpp
+++ b/ftxui/src/ftxui/dom/vbox_test.cpp
@@ -10,7 +10,7 @@ TEST(VBoxTest, ScreenSmaller1) {
   Screen screen(6, 1);
   Render(screen, root.get());
 
-  EXPECT_EQ("text_1", screen.ToString());
+  EXPECT_EQ("text_2", screen.ToString());
 }
 
 TEST(VBoxTest, ScreenFit) {
-- 
GitLab