X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FNode.hh;h=0349831a82b2c7fe572900fa07a69ae451a9cba9;hb=fa5eaa97c8593e3587c87f25adb14f7f91f31f37;hp=71c66f7b572f2652e314b2f7eaf4f78d1916af54;hpb=63c40810b93b4d8f3d6dad5f987adc5f2bf5b5ed;p=senf.git diff --git a/Console/Node.hh b/Console/Node.hh index 71c66f7..0349831 100644 --- a/Console/Node.hh +++ b/Console/Node.hh @@ -307,7 +307,7 @@ namespace console { typedef BOOST_TYPEOF_TPL( senf_console_add_node( * static_cast(0), * static_cast(0), - * static_cast(0), + * static_cast(0), 0) ) base_type; typedef typename senf::remove_cvref::type value_type; @@ -317,7 +317,7 @@ namespace console { /// Internal struct Creator { static result_type create(DirectoryNode & node, std::string const & name, - Object const & ob); + Object & ob); }; }; @@ -383,8 +383,8 @@ namespace console { \a name is empty, it is set to 'unnamed'. */ template - typename NodeCreateTraits::result_type add (std::string const & name, - Object const & ob); + typename NodeCreateTraits::result_type add(std::string const & name, + Object const & ob); ///< Generic child node factory /**< This member is used to create a new child node of the current directory. The type of node created depends on @@ -409,6 +409,12 @@ namespace console { is not used but serves to disambiguate the overloads). */ + template + typename NodeCreateTraits::result_type add(std::string const & name, + Object & ob); + ///< Generic child node factory + /**< \see add() */ + GenericNode::ptr remove(std::string const & name); ///< Remove node \a name from the tree /**< The returned pointer may either be discarded, which @@ -459,15 +465,18 @@ namespace console { DirectoryNode & mkdir(std::string const & name); ///< Create sub-directory node - ChildrenRange children() const; - ///< Return iterator range over all children. + ChildrenRange children() const; ///< Return iterator range over all children. + /**< The returned range is sorted by child name. */ + + ChildrenRange completions(std::string const & s) const; + ///< Return iterator range of completions for \a s /**< The returned range is sorted by child name. */ ///\} /////////////////////////////////////////////////////////////////////////// template - GenericNode & traverse(ForwardRange const & range); + GenericNode & traverse(ForwardRange const & range, bool autocomplete=false); ///< Traverse node path starting at this node /**< The ForwardRange::value_type must be (convertible to) std::string. Each range element @@ -476,7 +485,11 @@ namespace console { If the range starts with an empty element, the traversal is started at the root() node, otherwise it is started at \a this node. The traversal supports '.', - '..' and ignores further empty elements. */ + '..' and ignores further empty elements. + + If \a autocomplete is set to \c true, invalid path + components which can be uniquely completed will be + completed automatically while traversing the tree. */ DirectoryNode & doc(std::string const & doc); ///< Set node documentation @@ -507,18 +520,6 @@ namespace console { {}; #endif - /** \brief Syntax error parsing command arguments exception - - All errors while parsing the arguments of a command must be signaled by throwing an instance - of SyntaxErrorException. This is important, so command overloading works. - */ - struct SyntaxErrorException : public senf::Exception - { - explicit SyntaxErrorException(std::string const & msg = ""); - - virtual char const * what() const throw(); - }; - /** \brief Config/console tree command node The CommandNode is the base-class for the tree leaf nodes. Concrete command node @@ -634,9 +635,10 @@ namespace console { }; #ifndef DOXYGEN - template + SimpleCommandNode & senf_console_add_node(DirectoryNode & node, std::string const & name, - Function const & fn, ...); + SimpleCommandNode::Function fn, int); + #endif DirectoryNode & root();