From c0720190479150764b24d30a9d560bf6aed6e3d8 Mon Sep 17 00:00:00 2001 From: steeffeen Date: Mon, 30 Jun 2014 00:57:29 +0200 Subject: [PATCH] maps browser manialink --- application/core/Maps/DirectoryBrowser.php | 93 ++++++++++++++++++++-- 1 file changed, 85 insertions(+), 8 deletions(-) diff --git a/application/core/Maps/DirectoryBrowser.php b/application/core/Maps/DirectoryBrowser.php index 0ef8e1e2..cecae2c0 100644 --- a/application/core/Maps/DirectoryBrowser.php +++ b/application/core/Maps/DirectoryBrowser.php @@ -2,7 +2,12 @@ namespace ManiaControl\Maps; +use FML\Controls\Frame; +use FML\Controls\Labels\Label_Button; +use FML\Controls\Labels\Label_Text; +use FML\Controls\Quads\Quad_BgsPlayerCard; use FML\ManiaLink; +use FML\Script\Features\Paging; use ManiaControl\ManiaControl; use ManiaControl\Manialinks\ManialinkManager; use ManiaControl\Manialinks\ManialinkPageAnswerListener; @@ -19,8 +24,10 @@ class DirectoryBrowser implements ManialinkPageAnswerListener { /* * Constants */ - const ACTION_SHOW = 'Maps.DirectoryBrowser.Show'; - const WIDGET_NAME = 'Maps.DirectoryBrowser.Widget'; + const ACTION_SHOW = 'Maps.DirectoryBrowser.Show'; + const ACTION_ADD_FILE = 'Maps.DirectoryBrowser.AddFile.'; + const ACTION_ERASE_FILE = 'Maps.DirectoryBrowser.EraseFile'; + const WIDGET_NAME = 'Maps.DirectoryBrowser.Widget'; /* * Private properties @@ -40,7 +47,7 @@ class DirectoryBrowser implements ManialinkPageAnswerListener { } /** - * Handle Show Page Answer + * Handle 'Show' Page Action * * @param array $actionCallback * @param Player $player @@ -56,8 +63,76 @@ class DirectoryBrowser implements ManialinkPageAnswerListener { */ public function showManiaLink(Player $player) { $maniaLink = new ManiaLink(ManialinkManager::MAIN_MLID); + $script = $maniaLink->getScript(); + $paging = new Paging(); + $script->addFeature($paging); + $frame = $this->maniaControl->manialinkManager->styleManager->getDefaultListFrame($script, $paging); + $maniaLink->add($frame); - $this->maniaControl->manialinkManager->sendManialink($maniaLink, $player); + $mapFiles = $this->getFilteredMapFiles(); + + $width = $this->maniaControl->manialinkManager->styleManager->getListWidgetsWidth(); + $height = $this->maniaControl->manialinkManager->styleManager->getListWidgetsHeight(); + $index = 0; + $posY = $height / 2 - 10; + $pageFrame = null; + + foreach ($mapFiles as $fileName) { + if ($index % 15 === 0) { + // New Page + $pageFrame = new Frame(); + $frame->add($pageFrame); + $posY = $height / 2 - 10; + $paging->addPage($pageFrame); + } + + // Map Frame + $mapFrame = new Frame(); + $pageFrame->add($mapFrame); + $mapFrame->setPosition(0, $posY, 0.1); + + if ($index % 2 !== 0) { + // Striped background line + $lineQuad = new Quad_BgsPlayerCard(); + $mapFrame->add($lineQuad); + $lineQuad->setSize($width, 4); + $lineQuad->setSubStyle($lineQuad::SUBSTYLE_BgPlayerCardBig); + $lineQuad->setZ(0.001); + } + + // File name Label + $nameLabel = new Label_Text(); + $mapFrame->add($nameLabel); + $nameLabel->setX($width * -0.2); + $nameLabel->setText($fileName); + + if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_ADD_MAP)) { + // Add file button + $addButton = new Label_Button(); + $mapFrame->add($addButton); + $addButton->setPosition($width / 2 - 9, 0, 0.2); + $addButton->setSize(3, 3); + $addButton->setTextSize(2); + $addButton->setText('Add'); + $addButton->setAction(self::ACTION_ADD_FILE); + } + + if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_REMOVE_MAP)) { + // Erase file button + $eraseButton = new Label_Button(); + $mapFrame->add($eraseButton); + $eraseButton->setPosition($width / 2 - 9, 0, 0.2); + $eraseButton->setSize(3, 3); + $eraseButton->setTextSize(2); + $eraseButton->setText('Add'); + $eraseButton->setAction(self::ACTION_ERASE_FILE); + } + + $posY -= 4; + $index++; + } + + $this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, self::WIDGET_NAME); } /** @@ -101,16 +176,18 @@ class DirectoryBrowser implements ManialinkPageAnswerListener { $mapFiles = array(); $dirFiles = scandir($directory); foreach ($dirFiles as $fileName) { - var_dump($fileName); - if (is_dir($fileName)) { - $subDirectory = $directory . $fileName . DIRECTORY_SEPARATOR; + if (substr($fileName, 0, 1) === '.') { + continue; + } + $fullFileName = $directory . $fileName; + if (is_dir($fullFileName)) { + $subDirectory = $fullFileName . DIRECTORY_SEPARATOR; $subMapFiles = $this->scanMapFiles($subDirectory); if (is_array($subMapFiles)) { $mapFiles = array_merge($mapFiles, $subMapFiles); } } else { if ($this->isMapFileName($fileName)) { - $fullFileName = $directory . $fileName; array_push($mapFiles, $fullFileName); } }