/**
  * @param assFormulaQuestionUnitCategory $category
  * @param assFormulaQuestionUnit         $unit
  * @return ilPropertyFormGUI
  */
 protected function initUnitForm(assFormulaQuestionUnitCategory $category = null, assFormulaQuestionUnit $unit = null)
 {
     if ($this->unit_form instanceof ilPropertyFormGUI) {
         return $this->unit_form;
     }
     $unit_in_use = false;
     if ($unit instanceof assFormulaQuestionUnit && $this->repository->isUnitInUse($unit->getId())) {
         $unit_in_use = true;
     }
     $this->unit_form = new ilPropertyFormGUI();
     $title = new ilTextInputGUI($this->lng->txt('unit'), 'unit_title');
     $title->setDisabled($unit_in_use);
     $title->setRequired(true);
     $this->unit_form->addItem($title);
     $baseunit = new ilSelectInputGUI($this->lng->txt('baseunit'), 'base_unit');
     $items = $this->repository->getCategorizedUnits();
     $options = array();
     $category_name = '';
     $new_category = false;
     foreach ((array) $items as $item) {
         if ($unit instanceof assFormulaQuestionUnit && $unit->getId() == $item->getId()) {
             continue;
         }
         /**
          * @var $item assFormulaQuestionUnitCategory|assFormulaQuestionUnitCategory
          */
         if ($item instanceof assFormulaQuestionUnitCategory) {
             if ($category_name != $item->getDisplayString()) {
                 $new_category = true;
                 $category_name = $item->getDisplayString();
             }
             continue;
         }
         $options[$item->getId()] = $item->getDisplayString() . ($new_category ? ' (' . $category_name . ')' : '');
         $new_category = false;
     }
     $baseunit->setDisabled($unit_in_use);
     $baseunit->setOptions(array(0 => $this->lng->txt('no_selection')) + $options);
     $this->unit_form->addItem($baseunit);
     $factor = new ilNumberInputGUI($this->lng->txt('factor'), 'factor');
     $factor->setRequired(true);
     $factor->setSize(3);
     $factor->setMinValue(0);
     $factor->allowDecimals(true);
     $factor->setDisabled($unit_in_use);
     $this->unit_form->addItem($factor);
     if (null === $unit) {
         $this->unit_form->setTitle($this->lng->txt('new_unit'));
         $this->unit_form->setFormAction($this->ctrl->getFormAction($this, 'addUnit'));
         $this->unit_form->addCommandButton('addUnit', $this->lng->txt('save'));
     } else {
         $this->ctrl->setParameter($this, 'unit_id', $unit->getId());
         if ($unit_in_use) {
             $this->unit_form->setFormAction($this->ctrl->getFormAction($this, 'showUnitsOfCategory'));
         } else {
             $this->unit_form->addCommandButton('saveUnit', $this->lng->txt('save'));
             $this->unit_form->setFormAction($this->ctrl->getFormAction($this, 'saveUnit'));
         }
         $this->unit_form->setTitle(sprintf($this->lng->txt('un_sel_cat_sel_unit'), $category->getDisplayString(), $unit->getDisplayString()));
     }
     $this->unit_form->addCommandButton('showUnitsOfCategory', $this->lng->txt('cancel'));
     return $this->unit_form;
 }