Показать сообщение отдельно
Старый 13.06.2010, 15:54   #1  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
AXGoBack - скрипт для возврата к предыдущей позиции курсора в редакторе
ver. 1.0.0 beta, 13.06.2010

Возможности:
- Позволяет вернуться к позиции курсора в редакторе, предварительно сохраненной в кэше скриптом AXGoToDeclarationXRef ver. 1.0.3 beta (AXGoToDeclarationXRef - утилита перехода к объявлению переменной) или более поздней с включенным параметром #SaveGoBackPosition.
- Работает в AX 3, AX 4, AX 2009.

Установка:
- Добавить метод в класс EditorScripts и скомпилировать. После этого в контекстном подменю редактора Scripts/addIns появится пункт aaAXGoBack.

Примечание:
- Данный скрипт использует реализацию отложенного вызова функции перехода к позиции курсора из скрипта AXGoToDeclarationXRef ver. 1.0.3 beta (AXGoToDeclarationXRef - утилита перехода к объявлению переменной) или более поздней.

Спасибо Alex_KD и kashperuk за некоторые использованные идеи.

Сообщения об ошибках, конструктивная критика и идеи по доработке приветствуются.

X++:
//AXGoBack ver. 1.0.0 beta (for AX 3, AX 4, AX 2009), 13.06.2010
//Developed by alex55 (AXforum.info), 13.06.2010
//Home page: axforum.info/forums/showthread.php?p=226663
//Thanks to Alex_KD and kashperuk from AXForum.info for some used ideas
void aaAXGoBack(Editor e)
{
    #AOT

    #if.ReferencesPath
        #define.AX4OrAX5
    #endif

    #define.ThisClassCache('AXGoToDeclarationXRefClass')
    #define.ParamsCache('AXGoToDeclarationXRefParams')
    #define.GoBackParamsCache('AXGoBackParams')

    SysGlobalCache      globalCache;
    Column              editorColumn;
    Line                editorLine;
    TreeNodePath        methodNodePath;
    TreeNode            treeNode;
    ;

    globalCache = infolog.globalCache();
    
    if (globalCache)
    {
        [methodNodePath, editorLine, editorColumn] = globalCache.get(#GoBackParamsCache, #GoBackParamsCache, conNull());
        treeNode = TreeNode::findNode(methodNodePath);

        if (treeNode)
        {
            #if.AX4OrAX5
                 treeNode.AOTedit(editorLine, editorColumn);
            #endif

            #ifnot.AX4OrAX5
                infolog.globalCache().set(#ThisClassCache, #ThisClassCache, this);
                infolog.globalCache().set(#ParamsCache, #ParamsCache, [methodNodePath, editorLine, editorColumn]);
                infolog.addTimeOut(this, methodstr(EditorScripts, aaAXGoToDeclarationXRef), 10, false);
            #endif
        }

        globalCache.clear(#GoBackParamsCache);
    }

    return;
}
За это сообщение автора поблагодарили: Logger (4), Red Stranger (1), coolibin (1), gl00mie (4).