setLabel($label); $this->setEntry($entry); $this->setValues($values); $this->setDefault($default); } /** * Set the possible Values * * @param array $values Possible Values * @return \FML\Script\Features\ValuePickerFeature */ public function setValues(array $values) { $this->values = array(); foreach ($values as $value) { array_push($this->values, (string)$value); } return $this; } /** * Get the ValuePicker Label * * @return \FML\Controls\Label */ public function getLabel() { return $this->label; } /** * Set the ValuePicker Label * * @param Label $label ValuePicker Label * @return \FML\Script\Features\ValuePickerFeature */ public function setLabel(Label $label = null) { if ($label) { $label->checkId(); $label->setScriptEvents(true); } $this->label = $label; return $this; } /** * Get the hidden Entry * * @return \FML\Controls\Entry */ public function getEntry() { return $this->entry; } /** * Set the hidden Entry * * @param Entry $entry Hidden Entry * @return \FML\Script\Features\ValuePickerFeature */ public function setEntry(Entry $entry = null) { if ($entry) { $entry->checkId(); } $this->entry = $entry; return $this; } /** * @see \FML\Script\Features\ScriptFeature::prepare() */ public function prepare(Script $script) { if ($this->label) { $script->setScriptInclude(ScriptInclude::TEXTLIB); $script->addScriptFunction(self::FUNCTION_UPDATE_PICKER_VALUE, $this->buildUpdatePickerValueFunction()); $script->appendGenericScriptLabel(ScriptLabel::ONINIT, $this->buildInitScriptText(), true); $script->appendGenericScriptLabel(ScriptLabel::MOUSECLICK, $this->buildClickScriptText()); } return $this; } /** * Build the Function Text * * @return string */ protected function buildUpdatePickerValueFunction() { $functionText = " Void " . self::FUNCTION_UPDATE_PICKER_VALUE . "(CMlLabel _Label) { declare " . self::VAR_PICKER_VALUES . " as Values for _Label = Text[]; declare NewValueIndex = -1; if (Values.exists(_Label.Value)) { declare ValueIndex = Values.keyof(_Label.Value); ValueIndex += 1; if (Values.existskey(ValueIndex)) { NewValueIndex = ValueIndex; } else { NewValueIndex = 0; } } declare NewValue = \"\"; if (Values.existskey(NewValueIndex)) { NewValue = Values[NewValueIndex]; } else { declare " . self::VAR_PICKER_DEFAULT_VALUE . " as Default for _Label = \"\"; NewValue = Default; } _Label.Value = NewValue; declare " . self::VAR_PICKER_ENTRY_ID . " as EntryId for _Label = \"\"; if (EntryId != \"\") { declare Entry <=> (Page.GetFirstChild(EntryId) as CMlEntry); Entry.Value = NewValue; } }"; return $functionText; } /** * Build the Init Script Text * * @return string */ protected function buildInitScriptText() { $labelId = $this->label->getId(true); $entryId = ''; if ($this->entry) { $entryId = $this->entry->getId(true); } $values = Builder::getArray($this->values); $default = $this->getDefault(); $scriptText = " declare Label_Picker <=> (Page.GetFirstChild(\"{$labelId}\") as CMlLabel); declare Text[] " . self::VAR_PICKER_VALUES . " as Values for Label_Picker; Values = {$values}; declare Text " . self::VAR_PICKER_DEFAULT_VALUE . " as Default for Label_Picker; Default = \"{$default}\"; declare Text " . self::VAR_PICKER_ENTRY_ID . " as EntryId for Label_Picker; EntryId = \"{$entryId}\"; " . self::FUNCTION_UPDATE_PICKER_VALUE . "(Label_Picker); "; return $scriptText; } /** * Get the default Value * * @return string */ public function getDefault() { if ($this->default) { return $this->default; } if ($this->values) { return reset($this->values); } return null; } /** * Set the default Value * * @param string $default Default Value * @return \FML\Script\Features\ValuePickerFeature */ public function setDefault($default) { $this->default = (string)$default; } /** * Build the Script Text for Label Clicks * * @return string */ protected function buildClickScriptText() { $labelId = $this->label->getId(true); $scriptText = " if (Event.ControlId == \"{$labelId}\") { declare Label_Picker <=> (Event.Control as CMlLabel); " . self::FUNCTION_UPDATE_PICKER_VALUE . "(Label_Picker); }"; return $scriptText; } }