mirror of
				https://github.com/ArthurSonzogni/FTXUI.git
				synced 2025-11-01 02:58:12 +08:00 
			
		
		
		
	Set clang-format macro indent.
1) Set clang-format macro indent. 2) Run clang-format on every files.
This commit is contained in:
		| @@ -2,3 +2,4 @@ | ||||
| # http://clang.llvm.org/docs/ClangFormatStyleOptions.html | ||||
| BasedOnStyle: Chromium | ||||
| Standard: Cpp11 | ||||
| IndentPPDirectives: BeforeHash | ||||
|   | ||||
| @@ -1,9 +1,10 @@ | ||||
| #ifndef FTXUI_COMPONENT_CHECKBOX_HPP | ||||
| #define FTXUI_COMPONENT_CHECKBOX_HPP | ||||
|  | ||||
| #include "ftxui/component/component.hpp" | ||||
| #include <functional> | ||||
|  | ||||
| #include "ftxui/component/component.hpp" | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| class CheckBox : public Component { | ||||
| @@ -15,8 +16,8 @@ class CheckBox : public Component { | ||||
|   bool state = false; | ||||
|   std::wstring label = L"label"; | ||||
|  | ||||
|   //std::wstring checked = L"[X] "; | ||||
|   //std::wstring unchecked = L"[ ] "; | ||||
|   // std::wstring checked = L"[X] "; | ||||
|   // std::wstring unchecked = L"[ ] "; | ||||
|   std::wstring checked = L"▣ "; | ||||
|   std::wstring unchecked = L"☐ "; | ||||
|  | ||||
| @@ -24,7 +25,7 @@ class CheckBox : public Component { | ||||
|   Decorator unfocused_style = nothing; | ||||
|  | ||||
|   // State update callback. | ||||
|   std::function<void()> on_change = [](){}; | ||||
|   std::function<void()> on_change = []() {}; | ||||
|  | ||||
|   // Component implementation. | ||||
|   Element Render() override; | ||||
|   | ||||
| @@ -11,7 +11,6 @@ class Focus; | ||||
|  | ||||
| class Component { | ||||
|  public: | ||||
|  | ||||
|   // Constructor/Destructor. | ||||
|   Component() = default; | ||||
|   virtual ~Component(); | ||||
|   | ||||
| @@ -1,9 +1,10 @@ | ||||
| #ifndef FTXUI_COMPONENT_INPUT_H_ | ||||
| #define FTXUI_COMPONENT_INPUT_H_ | ||||
|  | ||||
| #include "ftxui/component/component.hpp" | ||||
| #include <functional> | ||||
|  | ||||
| #include "ftxui/component/component.hpp" | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| class Input : public Component { | ||||
| @@ -17,8 +18,8 @@ class Input : public Component { | ||||
|   std::wstring placeholder; | ||||
|  | ||||
|   // State update callback. | ||||
|   std::function<void()> on_change = [](){}; | ||||
|   std::function<void()> on_enter = [](){}; | ||||
|   std::function<void()> on_change = []() {}; | ||||
|   std::function<void()> on_enter = []() {}; | ||||
|  | ||||
|   // Component implementation. | ||||
|   Element Render() override; | ||||
|   | ||||
| @@ -1,9 +1,10 @@ | ||||
| #ifndef FTXUI_COMPONENT_MENU | ||||
| #define FTXUI_COMPONENT_MENU | ||||
|  | ||||
| #include <functional> | ||||
|  | ||||
| #include "ftxui/component/component.hpp" | ||||
| #include "ftxui/dom/elements.hpp" | ||||
| #include <functional> | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| @@ -22,14 +23,14 @@ class Menu : public Component { | ||||
|   Decorator normal_style = nothing; | ||||
|  | ||||
|   // State update callback. | ||||
|   std::function<void()> on_change = [](){}; | ||||
|   std::function<void()> on_enter = [](){}; | ||||
|   std::function<void()> on_change = []() {}; | ||||
|   std::function<void()> on_enter = []() {}; | ||||
|  | ||||
|   // Component implementation. | ||||
|   Element Render() override; | ||||
|   bool OnEvent(Event) override; | ||||
| }; | ||||
|  | ||||
| }  // namespace ftxui::Component | ||||
| }  // namespace ftxui | ||||
|  | ||||
| #endif /* end of include guard: FTXUI_COMPONENT_MENU */ | ||||
|   | ||||
| @@ -1,9 +1,10 @@ | ||||
| #ifndef FTXUI_COMPONENT_RADIOBOX_HPP | ||||
| #define FTXUI_COMPONENT_RADIOBOX_HPP | ||||
|  | ||||
| #include "ftxui/component/component.hpp" | ||||
| #include <functional> | ||||
|  | ||||
| #include "ftxui/component/component.hpp" | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| class RadioBox : public Component { | ||||
| @@ -23,7 +24,7 @@ class RadioBox : public Component { | ||||
|   Decorator unfocused_style = nothing; | ||||
|  | ||||
|   // State update callback. | ||||
|   std::function<void()> on_change = [](){}; | ||||
|   std::function<void()> on_change = []() {}; | ||||
|  | ||||
|   // Component implementation. | ||||
|   Element Render() override; | ||||
|   | ||||
| @@ -1,12 +1,12 @@ | ||||
| #ifndef FTXUI_COMPONENT_SCREEN_INTERACTIVE_HPP | ||||
| #define FTXUI_COMPONENT_SCREEN_INTERACTIVE_HPP | ||||
|  | ||||
| #include <atomic> | ||||
| #include <condition_variable> | ||||
| #include <functional> | ||||
| #include <memory> | ||||
| #include <mutex> | ||||
| #include <queue> | ||||
| #include <atomic> | ||||
|  | ||||
| #include "ftxui/component/event.hpp" | ||||
| #include "ftxui/screen/screen.hpp" | ||||
| @@ -15,38 +15,38 @@ namespace ftxui { | ||||
| class Component; | ||||
|  | ||||
| class ScreenInteractive : public Screen { | ||||
|   public: | ||||
|     static ScreenInteractive FixedSize(int dimx, int dimy); | ||||
|     static ScreenInteractive Fullscreen(); | ||||
|     static ScreenInteractive FitComponent(); | ||||
|     static ScreenInteractive TerminalOutput(); | ||||
|  public: | ||||
|   static ScreenInteractive FixedSize(int dimx, int dimy); | ||||
|   static ScreenInteractive Fullscreen(); | ||||
|   static ScreenInteractive FitComponent(); | ||||
|   static ScreenInteractive TerminalOutput(); | ||||
|  | ||||
|     ~ScreenInteractive(); | ||||
|     void Loop(Component*); | ||||
|     std::function<void()> ExitLoopClosure(); | ||||
|   ~ScreenInteractive(); | ||||
|   void Loop(Component*); | ||||
|   std::function<void()> ExitLoopClosure(); | ||||
|  | ||||
|     void PostEvent(Event event); | ||||
|   void PostEvent(Event event); | ||||
|  | ||||
|   private: | ||||
|    void Draw(Component* component); | ||||
|    void EventLoop(Component* component); | ||||
|  private: | ||||
|   void Draw(Component* component); | ||||
|   void EventLoop(Component* component); | ||||
|  | ||||
|    enum class Dimension { | ||||
|      FitComponent, | ||||
|      Fixed, | ||||
|      Fullscreen, | ||||
|      TerminalOutput, | ||||
|    }; | ||||
|    Dimension dimension_ = Dimension::Fixed; | ||||
|    ScreenInteractive(int dimx, int dimy, Dimension dimension); | ||||
|   enum class Dimension { | ||||
|     FitComponent, | ||||
|     Fixed, | ||||
|     Fullscreen, | ||||
|     TerminalOutput, | ||||
|   }; | ||||
|   Dimension dimension_ = Dimension::Fixed; | ||||
|   ScreenInteractive(int dimx, int dimy, Dimension dimension); | ||||
|  | ||||
|    std::condition_variable events_queue_cv; | ||||
|    std::mutex events_queue_mutex; | ||||
|    std::queue<Event> events_queue; | ||||
|    std::atomic<bool> quit_ = false; | ||||
|   std::condition_variable events_queue_cv; | ||||
|   std::mutex events_queue_mutex; | ||||
|   std::queue<Event> events_queue; | ||||
|   std::atomic<bool> quit_ = false; | ||||
|  | ||||
|    std::string set_cursor_position; | ||||
|    std::string reset_cursor_position; | ||||
|   std::string set_cursor_position; | ||||
|   std::string reset_cursor_position; | ||||
| }; | ||||
|  | ||||
| }  // namespace ftxui | ||||
|   | ||||
| @@ -1,10 +1,11 @@ | ||||
| #ifndef FTXUI_COMPONENT_TOGGLE_H_ | ||||
| #define FTXUI_COMPONENT_TOGGLE_H_ | ||||
|  | ||||
| #include "ftxui/component/component.hpp" | ||||
| #include <functional> | ||||
| #include <string> | ||||
|  | ||||
| #include "ftxui/component/component.hpp" | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| class Toggle : public Component { | ||||
| @@ -21,13 +22,13 @@ class Toggle : public Component { | ||||
|   Decorator normal_style = dim; | ||||
|  | ||||
|   // Callback. | ||||
|   std::function<void()> on_change = [](){}; | ||||
|   std::function<void()> on_change = []() {}; | ||||
|  | ||||
|   // Component implementation. | ||||
|   Element Render() override; | ||||
|   bool OnEvent(Event) override; | ||||
| }; | ||||
|  | ||||
| }  // namespace ftxui::Component | ||||
| }  // namespace ftxui | ||||
|  | ||||
| #endif /* end of include guard: FTXUI_COMPONENT_TOGGLE_H_ */ | ||||
|   | ||||
| @@ -29,7 +29,8 @@ class Node { | ||||
|   // Step 3: Draw this element. | ||||
|   virtual void Render(Screen& screen); | ||||
|  | ||||
|  std::vector<std::unique_ptr<Node>> children; | ||||
|   std::vector<std::unique_ptr<Node>> children; | ||||
|  | ||||
|  protected: | ||||
|   Requirement requirement_; | ||||
|   Box box_; | ||||
|   | ||||
| @@ -7,10 +7,16 @@ namespace ftxui { | ||||
|  | ||||
| struct Requirement { | ||||
|   // The required size to fully draw the element. | ||||
|   struct { int x = 0; int y = 0; } min; | ||||
|   struct { | ||||
|     int x = 0; | ||||
|     int y = 0; | ||||
|   } min; | ||||
|  | ||||
|   // How much flexibility is given to the component. | ||||
|   struct { int x = 0; int y = 0; } flex; | ||||
|   struct { | ||||
|     int x = 0; | ||||
|     int y = 0; | ||||
|   } flex; | ||||
|  | ||||
|   // Frame. | ||||
|   enum Selection { | ||||
| @@ -21,6 +27,6 @@ struct Requirement { | ||||
|   Box selected_box; | ||||
| }; | ||||
|  | ||||
| } // namespace ftxui | ||||
| }  // namespace ftxui | ||||
|  | ||||
| #endif /* end of include guard: FTXUI_REQUIREMENT_HPP */ | ||||
|   | ||||
| @@ -10,7 +10,7 @@ inline void Merge(Elements& container, Element element) { | ||||
|  | ||||
| template <> | ||||
| inline void Merge(Elements& container, Elements elements) { | ||||
|   for(auto& element : elements) | ||||
|   for (auto& element : elements) | ||||
|     container.push_back(std::move(element)); | ||||
| } | ||||
|  | ||||
| @@ -23,8 +23,8 @@ Elements unpack(Args... args) { | ||||
| } | ||||
|  | ||||
| // Make |container| able to take any number of argments. | ||||
| #define TAKE_ANY_ARGS(container) \ | ||||
| template <class... Args> \ | ||||
| Element container(Args... children) { \ | ||||
|   return container(unpack(std::forward<Args>(children)...)); \ | ||||
| } | ||||
| #define TAKE_ANY_ARGS(container)                               \ | ||||
|   template <class... Args>                                     \ | ||||
|   Element container(Args... children) {                        \ | ||||
|     return container(unpack(std::forward<Args>(children)...)); \ | ||||
|   } | ||||
|   | ||||
| @@ -35,6 +35,6 @@ enum class Color : uint8_t { | ||||
|   YellowLight = 93, | ||||
| }; | ||||
|  | ||||
| } // namespace ftxui | ||||
| }  // namespace ftxui | ||||
|  | ||||
| #endif /* end of include guard: FTXUI_COLOR_H_ */ | ||||
|   | ||||
| @@ -1,15 +1,15 @@ | ||||
| #ifndef FTXUI_SCREEN_SCREEN | ||||
| #define FTXUI_SCREEN_SCREEN | ||||
|  | ||||
| #include <memory> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include <memory> | ||||
|  | ||||
| #include "ftxui/screen/color.hpp" | ||||
| #include "ftxui/screen/box.hpp" | ||||
| #include "ftxui/screen/color.hpp" | ||||
|  | ||||
| namespace ftxui { | ||||
|   class Node; | ||||
| class Node; | ||||
| } | ||||
|  | ||||
| namespace ftxui { | ||||
| @@ -49,8 +49,8 @@ class Screen { | ||||
|   std::string ToString(); | ||||
|  | ||||
|   // Get screen dimensions. | ||||
|   int dimx() { return dimx_;} | ||||
|   int dimy() { return dimy_;} | ||||
|   int dimx() { return dimx_; } | ||||
|   int dimy() { return dimy_; } | ||||
|  | ||||
|   // Move the terminal cursor n-lines up with n = dimy(). | ||||
|   std::string ResetPosition(); | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
| std::string to_string(const std::wstring& s); | ||||
| std::wstring to_wstring(const std::string& s); | ||||
|  | ||||
| template<typename T> | ||||
| template <typename T> | ||||
| std::wstring to_wstring(T s) { | ||||
|   return to_wstring(std::to_string(s)); | ||||
| } | ||||
|   | ||||
| @@ -3,20 +3,20 @@ | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| template<typename T> | ||||
| template <typename T> | ||||
| class AutoReset { | ||||
|  public: | ||||
|   AutoReset(T* variable, T new_value) | ||||
|       : variable_(variable), | ||||
|         previous_value_(std::move(*variable)) { | ||||
|       : variable_(variable), previous_value_(std::move(*variable)) { | ||||
|     *variable_ = std::move(new_value); | ||||
|   } | ||||
|   ~AutoReset() { *variable_ = std::move(previous_value_); } | ||||
|  | ||||
|  private: | ||||
|   T* variable_; | ||||
|   T previous_value_; | ||||
| }; | ||||
|  | ||||
| } // namespace ftxui | ||||
| }  // namespace ftxui | ||||
|  | ||||
| #endif /* end of include guard: FTXUI_UTIL_AUTORESET_HPP */ | ||||
|   | ||||
| @@ -1,7 +1,9 @@ | ||||
| #include "ftxui/component/input.hpp" | ||||
| #include "ftxui/screen/string.hpp" | ||||
|  | ||||
| #include <algorithm> | ||||
|  | ||||
| #include "ftxui/screen/string.hpp" | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| // Component implementation. | ||||
| @@ -22,15 +24,14 @@ Element Input::Render() { | ||||
|   if (!is_focused) | ||||
|     return text(content) | main_decorator; | ||||
|  | ||||
|   std::wstring part_before_cursor = content.substr(0,cursor_position); | ||||
|   std::wstring part_before_cursor = content.substr(0, cursor_position); | ||||
|   std::wstring part_at_cursor = cursor_position < (int)content.size() | ||||
|                                     ? content.substr(cursor_position, 1) | ||||
|                                     : L" "; | ||||
|   std::wstring part_after_cursor = cursor_position < (int)content.size() - 1 | ||||
|                                        ? content.substr(cursor_position + 1) | ||||
|                                        : L""; | ||||
|   auto focused =  | ||||
|     is_focused ? focus : select; | ||||
|   auto focused = is_focused ? focus : select; | ||||
|  | ||||
|   // clang-format off | ||||
|   return | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| #include "ftxui/component/menu.hpp" | ||||
|  | ||||
| #include <algorithm> | ||||
| #include <iostream> | ||||
| #include <algorithm> | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| #include "ftxui/component/radiobox.hpp" | ||||
| #include <functional> | ||||
|  | ||||
| #include <algorithm> | ||||
| #include <functional> | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| @@ -41,7 +42,7 @@ bool RadioBox::OnEvent(Event event) { | ||||
|     return true; | ||||
|   } | ||||
|  | ||||
|   if (event == Event::Character(' ') || event==Event::Return) { | ||||
|   if (event == Event::Character(' ') || event == Event::Return) { | ||||
|     selected = focused; | ||||
|     on_change(); | ||||
|   } | ||||
|   | ||||
| @@ -3,18 +3,20 @@ | ||||
| #include <stdio.h> | ||||
| #include <termios.h> | ||||
| #include <unistd.h> | ||||
|  | ||||
| #include <algorithm> | ||||
| #include <csignal> | ||||
| #include <iostream> | ||||
| #include <stack> | ||||
| #include <thread> | ||||
|  | ||||
| #include "ftxui/component/component.hpp" | ||||
| #include "ftxui/screen/string.hpp" | ||||
| #include "ftxui/screen/terminal.hpp" | ||||
| #include <algorithm> | ||||
|  | ||||
| #if defined(__clang__) && defined (__APPLE__) | ||||
|     // Quick exit is missing in standard CLang headers | ||||
|     #define quick_exit(a) exit(a) | ||||
| #if defined(__clang__) && defined(__APPLE__) | ||||
|   // Quick exit is missing in standard CLang headers | ||||
|   #define quick_exit(a) exit(a) | ||||
| #endif | ||||
|  | ||||
| namespace ftxui { | ||||
| @@ -42,14 +44,12 @@ auto install_signal_handler = [](int sig, SignalHandler handler) { | ||||
|   on_exit_functions.push([&]() { std::signal(sig, old_signal_handler); }); | ||||
| }; | ||||
|  | ||||
| std::function<void()> on_resize = []{}; | ||||
| std::function<void()> on_resize = [] {}; | ||||
| void OnResize(int /* signal */) { | ||||
|   on_resize(); | ||||
| } | ||||
|  | ||||
| ScreenInteractive::ScreenInteractive(int dimx, | ||||
|                                      int dimy, | ||||
|                                      Dimension dimension) | ||||
| ScreenInteractive::ScreenInteractive(int dimx, int dimy, Dimension dimension) | ||||
|     : Screen(dimx, dimy), dimension_(dimension) {} | ||||
| ScreenInteractive::~ScreenInteractive() {} | ||||
|  | ||||
| @@ -176,8 +176,7 @@ void ScreenInteractive::Draw(Component* component) { | ||||
|   if (dimx != dimx_ || dimy != dimy_) { | ||||
|     dimx_ = dimx; | ||||
|     dimy_ = dimy; | ||||
|     pixels_ = std::vector<std::vector<Pixel>>( | ||||
|         dimy, std::vector<Pixel>(dimx)); | ||||
|     pixels_ = std::vector<std::vector<Pixel>>(dimy, std::vector<Pixel>(dimx)); | ||||
|     cursor_.x = dimx_ - 1; | ||||
|     cursor_.y = dimy_ - 1; | ||||
|   } | ||||
| @@ -196,7 +195,7 @@ void ScreenInteractive::Draw(Component* component) { | ||||
|     reset_cursor_position += "\x1B[" + std::to_string(dx) + "C"; | ||||
|   } | ||||
|   if (dy != 0) { | ||||
|     set_cursor_position +=  "\x1B[" + std::to_string(dy) + "A"; | ||||
|     set_cursor_position += "\x1B[" + std::to_string(dy) + "A"; | ||||
|     reset_cursor_position += "\x1B[" + std::to_string(dy) + "B"; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| #include "ftxui/component/toggle.hpp" | ||||
|  | ||||
| #include <algorithm> | ||||
|  | ||||
| namespace ftxui { | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| #include <algorithm> | ||||
|  | ||||
| #include "ftxui/dom/elements.hpp" | ||||
| #include "ftxui/dom/node.hpp" | ||||
|  | ||||
| #include <algorithm> | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| using namespace ftxui; | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| #include <algorithm> | ||||
|  | ||||
| #include "ftxui/dom/elements.hpp" | ||||
| #include "ftxui/dom/node.hpp" | ||||
|  | ||||
| #include <algorithm> | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| class DBox : public Node { | ||||
|   | ||||
| @@ -4,8 +4,6 @@ | ||||
| #include "ftxui/dom/node.hpp" | ||||
| #include "ftxui/util/autoreset.hpp" | ||||
|  | ||||
| #include <algorithm> | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| using namespace ftxui; | ||||
|   | ||||
| @@ -3,8 +3,6 @@ | ||||
| #include "ftxui/dom/elements.hpp" | ||||
| #include "ftxui/dom/node.hpp" | ||||
|  | ||||
| #include <algorithm> | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| class HBox : public Node { | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| #include <algorithm> | ||||
|  | ||||
| #include "ftxui/dom/elements.hpp" | ||||
| #include "ftxui/dom/node.hpp" | ||||
|  | ||||
| #include <algorithm> | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| class HFlow : public Node { | ||||
|   | ||||
| @@ -3,8 +3,6 @@ | ||||
| #include "ftxui/dom/elements.hpp" | ||||
| #include "ftxui/dom/node.hpp" | ||||
|  | ||||
| #include <algorithm> | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| class Size : public Node { | ||||
|   | ||||
| @@ -3,8 +3,6 @@ | ||||
| #include "ftxui/dom/elements.hpp" | ||||
| #include "ftxui/dom/node.hpp" | ||||
|  | ||||
| #include <algorithm> | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| class VBox : public Node { | ||||
|   | ||||
| @@ -7,7 +7,6 @@ | ||||
| #include "ftxui/screen/string.hpp" | ||||
| #include "ftxui/screen/terminal.hpp" | ||||
|  | ||||
|  | ||||
| namespace ftxui { | ||||
|  | ||||
| namespace { | ||||
|   | ||||
| @@ -3,12 +3,12 @@ | ||||
| #include <stdio.h> | ||||
|  | ||||
| #ifdef WIN32 | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #define NOMINMAX | ||||
| #include <Windows.h> | ||||
|   #define WIN32_LEAN_AND_MEAN | ||||
|   #define NOMINMAX | ||||
|   #include <Windows.h> | ||||
| #else | ||||
| #include <sys/ioctl.h> | ||||
| #include <unistd.h> | ||||
|   #include <sys/ioctl.h> | ||||
|   #include <unistd.h> | ||||
| #endif | ||||
|  | ||||
| #include <iostream> | ||||
|   | ||||
| @@ -59,9 +59,10 @@ | ||||
|  * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c | ||||
|  */ | ||||
|  | ||||
| #include "ftxui/screen/string.hpp" | ||||
| #include <wchar.h> | ||||
|  | ||||
| #include "ftxui/screen/string.hpp" | ||||
|  | ||||
| namespace { | ||||
| struct interval { | ||||
|   int first; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ArthurSonzogni
					ArthurSonzogni