def register_option(self, key, subkey, default, _type, definition,
                        values=None, locked=False):
        """Create a new option.

        :param str key: First identifier of the option.
        :param str subkey: Second identifier of the option.
        :param default: Default value of the option. Type varies and it is
            described by ``_type``.
        :param str _type: Type of the value of the option. Available
            options are: [``int``, ``float``, ``bool``, ``text``,
            ``string``, ``path_in``, ``path_out``].
        :param str definition: Brief explanation of the option.
        :type definition: :class:`str`
        :param values: Available values for the option.
        :type values: :func:`list` of accepted ``_type``
        :param bool locked: If True, option cannot be altered.

        :raise:
            :AlreadyRegisteredError: If ``key`` or ``subkey`` already
                define an option.

        """
        if not self.open:
            return

        key, subkey = _lower_keys(key, subkey)
        _entry_must_not_exist(self.gc, key, subkey)

        ev.value_eval(default, _type)
        values = None if values is False else values
        new_opt = pd.Series([key, subkey, default, _type, default,
                             locked, definition, values], index=self.clmn)

        self.gc = self.gc.append(new_opt, ignore_index=True)