ManiaLib 1.0b1 API Reference

Source for file Navigation.class.php

Documentation is available at Navigation.class.php

  1. <?php
  2. /**
  3.  * @author Maxime Raoust
  4.  * @copyright 2009-2010 NADEO
  5.  * @package ManiaLib
  6.  */
  7.  
  8. /**
  9.  * @ignore
  10.  */
  11. require_onceAPP_FRAMEWORK_GUI_TOOLKIT_PATH.'cards/NavigationButton.class.php' );
  12.  
  13. /**
  14.  * Navigation menu
  15.  * Looks like the navigation menu on the left in the game menus
  16.  * @package ManiaLib
  17.  * @subpackage GUIToolkit_Cards
  18.  */
  19. class Navigation extends Quad
  20. {
  21.     const BUTTONS_TOP = true;
  22.     const BUTTONS_BOTTOM = false;
  23.     
  24.     /**
  25.      * @var Label 
  26.      */
  27.     public $title;
  28.     /**
  29.      * @var Label 
  30.      */
  31.     public $subTitle;
  32.     /**
  33.      * @var Quad 
  34.      */
  35.     public $titleBg;
  36.     /**
  37.      * @var Quad 
  38.      */
  39.     public $logo;
  40.     /**
  41.      * @var NavigationButton 
  42.      */
  43.     public $quitButton;
  44.     /**
  45.      * @var NavigationButton 
  46.      */
  47.     public $lastItem;
  48.     
  49.     /**#@+
  50.      * @ignore
  51.      */
  52.     protected $showQuitButton true;
  53.     protected $items array();
  54.     protected $bottomItems array();
  55.     protected $marginHeight 1;
  56.     protected $yIndex = -10;
  57.     protected $sizeX 30;
  58.     protected $sizeY 96;
  59.     /**#@-*/
  60.  
  61.     function __construct (
  62.     {    
  63.         $this->setStyle(GuiDefaultStyles::Navigation_Style);
  64.         $this->setSubStyle(GuiDefaultStyles::Navigation_Substyle);
  65.         
  66.         $this->titleBg = new Quad ($this->sizeX-17);
  67.         $this->titleBg->setStyle(GuiDefaultStyles::Navigation_TitleBg_Style);
  68.         $this->titleBg->setSubStyle(GuiDefaultStyles::Navigation_TitleBg_Substyle);
  69.         
  70.         $this->title = new Label ($this->sizeX-2.5);
  71.         $this->title->setPosition (1.5-0.752);
  72.         $this->title->setStyle(GuiDefaultStyles::Navigation_Title_Style);
  73.         
  74.         $this->subTitle = new Label ($this->sizeX-4);
  75.         $this->subTitle->setPosition (1.5-43);
  76.         $this->subTitle->setStyle(GuiDefaultStyles::Navigation_Subtitle_Style);
  77.         
  78.         $this->quitButton = new NavigationButton ();
  79.         $this->quitButton->text->setText("Back");
  80.         $this->quitButton->icon->setSubStyle("Back");
  81.         
  82.         $this->logo = new Icon(6);
  83.         $this->logo->setPosition (22.5-0.52);
  84.         $this->logo->setSubStyle(null);
  85.     }
  86.     
  87.     /**
  88.      * Adds a navigation button to the menu
  89.      */
  90.     function addItem($topItem self::BUTTONS_TOP
  91.     {
  92.         $item new NavigationButton($this->sizeX-1);
  93.         if($topItem)
  94.             $this->items[$item;
  95.         else
  96.             $this->bottomItems[$item;
  97.         
  98.         $this->lastItem = $item;
  99.     }
  100.     
  101.     /**
  102.      * Return a reference of the last added item
  103.      * @deprecated use self::$lastItem instead (better performance)
  104.      * @return NavigationButton Reference on a NavigationButton object
  105.      */
  106.     function lastItem(
  107.     {
  108.         return $this->lastItem;
  109.     }
  110.     
  111.     /**
  112.      * Adds a vertical gap before the next item
  113.      * @param float 
  114.      */
  115.     function addGap($gap 3
  116.     {
  117.         $item new Spacer(1$gap);
  118.         $this->items[$item;
  119.     }
  120.     
  121.     /**
  122.      * Hides the quit/back button
  123.      */
  124.     function hideQuitButton(
  125.     {
  126.         $this->showQuitButton false;
  127.     }
  128.     
  129.     /**
  130.      * @ignore
  131.      */
  132.     protected function preFilter (
  133.     {
  134.         Manialink::beginFrame(-64481);
  135.     }
  136.     
  137.     /**
  138.      * @ignore
  139.      */
  140.     protected function postFilter (
  141.     {
  142.         // Frame was created in preFilter
  143.         // Manialink::beginFrame()
  144.         {
  145.             Manialink::beginFrame($this->posX+0.5$this->posY-0.5$this->posZ+1);
  146.             {
  147.                 $this->titleBg->save();
  148.                 $this->title->save();
  149.                 $this->subTitle->save();
  150.                 $this->logo->save();
  151.                 
  152.                 if($this->items)
  153.                 {
  154.                     $layout new ColumnLayout($this->sizeX-1$this->sizeY-10);
  155.                     $layout->setMarginHeight(1);
  156.                     Manialink::beginFrame(0-100null$layout);
  157.                     {
  158.                         foreach($this->items as $item
  159.                         {
  160.                             $item->save();
  161.                         }
  162.                         Manialink::endFrame();
  163.                     }
  164.                 }
  165.                 
  166.                 if($this->bottomItems)
  167.                 {
  168.                     $this->bottomItems array_reverse($this->bottomItems);
  169.                     
  170.                     $layout new ColumnLayout($this->sizeX-1$this->sizeY-10);
  171.                     $layout->setDirection(ColumnLayout::DIRECTION_UP);
  172.                     $layout->setMarginHeight(1);
  173.                     Manialink::beginFrame(0-$this->sizeY+$this->quitButton->getSizeY()+20null$layout);
  174.                     {
  175.                         foreach($this->bottomItems as $item
  176.                         {
  177.                             $item->save();
  178.                         }
  179.                         Manialink::endFrame();
  180.                     }
  181.                 }
  182.                 
  183.                 if($this->showQuitButton
  184.                 {
  185.                     $this->quitButton->setSizeX($this->sizeX-1);
  186.                     $this->quitButton->setPosition(0-$this->sizeY+$this->quitButton->getSizeY()+2);
  187.                     $this->quitButton->save();
  188.                 }
  189.             }
  190.             Manialink::endFrame();
  191.         }    
  192.         Manialink::endFrame();
  193.     }    
  194. }
  195.  
  196. ?>