#include "LEDVideoWall.h" #include "cli.hpp" #include LEDVideoWall::~LEDVideoWall() { } LEDVideoWall* LEDVideoWall::Freeform(mm panel_width, mm panel_height, mm wall_max_width, mm wall_max_height) { unsigned int columns = wall_max_width / panel_width; unsigned int rows = wall_max_height / panel_height; return new LEDVideoWall( columns * panel_width, rows * panel_height, columns, rows); } LEDVideoWall* LEDVideoWall::Aspect(mm panel_width, mm panel_height, unsigned int aspect_width, unsigned int aspect_height) { return new LEDVideoWall( aspect_width * panel_width, aspect_height * panel_height, aspect_width, aspect_height); } LEDVideoWall::LEDVideoWall( mm width, mm height, unsigned int columns_of_panels, unsigned int rows_of_panels) : Screen(width, height), columns_of_panels(columns_of_panels), rows_of_panels(rows_of_panels) { } enum class LEDVideoWallType { Freeform = 0, Aspect }; LEDVideoWall* LEDVideoWall::fromCommandLine() { mm ipanel_width = 0, ipanel_height = 0; cli::scanTwoValues( "%dx%d", ipanel_width, ipanel_height, "Enter panel size (in the format 'WIDTHxHEIGHT'): ", "Invalid size, try again!"); unsigned int itype = 2; cli::readUserInputMax( itype, (unsigned int)2, "Select an LED video wall type [0 for Freeform, 1 for Aspect]: ", "Invalid type, try again!"); LEDVideoWallType type = static_cast(itype); switch (type) { case LEDVideoWallType::Freeform: { mm iwall_max_width = 0, iwall_max_height = 0; cli::scanTwoValues( "%dx%d", iwall_max_width, iwall_max_height, "Enter singe wall size (in the format 'WIDTHxHEIGHT'): ", "Invalid size, try again!"); return LEDVideoWall::Freeform(ipanel_width, ipanel_height, iwall_max_width, iwall_max_height); }; case LEDVideoWallType::Aspect: { mm i_width = 0, i_height = 0; cli::scanTwoValues( "%d:%d", i_width, i_height, "Enter aspect ratio (in the format 'width:height'): ", "Invalid input, try again!"); return LEDVideoWall::Aspect(ipanel_width, ipanel_height, i_width, i_height); }; } throw std::logic_error("Implementation error: didn't handle all types of LED video walls!"); } std::string LEDVideoWall::extraOutput() const { std::ostringstream output; output << " (" << this->columns_of_panels << " columns by " << this->rows_of_panels << " rows of tiles)"; return output.str(); }