FML Update
This commit is contained in:
		
							
								
								
									
										187
									
								
								libs/FML/Script/Features/ToggleInterface.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								libs/FML/Script/Features/ToggleInterface.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,187 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Script\Builder; | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
|  | ||||
| /** | ||||
|  * Script Feature for toggling the complete ManiaLink via Key Press | ||||
|  * | ||||
|  * @author    steeffeen <mail@steeffeen.com> | ||||
|  * @copyright FancyManiaLinks Copyright © 2017 Steffen Schröder | ||||
|  * @license   http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class ToggleInterface extends ScriptFeature | ||||
| { | ||||
|  | ||||
|     /* | ||||
|      * Constants | ||||
|      */ | ||||
|     const VAR_STATE = "FML_ToggleInterface_State"; | ||||
|  | ||||
|     /** | ||||
|      * @var string $keyName Key name | ||||
|      */ | ||||
|     protected $keyName = null; | ||||
|  | ||||
|     /** | ||||
|      * @var int $keyCode Key code | ||||
|      */ | ||||
|     protected $keyCode = null; | ||||
|  | ||||
|     /** | ||||
|      * @var bool $rememberState Remember the current state | ||||
|      */ | ||||
|     protected $rememberState = true; | ||||
|  | ||||
|     /** | ||||
|      * Construct a new ToggleInterface | ||||
|      * | ||||
|      * @api | ||||
|      * @param string|int $keyNameOrCode (optional) Key name or code | ||||
|      * @param bool       $rememberState (optional) Remember the current state | ||||
|      */ | ||||
|     public function __construct($keyNameOrCode = null, $rememberState = true) | ||||
|     { | ||||
|         if (is_string($keyNameOrCode)) { | ||||
|             $this->setKeyName($keyNameOrCode); | ||||
|         } else if (is_int($keyNameOrCode)) { | ||||
|             $this->setKeyCode($keyNameOrCode); | ||||
|         } | ||||
|         $this->setRememberState($rememberState); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the key name | ||||
|      * | ||||
|      * @api | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getKeyName() | ||||
|     { | ||||
|         return $this->keyName; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the key name | ||||
|      * | ||||
|      * @api | ||||
|      * @param string $keyName Key name | ||||
|      * @return static | ||||
|      */ | ||||
|     public function setKeyName($keyName) | ||||
|     { | ||||
|         $this->keyName = (string)$keyName; | ||||
|         $this->keyCode = null; | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the key code | ||||
|      * | ||||
|      * @api | ||||
|      * @return int | ||||
|      */ | ||||
|     public function getKeyCode() | ||||
|     { | ||||
|         return $this->keyCode; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the key code | ||||
|      * | ||||
|      * @api | ||||
|      * @param int $keyCode Key code | ||||
|      * @return static | ||||
|      */ | ||||
|     public function setKeyCode($keyCode) | ||||
|     { | ||||
|         $this->keyCode = (int)$keyCode; | ||||
|         $this->keyName = null; | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get if the state should get remembered | ||||
|      * | ||||
|      * @api | ||||
|      * @return bool | ||||
|      */ | ||||
|     public function getRememberState() | ||||
|     { | ||||
|         return $this->rememberState; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set if the state should get remembered | ||||
|      * | ||||
|      * @api | ||||
|      * @param bool $rememberState Remember the current state | ||||
|      * @return static | ||||
|      */ | ||||
|     public function setRememberState($rememberState) | ||||
|     { | ||||
|         $this->rememberState = (bool)$rememberState; | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @see ScriptFeature::prepare() | ||||
|      */ | ||||
|     public function prepare(Script $script) | ||||
|     { | ||||
|         $script->appendGenericScriptLabel(ScriptLabel::KEYPRESS, $this->getKeyPressScriptText()); | ||||
|         if ($this->rememberState) { | ||||
|             $script->appendGenericScriptLabel(ScriptLabel::ONINIT, $this->getOnInitScriptText()); | ||||
|         } | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the on init script text | ||||
|      * | ||||
|      * @return string | ||||
|      */ | ||||
|     protected function getOnInitScriptText() | ||||
|     { | ||||
|         $stateVariableName = $this::VAR_STATE; | ||||
|         return " | ||||
| declare persistent {$stateVariableName} as CurrentState for LocalUser = True; | ||||
| Page.MainFrame.Visible = CurrentState; | ||||
| "; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the key press script text | ||||
|      * | ||||
|      * @return string | ||||
|      */ | ||||
|     protected function getKeyPressScriptText() | ||||
|     { | ||||
|         $keyProperty = null; | ||||
|         $keyValue    = null; | ||||
|         if ($this->keyName) { | ||||
|             $keyProperty = "KeyName"; | ||||
|             $keyValue    = Builder::getText($this->keyName); | ||||
|         } else if ($this->keyCode) { | ||||
|             $keyProperty = "KeyCode"; | ||||
|             $keyValue    = Builder::getInteger($this->keyCode); | ||||
|         } | ||||
|         $scriptText = " | ||||
| if (Event.{$keyProperty} == {$keyValue}) { | ||||
|     Page.MainFrame.Visible = !Page.MainFrame.Visible; | ||||
| "; | ||||
|         if ($this->rememberState) { | ||||
|             $stateVariableName = $this::VAR_STATE; | ||||
|             $scriptText        .= " | ||||
|     declare persistent {$stateVariableName} as CurrentState for LocalUser = True; | ||||
|     CurrentState = Page.MainFrame.Visible; | ||||
| "; | ||||
|         } | ||||
|         return $scriptText . " | ||||
| }"; | ||||
|     } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user