From ba0f417f5977fbc9955de2a50e06673708d1242f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Schro=CC=88der?= Date: Fri, 9 May 2014 20:11:48 +0200 Subject: [PATCH] improved plugin menu use player cache for selected setting class --- application/core/ManiaControl.php | 1 + application/core/Players/Player.php | 30 +++ application/core/Plugins/PluginMenu.php | 263 +++++++++++------------- 3 files changed, 155 insertions(+), 139 deletions(-) diff --git a/application/core/ManiaControl.php b/application/core/ManiaControl.php index f93c92be..eaa23742 100644 --- a/application/core/ManiaControl.php +++ b/application/core/ManiaControl.php @@ -61,6 +61,7 @@ class ManiaControl implements CommandListener, TimerListener { public $authenticationManager = null; public $callbackManager = null; public $chat = null; + /** @var \SimpleXMLElement $config */ public $config = null; public $configurator = null; /** diff --git a/application/core/Players/Player.php b/application/core/Players/Player.php index bd4f581e..385f9755 100644 --- a/application/core/Players/Player.php +++ b/application/core/Players/Player.php @@ -244,10 +244,40 @@ class Player { $this->currentTargetId = intval($spectatorStatus / 10000); } + /** + * Get the Cache with the given Name + * + * @param string $cacheName + * @return mixed + */ + public function getCache($cacheName) { + if (isset($this->cache[$cacheName])) { + return $this->cache[$cacheName]; + } + return null; + } + + /** + * Set the Cache Data for the given Name + * + * @param string $cacheName + * @param mixed $data + */ + public function setCache($cacheName, $data) { + $this->cache[$cacheName] = data; + } + /** * Clear the Player's Temporary Data */ public function clearCache() { $this->cache = array(); } + + /** + * Var_Dump the Player + */ + public function dump() { + var_dump(json_decode(json_encode($this))); + } } diff --git a/application/core/Plugins/PluginMenu.php b/application/core/Plugins/PluginMenu.php index dc635c2a..fa26c9a5 100644 --- a/application/core/Plugins/PluginMenu.php +++ b/application/core/Plugins/PluginMenu.php @@ -17,10 +17,10 @@ use ManiaControl\Admin\AuthenticationManager; use ManiaControl\Callbacks\CallbackListener; use ManiaControl\Callbacks\CallbackManager; use ManiaControl\Configurators\ConfiguratorMenu; -use ManiaControl\Formatter; use ManiaControl\ManiaControl; use ManiaControl\Manialinks\ManialinkPageAnswerListener; use ManiaControl\Players\Player; +use ManiaControl\Settings\SettingManager; /** * Configurator for enabling and disabling Plugins @@ -42,12 +42,12 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns const ACTION_PREFIX_UPDATEPLUGIN = 'PluginMenu.Update.'; const ACTION_UPDATEPLUGINS = 'PluginMenu.Update.All'; const SETTING_PERMISSION_CHANGE_PLUGIN_SETTINGS = 'Change Plugin Settings'; + const CACHE_SETTING_CLASS = 'PluginMenuCache.SettingClass'; /* * Private Properties */ private $maniaControl = null; - private $settingsClass = ''; //TODO needs to be improved /** * Create a new plugin menu instance @@ -66,8 +66,8 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns * Returns Back to the Plugins */ public function backToPlugins($callback, Player $player) { - $this->settingsClass = ''; //TODO specify player - $menuId = $this->maniaControl->configurator->getMenuId($this->getTitle()); + unset($player->cache[self::CACHE_SETTING_CLASS]); + $menuId = $this->maniaControl->configurator->getMenuId($this->getTitle()); $this->maniaControl->configurator->reopenMenu($player, $menuId); } @@ -89,10 +89,9 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns $pluginClasses = $this->maniaControl->pluginManager->getPluginClasses(); // Config - $pagerSize = 9.; - $entryHeight = 5.; - $labelTextSize = 2; - $pageMaxCount = 10; + $pagerSize = 9.; + $entryHeight = 5.; + $pageMaxCount = 10; // Pagers $pagerPrev = new Quad_Icons64x64_1(); @@ -119,128 +118,14 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns $paging->setLabel($pageCountLabel); - //Show Settings Menu - if ($this->settingsClass != '') { //TODO improve - /** @var ManiaControl/SettingManager $this->maniaControl->settingManager */ - $settings = $this->maniaControl->settingManager->getSettingsByClass($this->settingsClass); - $pageFrames = array(); - $pageSettingsMaxCount = 12; - $y = 0; - $index = 1; - $settingHeight = 5.; - foreach ($settings as $setting) { - if (!isset($pageFrame)) { - $pageFrame = new Frame(); - $frame->add($pageFrame); - if (!empty($pageFrames)) { - $pageFrame->setVisible(false); - } - array_push($pageFrames, $pageFrame); - $y = $height * 0.41; - $paging->addPage($pageFrame); - } - - $settingFrame = new Frame(); - $pageFrame->add($settingFrame); - $settingFrame->setY($y); - - if ($index == 1) { - //Headline Label - $headLabel = new Label_Text(); - $settingFrame->add($headLabel); - $headLabel->setHAlign(Control::LEFT); - $headLabel->setX($width * -0.46); - $headLabel->setSize($width * 0.6, $settingHeight); - $headLabel->setStyle($headLabel::STYLE_TextCardSmall); - $headLabel->setTextSize($labelTextSize); - $headLabel->setText($setting->class); - $headLabel->setTextColor("F00"); - - $y -= $settingHeight; - - if ($index % $pageMaxCount == $pageMaxCount - 1) { - $pageFrame = new Frame(); - $frame->add($pageFrame); - if (!empty($pageFrames)) { - $pageFrame->setVisible(false); - } - array_push($pageFrames, $pageFrame); - $y = $height * 0.41; - $paging->addPage($pageFrame); - } - } - - $settingFrame = new Frame(); - $pageFrame->add($settingFrame); - $settingFrame->setY($y); - //Headline Label finished - - $nameLabel = new Label_Text(); - $settingFrame->add($nameLabel); - $nameLabel->setHAlign(Control::LEFT); - $nameLabel->setX($width * -0.46); - $nameLabel->setSize($width * 0.6, $settingHeight); - $nameLabel->setStyle($nameLabel::STYLE_TextCardSmall); - $nameLabel->setTextSize($labelTextSize); - $nameLabel->setText($setting->setting); - $nameLabel->setTextColor("FFF"); - - $substyle = ''; - - $entry = new Entry(); - $settingFrame->add($entry); - $entry->setStyle(Label_Text::STYLE_TextValueSmall); - $entry->setHAlign(Control::CENTER); - $entry->setX($width / 2 * 0.65); - $entry->setTextSize(1); - $entry->setSize($width * 0.3, $settingHeight * 0.9); - $entry->setName(self::ACTION_PREFIX_SETTING . '.' . $setting->index); - $entry->setDefault($setting->value); - - - if ($setting->type == "bool") { - if ($setting->value == "0") { - $substyle = Quad_Icons64x64_1::SUBSTYLE_LvlRed; - } else if ($setting->value == "1") { - $substyle = Quad_Icons64x64_1::SUBSTYLE_LvlGreen; - } - - $quad = new Quad_Icons64x64_1(); - $settingFrame->add($quad); - $quad->setX($width / 2 * 0.6); - $quad->setZ(-0.01); - $quad->setSubStyle($substyle); - $quad->setSize(4, 4); - $quad->setHAlign(Control::CENTER2); - $quad->setAction(self::ACTION_SETTING_BOOL . $setting->index); - $entry->setVisible(false); - } - - $y -= $settingHeight; - - if ($index % $pageSettingsMaxCount == $pageSettingsMaxCount - 1) { - unset($pageFrame); - } - - $index++; - } - - $quad = new Label_Button(); - $frame->add($quad); - $quad->setStyle($quad::STYLE_CardMain_Quit); - $quad->setHAlign(Control::LEFT); - $quad->setScale(0.75); - $quad->setText("Back"); - $quad->setPosition(-$width / 2 + 7, -$height / 2 + 7); - $quad->setAction(self::ACTION_BACK_TO_PLUGINS); - - return $frame; + $settingClass = $player->getCache(self::CACHE_SETTING_CLASS); + if ($settingClass) { + // Show Settings Menu + return $this->getPluginSettingsMenu($frame, $width, $height, $paging, $player, $settingClass); } - - //Display normal Plugin List + // Display normal Plugin List // Plugin pages - $pageFrames = array(); $y = 0.; $pluginUpdates = $this->maniaControl->updateManager->pluginUpdateManager->getPluginsUpdates(); @@ -252,14 +137,9 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns foreach ($pluginClasses as $index => $pluginClass) { /** @var Plugin $pluginClass */ - if (!isset($pageFrame)) { + if ($index % $pageMaxCount === 0) { $pageFrame = new Frame(); $frame->add($pageFrame); - if (!empty($pageFrames)) { - $pageFrame->setVisible(false); - } - - array_push($pageFrames, $pageFrame); $paging->addPage($pageFrame); $y = $height * 0.41; } @@ -286,7 +166,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns $nameLabel->setX($width * -0.4); $nameLabel->setSize($width * 0.5, $entryHeight); $nameLabel->setStyle($nameLabel::STYLE_TextCardSmall); - $nameLabel->setTextSize($labelTextSize); + $nameLabel->setTextSize(2); $nameLabel->setText($pluginClass::getName()); $descriptionLabel = new Label(); @@ -337,9 +217,6 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns } $y -= $entryHeight; - if ($index % $pageMaxCount == $pageMaxCount - 1) { - unset($pageFrame); - } } if ($pluginUpdates != false) { @@ -358,6 +235,114 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns return $frame; } + /** + * Get the Frame with the Plugin Settings + * + * @param Frame $frame + * @param float $width + * @param float $height + * @param Paging $paging + * @param Player $player + * @param string $settingClass + * @return Frame + */ + private function getPluginSettingsMenu(Frame $frame, $width, $height, Paging $paging, Player $player, $settingClass) { + $settings = $this->maniaControl->settingManager->getSettingsByClass($settingClass); + + $pageSettingsMaxCount = 12; + $y = 0; + $index = 0; + $settingHeight = 5.; + foreach ($settings as $setting) { + if ($index % $pageSettingsMaxCount === 0) { + $pageFrame = new Frame(); + $frame->add($pageFrame); + $paging->addPage($pageFrame); + $y = $height * 0.41; + } + + $settingFrame = new Frame(); + $pageFrame->add($settingFrame); + $settingFrame->setY($y); + + if ($index === 0) { + //Headline Label + $headLabel = new Label_Text(); + $settingFrame->add($headLabel); + $headLabel->setHAlign(Control::LEFT); + $headLabel->setX($width * -0.46); + $headLabel->setSize($width * 0.6, $settingHeight); + $headLabel->setStyle($headLabel::STYLE_TextCardSmall); + $headLabel->setTextSize(2); + $headLabel->setText($setting->class); + $headLabel->setTextColor("F00"); + + $y -= $settingHeight; + } + + $settingFrame = new Frame(); + $pageFrame->add($settingFrame); + $settingFrame->setY($y); + // Headline Label finished + + $nameLabel = new Label_Text(); + $settingFrame->add($nameLabel); + $nameLabel->setHAlign(Control::LEFT); + $nameLabel->setX($width * -0.46); + $nameLabel->setSize($width * 0.6, $settingHeight); + $nameLabel->setStyle($nameLabel::STYLE_TextCardSmall); + $nameLabel->setTextSize(2); + $nameLabel->setText($setting->setting); + $nameLabel->setTextColor("FFF"); + + $substyle = ''; + + $entry = new Entry(); + $settingFrame->add($entry); + $entry->setStyle(Label_Text::STYLE_TextValueSmall); + $entry->setHAlign(Control::CENTER); + $entry->setX($width / 2 * 0.65); + $entry->setTextSize(1); + $entry->setSize($width * 0.3, $settingHeight * 0.9); + $entry->setName(self::ACTION_PREFIX_SETTING . '.' . $setting->index); + $entry->setDefault($setting->value); + + + if ($setting->type === SettingManager::TYPE_BOOL) { + if ($setting->value == "0") { + $substyle = Quad_Icons64x64_1::SUBSTYLE_LvlRed; + } else if ($setting->value == "1") { + $substyle = Quad_Icons64x64_1::SUBSTYLE_LvlGreen; + } + + $quad = new Quad_Icons64x64_1(); + $settingFrame->add($quad); + $quad->setX($width / 2 * 0.6); + $quad->setZ(-0.01); + $quad->setSubStyle($substyle); + $quad->setSize(4, 4); + $quad->setHAlign(Control::CENTER2); + $quad->setAction(self::ACTION_SETTING_BOOL . $setting->index); + $entry->setVisible(false); + } + + $y -= $settingHeight; + + $index++; + } + + $quad = new Label_Button(); + $frame->add($quad); + $quad->setStyle($quad::STYLE_CardMain_Quit); + $quad->setHAlign(Control::LEFT); + $quad->setScale(0.75); + $quad->setText("Back"); + $quad->setPosition(-$width / 2 + 7, -$height / 2 + 7); + $quad->setAction(self::ACTION_BACK_TO_PLUGINS); + + return $frame; + } + /** * Handle PlayerManialinkPageAnswer callback * @@ -401,8 +386,8 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns } } else if ($settings) { // Open Settings Menu - $pluginClass = substr($actionId, strlen(self::ACTION_PREFIX_SETTINGS)); - $this->settingsClass = $pluginClass; + $pluginClass = substr($actionId, strlen(self::ACTION_PREFIX_SETTINGS)); + $player->cache[self::CACHE_SETTING_CLASS] = $pluginClass; } else if ($boolSetting) { $actionArray = explode(".", $actionId); $setting = $actionArray[1];