Показать сообщение отдельно
Старый 13.02.2008, 16:13   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
до кучи
Когда-то ковырялся со списком всех пунктов меню. Тоже зачем-то нужен был уровень. Написал маленький джобик с использованием рекурсии, причём получившаяся компактность поразила. Может быть, на что сгодится (например, уровни надо куда-то в таблицу нагенерить). Уровень иерархии hLevel по ходу вычисляется простой инкрементацией "туда-сюда". Признаться, сейчас не сразу смогу сообразить, как это всё работает, но работает
X++:
static void Job_MenusList(Args _args)
{
    int         row, hLevel;
    TreeNode    treeNode = new xInfo().rootNode().AOTfindChild('Menus');

    void nextNode( treeNode _tn)
    {
        ;
        hLevel++;
        _tn = _tn.AOTfirstChild();
        while (_tn )
        {
            row++;
            info(strfmt('%1 -- %2 -- %3',
                        row,  hLevel,  _tn.treeNodePath()));
            nextNode(_tn );
            _tn = _tn.AOTnextSibling();
        }
        hLevel--;
    }
    ;
    nextNode( treeNode );
}