From 7ac39fc16417ca4b4d558930876eec0fd3973df0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Schro=CC=88der?= Date: Sun, 5 Jan 2014 12:56:47 +0100 Subject: [PATCH] actions menu improvements and fixes --- application/core/Admin/ActionsMenu.php | 324 ++++++++++++------------- 1 file changed, 154 insertions(+), 170 deletions(-) diff --git a/application/core/Admin/ActionsMenu.php b/application/core/Admin/ActionsMenu.php index 631c93be..7f9d4a6f 100644 --- a/application/core/Admin/ActionsMenu.php +++ b/application/core/Admin/ActionsMenu.php @@ -24,13 +24,13 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener { /** * Constants */ - const MLID_MENU = 'ActionsMenu.MLID'; - const SETTING_MENU_POSX = 'Menu Position: X'; - const SETTING_MENU_POSY = 'Menu Position: Y'; - const SETTING_MENU_ITEMSIZE = 'Menu Item Size'; - const ACTION_OPEN_ADMIN_MENU = 'ActionsMenu.OpenAdminMenu'; + const MLID_MENU = 'ActionsMenu.MLID'; + const SETTING_MENU_POSX = 'Menu Position: X'; + const SETTING_MENU_POSY = 'Menu Position: Y'; + const SETTING_MENU_ITEMSIZE = 'Menu Item Size'; + const ACTION_OPEN_ADMIN_MENU = 'ActionsMenu.OpenAdminMenu'; const ACTION_OPEN_PLAYER_MENU = 'ActionsMenu.OpenPlayerMenu'; - + /** * Private Properties */ @@ -46,62 +46,59 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener { */ public function __construct(ManiaControl $maniaControl) { $this->maniaControl = $maniaControl; - + // Init settings $this->maniaControl->settingManager->initSetting($this, self::SETTING_MENU_POSX, 156.); $this->maniaControl->settingManager->initSetting($this, self::SETTING_MENU_POSY, -37.); $this->maniaControl->settingManager->initSetting($this, self::SETTING_MENU_ITEMSIZE, 6.); - + // Register for callbacks $this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_ONINIT, $this, 'handleOnInit'); $this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERJOINED, $this, 'handlePlayerJoined'); - $this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_OPEN_ADMIN_MENU, $this, 'openAdminMenu'); - $this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_OPEN_PLAYER_MENU, $this, 'openPlayerMenu'); } /** * Add a new Menu Item * * @param Control $control - * @param bool $playerAction - * @param int $order + * @param bool $playerAction + * @param int $order */ - public function addMenuItem(Control $control, $playerAction = true, $order = 0, $description = '') { - if($playerAction) { + public function addMenuItem(Control $control, $playerAction = true, $order = 0, $description = null) { + if ($playerAction) { $this->addPlayerMenuItem($control, $order, $description); - } else { + } + else { $this->addAdminMenuItem($control, $order, $description); } - - $this->rebuildAndShowMenu(); } /** * Add a new Player Menu Item * * @param Control $control - * @param int $order + * @param int $order */ - public function addPlayerMenuItem(Control $control, $order = 0, $description = '') { - if(!isset($this->playerMenuItems[$order])) { + public function addPlayerMenuItem(Control $control, $order = 0, $description = null) { + if (!isset($this->playerMenuItems[$order])) { $this->playerMenuItems[$order] = array(); } - array_push($this->playerMenuItems[$order], $control, $description); - //TODO handle description + array_push($this->playerMenuItems[$order], array($control, $description)); + $this->rebuildAndShowMenu(); } /** * Add a new Admin Menu Item * * @param Control $control - * @param int $order + * @param int $order */ - public function addAdminMenuItem(Control $control, $order = 0, $description = '') { - if(!isset($this->adminMenuItems[$order])) { + public function addAdminMenuItem(Control $control, $order = 0, $description = null) { + if (!isset($this->adminMenuItems[$order])) { $this->adminMenuItems[$order] = array(); } - array_push($this->adminMenuItems[$order], $control, $description); - //TODO handle description + array_push($this->adminMenuItems[$order], array($control, $description)); + $this->rebuildAndShowMenu(); } /** @@ -109,14 +106,14 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener { * * @param array $callback */ - public function handleOnInit(array $callback) { //TODO render only once, but howtodo admin check then? - //$manialinkText = $this->buildMenuIconsManialink()->render()->saveXML(); + public function handleOnInit(array $callback) { + // TODO: Render only once $players = $this->maniaControl->playerManager->getPlayers(); - foreach($players as $player) { - $manialinkText = $this->buildMenuIconsManialink($player)->render()->saveXML(); + foreach ($players as $player) { + $manialink = $this->buildMenuIconsManialink($player); + $manialinkText = $manialink->render()->saveXML(); $this->maniaControl->manialinkManager->sendManialink($manialinkText, $player->login); } - $this->initCompleted = true; } @@ -124,12 +121,11 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener { * Build and show the menus to everyone (if a menu get made after the init) */ public function rebuildAndShowMenu() { - if($this->initCompleted) { - $players = $this->maniaControl->playerManager->getPlayers(); - foreach($players as $player) { - $manialinkText = $this->buildMenuIconsManialink($player)->render()->saveXML(); - $this->maniaControl->manialinkManager->sendManialink($manialinkText, $player->login); - } + if (!$this->initCompleted) return; + $players = $this->maniaControl->playerManager->getPlayers(); + foreach ($players as $player) { + $manialinkText = $this->buildMenuIconsManialink($player)->render()->saveXML(); + $this->maniaControl->manialinkManager->sendManialink($manialinkText, $player->login); } } @@ -139,179 +135,167 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener { * @param array $callback */ public function handlePlayerJoined(array $callback) { - $player = $callback[1]; + $player = $callback[1]; $manialinkText = $this->buildMenuIconsManialink($player)->render()->saveXML(); $this->maniaControl->manialinkManager->sendManialink($manialinkText, $player->login); } - /** - * Handle OpenAdminMenu Action - * - * @param array $callback - */ - public function openAdminMenu(array $callback, Player $player) { - } - - /** - * Handle OpenPlayerMenu Action - * - * @param array $callback - */ - public function openPlayerMenu(array $callback, Player $player) { - } - /** * Builds the Manialink * * @param Player $player * @return ManiaLink */ - private function buildMenuIconsManialink(Player $player) { //TODO Description Labels, close tooltip on click - $posX = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_POSX); - $posY = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_POSY); - $itemSize = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_ITEMSIZE); - $quadStyle = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadStyle(); - $quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadSubstyle(); + private function buildMenuIconsManialink(Player $player) { + // TODO: close popoutframe on click + $posX = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_POSX); + $posY = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_POSY); + $itemSize = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_ITEMSIZE); + $quadStyle = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadStyle(); + $quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadSubstyle(); $itemMarginFactorX = 1.3; $itemMarginFactorY = 1.2; - + $manialink = new ManiaLink(self::MLID_MENU); - - // Admin Menu Icon Frame - $frame = new Frame(); - $manialink->add($frame); - $frame->setPosition($posX, $posY); - - $backgroundQuad = new Quad(); - $frame->add($backgroundQuad); - $backgroundQuad->setSize($itemSize * $itemMarginFactorX, $itemSize * $itemMarginFactorY); - $backgroundQuad->setStyles($quadStyle, $quadSubstyle); - - - $iconFrame = new Frame(); - $frame->add($iconFrame); - - // Create script and features $script = new Script(); $manialink->setScript($script); - - $iconFrame->setSize($itemSize, $itemSize); - $itemQuad = new Quad_Icons64x64_1(); - $itemQuad->setSubStyle($itemQuad::SUBSTYLE_IconServers); - $itemQuad->setSize($itemSize, $itemSize); - $iconFrame->add($itemQuad); - - //Description Label - $descriptionFrame = new Frame(); - $manialink->add($descriptionFrame); - $descriptionFrame->setPosition($posX - count($this->adminMenuItems) * $itemSize * 1.15 - 6, $posY); - $descriptionFrame->setAlign(Control::RIGHT, Control::CENTER2); - - $descriptionLabel = new Label(); - $descriptionFrame->add($descriptionLabel); - $descriptionLabel->setAlign(Control::RIGHT, Control::TOP); - $descriptionLabel->setSize(40, 4); - $descriptionLabel->setTextSize(1.4); - $descriptionLabel->setVisible(true); - $descriptionLabel->setTextColor("FFF"); - - if($this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) { - //Admin Menu + + /* + * Admin Menu + */ + if ($this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) { + // Admin Menu Icon Frame + $iconFrame = new Frame(); + $manialink->add($iconFrame); + $iconFrame->setPosition($posX, $posY); + + $backgroundQuad = new Quad(); + $iconFrame->add($backgroundQuad); + $backgroundQuad->setSize($itemSize * $itemMarginFactorX, $itemSize * $itemMarginFactorY); + $backgroundQuad->setStyles($quadStyle, $quadSubstyle); + + $itemQuad = new Quad_Icons64x64_1(); + $iconFrame->add($itemQuad); + $itemQuad->setSubStyle($itemQuad::SUBSTYLE_IconServers); + $itemQuad->setSize($itemSize, $itemSize); + + // Admin Menu Description Label + $descriptionFrame = new Frame(); + $manialink->add($descriptionFrame); + $descriptionFrame->setPosition($posX - count($this->adminMenuItems) * $itemSize * 1.15 - 6, $posY); + + $descriptionLabel = new Label(); + $descriptionFrame->add($descriptionLabel); + $descriptionLabel->setAlign(Control::RIGHT, Control::TOP); + $descriptionLabel->setSize(40, 4); + $descriptionLabel->setTextSize(1.4); + $descriptionLabel->setTextColor('fff'); + + // Admin Menu $popoutFrame = new Frame(); $manialink->add($popoutFrame); $popoutFrame->setPosition($posX - $itemSize * 0.5, $posY); $popoutFrame->setHAlign(Control::RIGHT); $popoutFrame->setSize(4 * $itemSize * $itemMarginFactorX, $itemSize * $itemMarginFactorY); - - $quad = new Quad(); - $popoutFrame->add($quad); - $quad->setHAlign(Control::RIGHT); - $quad->setStyles($quadStyle, $quadSubstyle); - $quad->setSize(count($this->adminMenuItems) * $itemSize * 1.15 + 2, $itemSize * $itemMarginFactorY); - - $popoutFrame->add($quad); - + + $backgroundQuad = new Quad(); + $popoutFrame->add($backgroundQuad); + $backgroundQuad->setHAlign(Control::RIGHT); + $backgroundQuad->setStyles($quadStyle, $quadSubstyle); + $backgroundQuad->setSize(count($this->adminMenuItems) * $itemSize * 1.15 + 2, $itemSize * $itemMarginFactorY); + $script->addTooltip($itemQuad, $popoutFrame, Script::OPTION_TOOLTIP_STAYONCLICK); - + // Add items $x = -1; - foreach(array_reverse($this->adminMenuItems) as $menuItems) { - $menuItem = $menuItems[0]; - /** @var Quad $menuItem */ - $menuItem->setSize($itemSize, $itemSize); - $popoutFrame->add($menuItem); - $menuItem->setX($x); - $menuItem->setHAlign(Control::RIGHT); - $x -= $itemSize * 1.05; - - $script->addTooltip($menuItem, $descriptionLabel, array(Script::OPTION_TOOLTIP_TEXT => '$s' . $menuItems[1])); + foreach ($this->adminMenuItems as $menuItems) { + foreach ($menuItems as $menuItem) { + $menuQuad = $menuItem[0]; + /** + * + * @var Quad $menuQuad + */ + $popoutFrame->add($menuQuad); + $menuQuad->setSize($itemSize, $itemSize); + $menuQuad->setX($x); + $menuQuad->setHAlign(Control::RIGHT); + $x -= $itemSize * 1.05; + + if ($menuItem[1]) { + $description = '$s' . $menuItem[1]; + $script->addTooltip($menuQuad, $descriptionLabel, array(Script::OPTION_TOOLTIP_TEXT => $description)); + } + } } } - - // Player Menu Descrition Frame / LabelLabel - $descriptionFrame = new Frame(); //TODO not working yet - $manialink->add($descriptionFrame); - - $descriptionFrame->setPosition($posX - count($this->playerMenuItems) * $itemSize * 1.15 - 6, $posY - $itemSize * $itemMarginFactorY); - $descriptionFrame->setAlign(Control::RIGHT, Control::CENTER2); - - $descriptionLabel = clone $descriptionLabel; - $descriptionFrame->add($descriptionLabel); - - - + + /* + * Player Menu + */ // Player Menu Icon Frame - $frame = new Frame(); - $manialink->add($frame); - $frame->setPosition($posX, $posY - $itemSize * $itemMarginFactorY); - + $iconFrame = new Frame(); + $manialink->add($iconFrame); + $iconFrame->setPosition($posX, $posY - $itemSize * $itemMarginFactorY); + $backgroundQuad = new Quad(); - $frame->add($backgroundQuad); + $iconFrame->add($backgroundQuad); $backgroundQuad->setSize($itemSize * $itemMarginFactorX, $itemSize * $itemMarginFactorY); $backgroundQuad->setStyles($quadStyle, $quadSubstyle); - - $iconFrame = new Frame(); - $frame->add($iconFrame); - - $iconFrame->setSize($itemSize, $itemSize); + $itemQuad = new Quad_Icons64x64_1(); + $iconFrame->add($itemQuad); $itemQuad->setSubStyle($itemQuad::SUBSTYLE_IconPlayers); $itemQuad->setSize($itemSize, $itemSize); - $iconFrame->add($itemQuad); - - - //Player Menu + + // Player Menu Description Frame + $descriptionFrame = new Frame(); + $manialink->add($descriptionFrame); + $descriptionFrame->setPosition($posX - count($this->playerMenuItems) * $itemSize * 1.15 - 6, $posY - $itemSize * $itemMarginFactorY); + + $descriptionLabel = new Label(); + $descriptionFrame->add($descriptionLabel); + $descriptionLabel->setAlign(Control::RIGHT, Control::TOP); + $descriptionLabel->setSize(40, 4); + $descriptionLabel->setTextSize(1.4); + $descriptionLabel->setTextColor('fff'); + + // Player Menu $popoutFrame = new Frame(); $manialink->add($popoutFrame); $popoutFrame->setPosition($posX - $itemSize * 0.5, $posY - $itemSize * $itemMarginFactorY); $popoutFrame->setHAlign(Control::RIGHT); $popoutFrame->setSize(4 * $itemSize * $itemMarginFactorX, $itemSize * $itemMarginFactorY); - - $quad = new Quad(); - $popoutFrame->add($quad); - $quad->setHAlign(Control::RIGHT); - $quad->setStyles($quadStyle, $quadSubstyle); - $quad->setSize(count($this->playerMenuItems) * $itemSize * 1.15 + 2, $itemSize * $itemMarginFactorY); - - - $popoutFrame->add($quad); - + + $backgroundQuad = new Quad(); + $popoutFrame->add($backgroundQuad); + $backgroundQuad->setHAlign(Control::RIGHT); + $backgroundQuad->setStyles($quadStyle, $quadSubstyle); + $backgroundQuad->setSize(count($this->playerMenuItems) * $itemSize * 1.15 + 2, $itemSize * $itemMarginFactorY); + $script->addTooltip($itemQuad, $popoutFrame, Script::OPTION_TOOLTIP_STAYONCLICK); - + // Add items $x = -1; - foreach(array_reverse($this->playerMenuItems) as $menuItems) { - $menuItem = $menuItems[0]; - /** @var Quad $menuItem */ - $menuItem->setSize($itemSize, $itemSize); - $popoutFrame->add($menuItem); - $menuItem->setX($x); - $menuItem->setHAlign(Control::RIGHT); - $x -= $itemSize * 1.05; - - $script->addTooltip($menuItem, $descriptionLabel, array(Script::OPTION_TOOLTIP_TEXT => '$s' . $menuItems[1])); + foreach ($this->playerMenuItems as $menuItems) { + foreach ($menuItems as $menuItem) { + $menuQuad = $menuItem[0]; + /** + * + * @var Quad $menuQuad + */ + $popoutFrame->add($menuQuad); + $menuQuad->setSize($itemSize, $itemSize); + $menuQuad->setX($x); + $menuQuad->setHAlign(Control::RIGHT); + $x -= $itemSize * 1.05; + + if ($menuItem[1]) { + $description = '$s' . $menuItem[1]; + $script->addTooltip($menuQuad, $descriptionLabel, array(Script::OPTION_TOOLTIP_TEXT => $description)); + } + } } - + return $manialink; } }