On 5 Jun, 19:26, Travis <travis.bow@gmail.com> wrote:
> On Jun 5, 10:35 am, kwikius <a
@servocomm.freeserve.co.uk> wrote:
> > On 5 Jun, 16:58, Travis <travis.bow@gmail.com> wrote:
> > > Is there a community accepted best way to store a menu tree for an
> > > interface in a data structure. Ideally I would like something that
> > > searches fast so given a menu structure like this
> > > File
> > > / | \
> > > / | \
> > > Print Exit Edit
> > > / \
> > > Copy Paste
> > > as an example, I could easily get a pointer to the "Edit" node.
> > Its basically a directory tree e.g like a disc file system. Use a path
> > string to identify/return the required node etc ( and can add similar
> > complexities e.g absolute relative) but there is no standard library
> > way. AFAIK speed is not critical even for large menus though.
> > regards
> > Andy Little
> Could you elaborate a litlte more on the string path setup? I assume
> you mean something like "File\Edit\Paste".
Yep.
Which sounds good but how
> do I store these all together?
simply as a string:
std::string my_path = "File\Edit\Paste";
This is the higher level abstraction concisely representing a node in
a tree.
And how does "File\Edit" know that "File
> \Edit\Paste" and "..\Copy" are its children?
It has to go looking. You only need a particular node when you need it
as it were. You need to provide mechanisms to detect and report
errors, if a node doesnt exist that you thought did.
As a start it may be worth working on a function to parse a text
path("File/Edit/Paste") into a list of strings(say):
std::list<std::string> make_internal_path( std:string const &
user_path);
The returned list would then contain "File", "Edit", "Paste" as
separate strings
Once you have implemented that then you could implement something like
Alexanders tree and see how you can use the list of strings to try to
find a node in the tree (and what to do if you cant find it).
regards
Andy Little