mirror of
				https://github.com/ArthurSonzogni/FTXUI.git
				synced 2025-11-04 13:38:14 +08:00 
			
		
		
		
	Update example package_manager.
This commit is contained in:
		@@ -21,24 +21,23 @@ int main(int argc, const char *argv[])
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  std::list<Task> remaining_tasks = {
 | 
			
		||||
    {L"contact server       "  , 10 , 0 , 6*25} ,
 | 
			
		||||
    {L"download index.html  "  , 10 , 0 , 9*25} ,
 | 
			
		||||
    {L"download script.js   "  , 1 , 0 , 3*25} ,
 | 
			
		||||
    {L"download style.js    "  , 1 , 0 , 4*25} ,
 | 
			
		||||
    {L"download image.png   "  , 1 , 0 , 5*25}  ,
 | 
			
		||||
    {L"download big_1.png   "  , 1 , 0 , 30*25}  ,
 | 
			
		||||
    {L"download icon_1.png  "  , 1 , 0 , 7*25}  ,
 | 
			
		||||
    {L"download icon_2.png  "  , 1 , 0 , 8*25}  ,
 | 
			
		||||
    {L"download big_2.png   "  , 1 , 0 , 30*25}  ,
 | 
			
		||||
    {L"download small_1.png "  , 1 , 0 , 10*25}  ,
 | 
			
		||||
    {L"download small_2.png "  , 1 , 0 , 11*25}  ,
 | 
			
		||||
    {L"download small_3.png "  , 1 , 0 , 12*25}  ,
 | 
			
		||||
      {L"contact server       ", 10, 0, 6 * 25},
 | 
			
		||||
      {L"download index.html  ", 10, 0, 9 * 25},
 | 
			
		||||
      {L"download script.js   ", 1, 0, 3 * 25},
 | 
			
		||||
      {L"download style.js    ", 1, 0, 4 * 25},
 | 
			
		||||
      {L"download image.png   ", 1, 0, 5 * 25},
 | 
			
		||||
      {L"download big_1.png   ", 1, 0, 30 * 25},
 | 
			
		||||
      {L"download icon_1.png  ", 1, 0, 7 * 25},
 | 
			
		||||
      {L"download icon_2.png  ", 1, 0, 8 * 25},
 | 
			
		||||
      {L"download big_2.png   ", 1, 0, 30 * 25},
 | 
			
		||||
      {L"download small_1.png ", 1, 0, 10 * 25},
 | 
			
		||||
      {L"download small_2.png ", 1, 0, 11 * 25},
 | 
			
		||||
      {L"download small_3.png ", 1, 0, 12 * 25},
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  std::list<Task> displayed_task;
 | 
			
		||||
 | 
			
		||||
  int remaining_threads = 12;
 | 
			
		||||
  std::string reset_position;
 | 
			
		||||
 | 
			
		||||
  int nb_queued = remaining_tasks.size();
 | 
			
		||||
  int nb_active = 0;
 | 
			
		||||
@@ -50,55 +49,50 @@ int main(int argc, const char *argv[])
 | 
			
		||||
      t = L" " + t;
 | 
			
		||||
    return text(t);
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  for(;;) {
 | 
			
		||||
    std::vector<Element> entries;
 | 
			
		||||
    for(auto& task : displayed_task) {
 | 
			
		||||
      auto style = (task.downloaded == task.size) ? dim : bold;
 | 
			
		||||
      entries.push_back(
 | 
			
		||||
        hbox(
 | 
			
		||||
          text(task.name) | style,
 | 
			
		||||
          separator(),
 | 
			
		||||
          to_text(task.downloaded),
 | 
			
		||||
          text(L"/"),
 | 
			
		||||
          to_text(task.size),
 | 
			
		||||
          separator(),
 | 
			
		||||
          gauge(task.downloaded / float(task.size))
 | 
			
		||||
 | 
			
		||||
  auto renderTask = [&](const Task& task) {
 | 
			
		||||
    auto style = (task.downloaded == task.size) ? dim : bold;
 | 
			
		||||
    return
 | 
			
		||||
      hbox(
 | 
			
		||||
        text(task.name) | style,
 | 
			
		||||
        separator(),
 | 
			
		||||
        to_text(task.downloaded),
 | 
			
		||||
        text(L"/"),
 | 
			
		||||
        to_text(task.size),
 | 
			
		||||
        separator(),
 | 
			
		||||
        gauge(task.downloaded / float(task.size))
 | 
			
		||||
      );
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  auto renderSummary = [&]() {
 | 
			
		||||
    return
 | 
			
		||||
      window(text(L" Summary "),
 | 
			
		||||
        vbox(
 | 
			
		||||
          hbox(text(L"- done:   "), to_text(nb_done) | bold) | color(Color::Green),
 | 
			
		||||
          hbox(text(L"- active: "), to_text(nb_active) | bold ) | color(Color::RedLight),
 | 
			
		||||
          hbox(text(L"- queue:  "), to_text(nb_queued) | bold) | color(Color::Red)
 | 
			
		||||
        )
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
    auto document =
 | 
			
		||||
  auto render = [&](){
 | 
			
		||||
    std::vector<Element> entries;
 | 
			
		||||
    for(auto& task : displayed_task)
 | 
			
		||||
      entries.push_back(renderTask(task));
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
      vbox(
 | 
			
		||||
        // List of tasks.
 | 
			
		||||
        window(text(L" Task "),
 | 
			
		||||
          vbox(std::move(entries))
 | 
			
		||||
        ),
 | 
			
		||||
        hbox(
 | 
			
		||||
          window(text(L" Summary "),
 | 
			
		||||
            vbox(
 | 
			
		||||
              hbox(text(L"- done:   "), to_text(nb_done) | bold) | color(Color::Green),
 | 
			
		||||
              hbox(text(L"- active: "), to_text(nb_active) | bold ) | color(Color::RedLight),
 | 
			
		||||
              hbox(text(L"- queue:  "), to_text(nb_queued) | bold) | color(Color::Red)
 | 
			
		||||
            )
 | 
			
		||||
          )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        // Summary.
 | 
			
		||||
        hbox(renderSummary(), filler())
 | 
			
		||||
      );
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
    // Draw.
 | 
			
		||||
    //if (step != 0) screen.Clear();
 | 
			
		||||
    auto screen = ftxui::Screen::TerminalOutput(document);
 | 
			
		||||
    Render(screen, document.get());
 | 
			
		||||
    std::cout << reset_position << screen.ToString() << std::flush;
 | 
			
		||||
    reset_position = screen.ResetPosition();
 | 
			
		||||
 | 
			
		||||
    // Simulate time.
 | 
			
		||||
    using namespace std::chrono_literals;
 | 
			
		||||
    std::this_thread::sleep_for(0.01s);
 | 
			
		||||
 | 
			
		||||
    if (nb_active + nb_queued == 0)
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    // Update the model.
 | 
			
		||||
  auto updateModel = [&](){
 | 
			
		||||
    for(auto& task : displayed_task) {
 | 
			
		||||
      if (task.downloaded != task.size) {
 | 
			
		||||
        task.downloaded++;
 | 
			
		||||
@@ -118,6 +112,28 @@ int main(int argc, const char *argv[])
 | 
			
		||||
      nb_queued--;
 | 
			
		||||
      nb_active++;
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  std::string reset_position;
 | 
			
		||||
  for(;;) {
 | 
			
		||||
 | 
			
		||||
    // Draw.
 | 
			
		||||
    auto document = render();
 | 
			
		||||
    auto screen = ftxui::Screen::TerminalOutput(document);
 | 
			
		||||
    Render(screen, document.get());
 | 
			
		||||
    std::cout << reset_position << screen.ToString() << std::flush;
 | 
			
		||||
    reset_position = screen.ResetPosition();
 | 
			
		||||
 | 
			
		||||
    // Simulate time.
 | 
			
		||||
    using namespace std::chrono_literals;
 | 
			
		||||
    std::this_thread::sleep_for(0.01s);
 | 
			
		||||
 | 
			
		||||
    // Exit
 | 
			
		||||
    if (nb_active + nb_queued == 0)
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    // Update the model for the next frame.
 | 
			
		||||
    updateModel();
 | 
			
		||||
  }
 | 
			
		||||
  std::cout << std::endl;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user