$settings->add(new admin_setting_configtext('qtype_stack/maximalibraries', get_string('settingmaximalibraries', 'qtype_stack'), get_string('settingmaximalibraries_desc', 'qtype_stack'), 'stats, distrib, descriptive'));
$settings->add(new admin_setting_configcheckbox('qtype_stack/casdebugging', get_string('settingcasdebugging', 'qtype_stack'), get_string('settingcasdebugging_desc', 'qtype_stack'), 0));
// Options for maths display.
$settings->add(new admin_setting_heading('mathsdisplayheading', get_string('settingsmathsdisplayheading', 'qtype_stack'), ''));
$settings->add(new admin_setting_configcheckbox('qtype_stack/ajaxvalidation', get_string('settingajaxvalidation', 'qtype_stack'), get_string('settingajaxvalidation_desc', 'qtype_stack'), 1));
$settings->add(new qtype_stack_admin_setting_maths_display_method('qtype_stack/mathsdisplay', get_string('settingmathsdisplay', 'qtype_stack'), get_string('settingmathsdisplay_desc', 'qtype_stack'), 'mathjax', null));
$settings->add(new admin_setting_configcheckbox('qtype_stack/replacedollars', get_string('settingreplacedollars', 'qtype_stack'), get_string('settingreplacedollars_desc', 'qtype_stack'), false));
// Options for new inputs.
$settings->add(new admin_setting_heading('inputoptionsheading', get_string('settingdefaultinputoptions', 'qtype_stack'), get_string('settingdefaultinputoptions_desc', 'qtype_stack')));
$settings->add(new qtype_stack_admin_setting_input_types('qtype_stack/inputtype', get_string('inputtype', 'qtype_stack'), get_string('inputtype_help', 'qtype_stack'), 'algebraic', null));
$settings->add(new admin_setting_configtext('qtype_stack/inputboxsize', get_string('boxsize', 'qtype_stack'), get_string('boxsize_help', 'qtype_stack'), '15', PARAM_INT));
$settings->add(new admin_setting_configselect('qtype_stack/inputstrictsyntax', get_string('strictsyntax', 'qtype_stack'), get_string('strictsyntax_help', 'qtype_stack'), '1', stack_options::get_yes_no_options()));
$settings->add(new admin_setting_configselect('qtype_stack/inputinsertstars', get_string('insertstars', 'qtype_stack'), get_string('insertstars_help', 'qtype_stack'), '0', stack_options::get_insert_star_options()));
$settings->add(new admin_setting_configtext('qtype_stack/inputforbidwords', get_string('forbidwords', 'qtype_stack'), get_string('forbidwords_help', 'qtype_stack'), '', PARAM_RAW));
$settings->add(new admin_setting_configselect('qtype_stack/inputforbidfloat', get_string('forbidfloat', 'qtype_stack'), get_string('forbidfloat_help', 'qtype_stack'), '1', stack_options::get_yes_no_options()));
$settings->add(new admin_setting_configselect('qtype_stack/inputrequirelowestterms', get_string('requirelowestterms', 'qtype_stack'), get_string('requirelowestterms_help', 'qtype_stack'), '0', stack_options::get_yes_no_options()));
$settings->add(new admin_setting_configselect('qtype_stack/inputcheckanswertype', get_string('checkanswertype', 'qtype_stack'), get_string('checkanswertype_help', 'qtype_stack'), '0', stack_options::get_yes_no_options()));
$settings->add(new admin_setting_configselect('qtype_stack/inputmustverify', get_string('mustverify', 'qtype_stack'), get_string('mustverify_help', 'qtype_stack'), '1', stack_options::get_yes_no_options()));
$settings->add(new admin_setting_configselect('qtype_stack/inputshowvalidation', get_string('showvalidation', 'qtype_stack'), get_string('showvalidation_help', 'qtype_stack'), '1', stack_options::get_showvalidation_options()));
// Options for new questions.
$settings->add(new admin_setting_heading('questionoptionsheading', get_string('settingdefaultquestionoptions', 'qtype_stack'), get_string('settingdefaultquestionoptions_desc', 'qtype_stack')));
$settings->add(new admin_setting_configselect('qtype_stack/questionsimplify', get_string('questionsimplify', 'qtype_stack'), get_string('autosimplify_help', 'qtype_stack'), '1', stack_options::get_yes_no_options()));
$settings->add(new admin_setting_configselect('qtype_stack/assumepositive', get_string('assumepositive', 'qtype_stack'), get_string('assumepositive_help', 'qtype_stack'), '0', stack_options::get_yes_no_options()));
$settings->add(new admin_setting_configtextarea('qtype_stack/prtcorrect', get_string('prtcorrectfeedback', 'qtype_stack'), '', get_string('defaultprtcorrectfeedback', 'qtype_stack'), PARAM_RAW, 60, 3));
$settings->add(new admin_setting_configtextarea('qtype_stack/prtpartiallycorrect', get_string('prtpartiallycorrectfeedback', 'qtype_stack'), '', get_string('defaultprtpartiallycorrectfeedback', 'qtype_stack'), PARAM_RAW, 60, 3));
$settings->add(new admin_setting_configtextarea('qtype_stack/prtincorrect', get_string('prtincorrectfeedback', 'qtype_stack'), '', get_string('defaultprtincorrectfeedback', 'qtype_stack'), PARAM_RAW, 60, 3));
$settings->add(new admin_setting_configselect('qtype_stack/multiplicationsign', get_string('multiplicationsign', 'qtype_stack'), get_string('multiplicationsign_help', 'qtype_stack'), 'dot', stack_options::get_multiplication_sign_options()));
$settings->add(new admin_setting_configselect('qtype_stack/sqrtsign', get_string('sqrtsign', 'qtype_stack'), get_string('sqrtsign_help', 'qtype_stack'), '1', stack_options::get_yes_no_options()));
$settings->add(new admin_setting_configselect('qtype_stack/complexno', get_string('complexno', 'qtype_stack'), get_string('complexno_help', 'qtype_stack'), 'i', stack_options::get_complex_no_options()));
$settings->add(new admin_setting_configselect('qtype_stack/inversetrig', get_string('inversetrig', 'qtype_stack'), get_string('inversetrig_help', 'qtype_stack'), 'cos-1', stack_options::get_inverse_trig_options()));
$settings->add(new admin_setting_configselect('qtype_stack/matrixparens', get_string('matrixparens', 'qtype_stack'), get_string('matrixparens_help', 'qtype_stack'), '[', stack_options::get_matrix_parens_options()));
 /**
  * Add the form fields for a given input element to the form.
  * @param string $inputname the input name.
  * @param MoodleQuickForm $mform the form being assembled.
  * @param int $counts the number of times this input and its validation appears in the questiontext.
  */
 protected function definition_input($inputname, MoodleQuickForm $mform, $counts)
 {
     $mform->addElement('header', $inputname . 'header', stack_string('inputheading', $inputname));
     if ($counts[self::INPUTS] == 0 && $counts[self::VALIDATIONS] == 0) {
         $mform->addElement('static', $inputname . 'warning', '', stack_string('inputwillberemoved', $inputname));
         $mform->addElement('advcheckbox', $inputname . 'deleteconfirm', '', stack_string('inputremovedconfirm'));
         $mform->setDefault($inputname . 'deleteconfirm', 0);
         $mform->setExpanded($inputname . 'header');
     }
     $mform->addElement('select', $inputname . 'type', stack_string('inputtype'), $this->typechoices);
     $mform->setDefault($inputname . 'type', $this->stackconfig->inputtype);
     $mform->addHelpButton($inputname . 'type', 'inputtype', 'qtype_stack');
     $mform->addElement('text', $inputname . 'modelans', stack_string('teachersanswer'), array('size' => 20));
     $mform->setType($inputname . 'modelans', PARAM_RAW);
     $mform->addHelpButton($inputname . 'modelans', 'teachersanswer', 'qtype_stack');
     // We don't make modelans a required field in the formslib sense, because
     // That stops the input sections collapsing by default. Instead, we enforce
     // that it is non-blank in the server-side validation.
     $mform->addElement('text', $inputname . 'boxsize', stack_string('boxsize'), array('size' => 3));
     $mform->setDefault($inputname . 'boxsize', $this->stackconfig->inputboxsize);
     $mform->setType($inputname . 'boxsize', PARAM_INT);
     $mform->addHelpButton($inputname . 'boxsize', 'boxsize', 'qtype_stack');
     $mform->addElement('selectyesno', $inputname . 'strictsyntax', stack_string('strictsyntax'));
     $mform->setDefault($inputname . 'strictsyntax', $this->stackconfig->inputstrictsyntax);
     $mform->addHelpButton($inputname . 'strictsyntax', 'strictsyntax', 'qtype_stack');
     $mform->addElement('select', $inputname . 'insertstars', stack_string('insertstars'), stack_options::get_insert_star_options());
     $mform->setDefault($inputname . 'insertstars', $this->stackconfig->inputinsertstars);
     $mform->addHelpButton($inputname . 'insertstars', 'insertstars', 'qtype_stack');
     $mform->addElement('text', $inputname . 'syntaxhint', stack_string('syntaxhint'), array('size' => 20));
     $mform->setType($inputname . 'syntaxhint', PARAM_RAW);
     $mform->addHelpButton($inputname . 'syntaxhint', 'syntaxhint', 'qtype_stack');
     $mform->addElement('text', $inputname . 'forbidwords', stack_string('forbidwords'), array('size' => 20));
     $mform->setType($inputname . 'forbidwords', PARAM_RAW);
     $mform->setDefault($inputname . 'forbidwords', $this->stackconfig->inputforbidwords);
     $mform->addHelpButton($inputname . 'forbidwords', 'forbidwords', 'qtype_stack');
     $mform->addElement('text', $inputname . 'allowwords', stack_string('allowwords'), array('size' => 20));
     $mform->setType($inputname . 'allowwords', PARAM_RAW);
     $mform->setDefault($inputname . 'allowwords', '');
     $mform->addHelpButton($inputname . 'allowwords', 'allowwords', 'qtype_stack');
     $mform->addElement('selectyesno', $inputname . 'forbidfloat', stack_string('forbidfloat'));
     $mform->setDefault($inputname . 'forbidfloat', $this->stackconfig->inputforbidfloat);
     $mform->addHelpButton($inputname . 'forbidfloat', 'forbidfloat', 'qtype_stack');
     $mform->addElement('selectyesno', $inputname . 'requirelowestterms', stack_string('requirelowestterms'));
     $mform->setDefault($inputname . 'requirelowestterms', $this->stackconfig->inputrequirelowestterms);
     $mform->addHelpButton($inputname . 'requirelowestterms', 'requirelowestterms', 'qtype_stack');
     $mform->addElement('selectyesno', $inputname . 'checkanswertype', stack_string('checkanswertype'));
     $mform->setDefault($inputname . 'checkanswertype', $this->stackconfig->inputcheckanswertype);
     $mform->addHelpButton($inputname . 'checkanswertype', 'checkanswertype', 'qtype_stack');
     $mform->addElement('selectyesno', $inputname . 'mustverify', stack_string('mustverify'));
     $mform->setDefault($inputname . 'mustverify', $this->stackconfig->inputmustverify);
     $mform->addHelpButton($inputname . 'mustverify', 'mustverify', 'qtype_stack');
     $mform->addElement('select', $inputname . 'showvalidation', stack_string('showvalidation'), stack_options::get_showvalidation_options());
     $mform->setDefault($inputname . 'showvalidation', $this->stackconfig->inputshowvalidation);
     $mform->addHelpButton($inputname . 'showvalidation', 'showvalidation', 'qtype_stack');
     $mform->addElement('text', $inputname . 'options', stack_string('inputextraoptions'), array('size' => 20));
     $mform->setType($inputname . 'options', PARAM_RAW);
     $mform->addHelpButton($inputname . 'options', 'inputextraoptions', 'qtype_stack');
 }