Menus.as

  1. /**
  2.  * Gestión de los menús
  3.  *
  4.  * ProInf.net, 2008
  5.  * GNU General Public License: http://creativecommons.org/licenses/GPL/2.0/deed.es
  6.  *
  7.  */
  8. class Menus {
  9.  
  10. //////////////////////////////////////////////////
  11. // Propiedades de la clase
  12.  
  13. private static var menus:Menus = null;
  14.  
  15. //////////////////////////////////////////////////
  16. // Propiedades del objeto
  17.  
  18. private var lista:Array = new Array();
  19. private var closing:Boolean = false;
  20.  
  21. //////////////////////////////////////////////////
  22. // Constructor
  23.  
  24. private function Menus () {
  25. lista = new Array();
  26. }
  27.  
  28. public static function getInstance():Menus {
  29. if (menus == null) {
  30. menus = new Menus();
  31. }
  32. return menus;
  33. }
  34.  
  35. //////////////////////////////////////////////////
  36. // Destructor
  37.  
  38. /** Free resources. Call manually just before delete this class */
  39. public function die() {
  40. while (lista.length > 0) {
  41. var menu:Multibricks = Multibricks(lista.pop());
  42. menu.die(); delete menu;
  43. }
  44. delete lista;
  45. }
  46.  
  47. //////////////////////////////////////////////////
  48. // Setters
  49.  
  50. private function getOffColor():Number {
  51. return Profile.getInstance().getOffColorMenu();
  52. }
  53.  
  54.  
  55. //////////////////////////////////////////////////
  56. // Setters
  57.  
  58. public function setVisible(valor:Boolean) {
  59. for (var indice:Number = lista.length - 1; indice >= 0; indice--) {
  60. var menu:Multibricks = Multibricks(lista[indice]);
  61. Animatron.visibilityMultibricks(menu, valor); //menu.getMovieClip()._visible = valor;
  62. }
  63. ////Selected.getInstance().setVisible(valor);
  64. }
  65.  
  66.  
  67. //////////////////////////////////////////////////
  68. // Métodos públicos
  69.  
  70. public function memorize(menu:Multibricks):Void {
  71. lista.push(menu);
  72. }
  73.  
  74. public function unmemorize(menu:Multibricks):Void {
  75. var indice:Number = indexOf(menu);
  76. lista.splice(indice,1);
  77.  
  78. offBottomMenus();
  79. }
  80.  
  81.  
  82. //////////////////////////////////////////////////
  83. // Métodos internos
  84.  
  85. private function indexOf(objeto:Object):Number {
  86. for (var indice:Number = lista.length - 1; indice >= 0; indice--) {
  87. if (lista[indice] == objeto) {
  88. return indice;
  89. }
  90. }
  91. return -1;
  92. }
  93.  
  94. /**
  95. * Normaliza los niveles de los menús: sólo puede haber un menú en cada nivel
  96. * y los niveles han de ser consecutivos.
  97. */
  98. public function purgeLevels(menu:Multibricks):Void {
  99. Mouse.show();
  100. if (closing) return;
  101. closing = true;
  102.  
  103. closeTopMenus(menu);
  104. offBottomMenus();
  105.  
  106. closing = false;
  107. }
  108.  
  109. /**
  110. * Cierra todos los menús de igual o superior nivel al referenciado
  111. */
  112. private function closeTopMenus(referencia:Multibricks):Void {
  113. var clonico:Array = lista.concat();
  114. for (var indice:Number = clonico.length - 1; indice >= 0; indice--) {
  115. var menu:Multibricks = Multibricks(clonico[indice]);
  116. if (menu != referencia) {
  117. if (menu.getLevel() >= referencia.getLevel()) {
  118. menu.die(); delete menu;
  119. }
  120. }
  121. }
  122. }
  123.  
  124. /**
  125. * Realza el menú superior apagando parcialmente los menús de atrás.
  126. */
  127. private function offBottomMenus():Void {
  128. var alfa:Number = 0;
  129. for (var indice:Number = lista.length - 1; indice >= 0; indice--) {
  130. var menu:Multibricks = Multibricks(lista[indice]);
  131. Utils.setTint(menu.getMovieClip(), getOffColor(), alfa);
  132. alfa += 25;
  133. }
  134. }
  135.  
  136.  
  137.  
  138.  
  139. }
  140.  

Proinf.net