Lithron.LVirtualNodes
[ class tree: Lithron.LVirtualNodes ] [ index: Lithron.LVirtualNodes ] [ all elements ]

Source for file LSitenodeSelection.php

Documentation is available at LSitenodeSelection.php

  1. <?php
  2.  
  3.  
  4. /**
  5. * Menu class file.
  6. *
  7. * @license http://opensource.org/licenses/mozilla1.1.php Mozilla Public License
  8. * @copyright 2005, diemeisterei GmbH. All rights reserved.
  9. * @author $Author: schmunk $
  10. * @version $Revision: 128 $ $Date: 2006-04-25 15:50:26 +0000 (Di, 25 Apr 2006) $
  11. * @package Lithron.LVirtualNodes
  12. * @subpackage WebControls
  13. */
  14.  
  15. /**
  16. * Displays and manages the CSS menu (sitemap tree)
  17. *
  18. * @package System.Web.UI.WebControls
  19. * @subpackage Admin
  20. */
  21.  
  22. class LSitenodeSelection extends TPanel
  23. {
  24. public function getMode()
  25. {
  26. return $this->getViewState("mode", "select");
  27. }
  28.  
  29. public function setMode($mode)
  30. {
  31. $this->setViewState("mode", $mode, "select");
  32. }
  33.  
  34. public function getSelectedValue()
  35. {
  36. return $this->getViewState("sel", "1");
  37. }
  38.  
  39. public function setSelectedValue($sel)
  40. {
  41. $this->setViewState("sel", $sel, "1");
  42. }
  43.  
  44. function onLoad($param)
  45. {
  46. parent :: onLoad($param);
  47. $root = $this->Service->getNodes();
  48. $this->setStyle("font-family: Andale mono, Courier new, monospace;");
  49. $this->genTree($root);
  50. }
  51.  
  52.  
  53. private function genTree($node, $level = 0, $first = true)
  54. {
  55.  
  56. // generate tree-like prefix
  57. $trace = $node;
  58. $prefix = "";
  59. for ($i = 0; $i < $level; $i++)
  60. {
  61. $trace = $trace->getParentNode();
  62. if ($trace->getSiblingNode() || $this->Mode == "insert")
  63. $prefix = "|&nbsp;&nbsp;".$prefix;
  64. else
  65. $prefix = "&nbsp;&nbsp;&nbsp;".$prefix;
  66. }
  67. if ($level != 0) $prefix .= ($node->getSiblingNode() || $this->Mode == "insert" ? "|" : "+")."--";
  68. $prefix = substr($prefix, $this->Mode == "insert" ? 13 : 18);
  69.  
  70. // generate Insert-Before-Box
  71. if ($this->Mode == "insert" && $level != 0 && $first)
  72. {
  73. $rb = Prado::createComponent("LSitenodeRadioButton");
  74. $rb->setGroupName($this->getClientID(false));
  75. $rb->setParameter($node->getPath());
  76. $rb->OnCheckedChanged[] = array($this, "radioToggled");
  77. $this->Controls[] = $prefix;
  78. $this->Controls[] = $rb;
  79. $this->Controls[] = "<br/>";
  80. if (!$this->Page->IsPostBack) $rb->setChecked($node->getPath() == $this->getSelectedValue());
  81. }
  82.  
  83. // generate Current-Node-Box
  84. if ($this->Mode != "select")
  85. {
  86. $this->Controls[] = $prefix.$node->getAlias();
  87. $this->Controls[] = "<br/>";
  88. }
  89. else
  90. {
  91. $rb = Prado::createComponent("LSitenodeRadioButton");
  92. $rb->setGroupName($this->getClientID(false));
  93. $rb->setParameter($node->getPath());
  94. $rb->OnCheckedChanged[] = array($this, "radioToggled");
  95. if ($prefix) $this->Controls[] = $prefix;
  96. $this->Controls[] = $rb;
  97. $this->Controls[] = $node->getAlias();
  98. $this->Controls[] = "<br/>";
  99. if (!$this->Page->IsPostBack) $rb->setChecked($node->getPath() == $this->getSelectedValue());
  100. }
  101.  
  102. // generate Children
  103. $subnode = $node->getFirstChildNode();
  104. $fn = $subnode;
  105. if (!$subnode && $this->Mode == "insert")
  106. {
  107. // generate Node-Child-Insertion-Box
  108. $rb = Prado::createComponent("LSitenodeRadioButton");
  109. $rb->setGroupName($this->getClientID(false));
  110. $otherprefix = substr($prefix, 0, strlen($prefix)-2);
  111. $rb->setParameter($node->getPath().".1");
  112. $rb->OnCheckedChanged[] = array($this, "radioToggled");
  113. $this->Controls[] = $otherprefix."&nbsp;&nbsp;+--";
  114. $this->Controls[] = $rb;
  115. $this->Controls[] = "<br/>";
  116. }
  117. while ($subnode)
  118. {
  119. $this->genTree($subnode, $level+1, $fn == $subnode);
  120. $subnode = $subnode->getSiblingNode();
  121. }
  122.  
  123. // generate Insert-After-Box
  124. if ($this->Mode == "insert" && $level != 0)
  125. {
  126. $parr = explode(".", $node->getPath());
  127. $parr[count($parr)-1]++;
  128. $p = implode(".", $parr);
  129. if (!$node->getSiblingNode()) $prefix[strlen($prefix)-3] = "+";
  130. $rb = Prado::createComponent("LSitenodeRadioButton");
  131. $rb->setGroupName($this->getClientID(false));
  132. $rb->setParameter($p);
  133. $rb->OnCheckedChanged[] = array($this, "radioToggled");
  134. $this->Controls[] = $prefix;
  135. $this->Controls[] = $rb;
  136. $this->Controls[] = "<br/>";
  137. if (!$this->Page->IsPostBack) $rb->setChecked($p == $this->getSelectedValue());
  138. }
  139. }
  140.  
  141.  
  142. public function radioToggled($sender, $param)
  143. {
  144. //echo "toggle from ".$sender->Parameter." to ".($sender->getChecked()?"on":"off")."<br>";
  145. $this->setSelectedValue($sender->Parameter);
  146. }
  147.  
  148. }
  149. ?>

Documentation generated on Tue, 20 Jun 2006 05:15:24 +0200 by phpDocumentor 1.3.0RC4