TrackManiaControl/application/core/FML/Script/Pages.php
Steffen Schröder fd3a3056f1 fml fix update
2013-12-14 23:28:04 +01:00

148 lines
3.3 KiB
PHP

<?php
namespace FML\Script;
use FML\Controls\Control;
use FML\Script\Sections\Constants;
use FML\Script\Sections\Globals;
use FML\Script\Sections\Includes;
use FML\Script\Sections\Labels;
use FML\Types\Scriptable;
use FML\Controls\Label;
/**
* ScriptFeature class offering paging
*
* @author steeffeen
*/
class Pages implements Constants, Globals, Includes, Labels, ScriptFeature {
/**
* Constants
*/
const C_PAGEIDS = 'C_FML_PageIds';
/**
* Protected properties
*/
protected $pages = array();
/**
* Add paging behavior
*
* @param array $pageButtons
* @param array $pages
* @param Label $counterLabel
* @return \FML\Script\Pages
*/
public function add(array $pageButtons, array $pages, Label $counterLabel = null) {
$actionIds = array();
foreach ($pageButtons as $action => $pageButton) {
if (!($pageButton instanceof Control)) {
trigger_error('No Control instance given.', E_USER_ERROR);
}
$pageButton->assignId();
if (!($pageButton instanceof Scriptable)) {
trigger_error('No Scriptable instance given.', E_USER_ERROR);
}
$pageButton->setScriptEvents(true);
$actionIds[$pageButton->getId()] = $action;
}
$pageIds = array();
foreach ($pages as $page) {
if (!($page instanceof Control)) {
trigger_error('No Control instance given.', E_USER_ERROR);
}
$page->assignId();
if (!empty($pageIds)) {
$page->setVisible(false);
}
array_push($pageIds, $page->getId());
}
if ($counterLabel) {
$counterLabel->assignId();
$counterId = $counterLabel->getId();
}
else {
$counterId = uniqid();
}
array_push($this->pages, array($actionIds, $pageIds, $counterId));
}
/**
*
* @see \FML\Script\Sections\Includes::getIncludes()
*/
public function getIncludes() {
$includes = array();
$includes["TextLib"] = "TextLib";
return $includes;
}
/**
*
* @see \FML\Script\Sections\Constants::getConstants()
*/
public function getConstants() {
$constant = '[';
$index = 0;
foreach ($this->pages as $page) {
$constant .= '[';
$actionIds = $page[0];
foreach ($actionIds as $actionId => $action) {
$constant .= '"' . $actionId . '" => ["' . $action . '"], ';
}
$constant .= '"__FML__Pages__Id__" => ["' . $page[2] . '"], ';
$constant .= '"__FML__Pages__Ids__" => [';
if (count($page[1]) <= 0) {
$constant .= '""';
}
else {
$subIndex = 0;
foreach ($page[1] as $pageId) {
$constant .= '"' . $pageId . '"';
if ($subIndex < count($page[1]) - 1) {
$constant .= ', ';
}
$subIndex++;
}
}
$constant .= ']]';
if ($index < count($this->pages) - 1) {
$constant .= ', ';
}
$index++;
}
$constant .= ']';
$constants = array();
$constants[self::C_PAGEIDS] = $constant;
return $constants;
}
/**
*
* @see \FML\Script\Sections\Globals::getGlobals()
*/
public function getGlobals() {
$globals = array();
$globals['G_FML_PageIndexes'] = 'Integer[Text]';
return $globals;
}
/**
*
* @see \FML\Script\Sections\Labels::getLabels()
*/
public function getLabels() {
$labels = array();
$labelOnInit = file_get_contents(__DIR__ . '/Templates/PageOnInit.txt');
$labels[Labels::ONINIT] = $labelOnInit;
$labelMouseClick = file_get_contents(__DIR__ . '/Templates/PageMouseClick.txt');
$labels[Labels::MOUSECLICK] = $labelMouseClick;
return $labels;
}
}