*/ class Configuration { /** * Represents the available screens and their configuration * @var array */ protected $_screens; /** * Represents the available layouts * @var array */ protected $_layouts; /** * Initialize an empty config */ public function __construct() { $this->_screens = []; $this->_layouts = []; } /** * Load a configuration from a YAML file * * @param string $file * @return void */ public function load(string $file): void { $config = Yaml::parseFile($file); foreach ($config['screens'] as $screen_name => $screen) { $this->_screens[$screen_name] = app()->make(\App\Screen::class, [ 'outputs' => is_array($screen['output']) ? $screen['output'] : [$screen['output']] ]); } foreach ($config['layouts'] as $layout => $data) { $this->_layouts[$layout] = app()->make(\App\Layout::class, ['screens' => $data['screens'], 'links' => $data['links']]); } } /** * Fetch a specific screen * * @param string $screen_name * @return Screen */ public function getScreen(string $screen_name): Screen { return $this->_screens[$screen_name]; } /** * Fetch the primary screen * * @return Screen */ public function getPrimaryScreen(): Screen { return $this->getScreen($this->getPrimaryScreenName()); } /** * Fetch the name of the primary screen * * @return string */ public function getPrimaryScreenName(): string { foreach ($this->_screens as $name => $screen) { if ($screen->isPrimary()) { return $name; } } throw new \Exception("No primary screen found"); } /** * Fetch a specific layout * * @param string $layout * @return Layout */ public function getLayout(string $layout): Layout { return $this->_layouts[$layout]; } /** * Fetch all the layouts * * @return array */ public function getLayouts(): array { return $this->_layouts; } }