AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 13.06.2010, 15:54   #1  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Join Date: 13.02.2007
Location: Москва
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;
}
This post has been rated by: Logger (4), Red Stranger (1), coolibin (1), gl00mie (4).
Old 14.06.2010, 16:34   #2  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Join Date: 01.04.2005
Спасибо. Попробую.
Иногда моск взрывает от необходимости прокручивать код, после перещелка между методами. :-)
Old 17.02.2012, 00:02   #3  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Join Date: 13.02.2007
Location: Москва
Небольшое логическое продолжение по итогам активного использования hot-keys для скриптов:

AXSaveLocation ver. 1.0.0 beta (for AX4, AX5), 16.02.2012

Назначение:
Скрипт для сохранения текущей позиции курсора в редакторе с целью последующего возврата к ней скриптом AXGoBack.

X++:
//AXSaveLocation ver. 1.0.0 beta (for AX4, AX5), 16.02.2012
//Developed by alex55 (AXforum.info)
//Home page: axforum.info/forums/showthread.php?p=226663
void aaAXSaveLocation(Editor e)
{
    #define.SaveLocationParamsCache('AXSaveLocationParams')
    Column              editorColumn;
    Line                editorLine;
    TreeNodePath        methodNodePath; //Initial method path
    ;
    
    editorLine = e.currentLineNo() + 1;
    editorColumn = e.ColumnNo() + 1;
    methodNodePath = e.path();
    
    infolog.globalCache().set(#SaveLocationParamsCache, #SaveLocationParamsCache, [methodNodePath, editorLine, editorColumn]);

    return;
}

AXGoBack ver. 1.0.1 beta (for AX4, AX5), 16.02.2012

Доработано:
- Возможность однократного возврата после перехода к объявлению переменной объединена с возможностью многократного возврата к позиции курсора, сохраненной скриптом AXSaveLocation. Думаю в таком варианте будет удобно использовать на общем hot-key.
- Убрана поддержка AX3.

X++:
//AXGoBack ver. 1.0.1 beta (for AX4, AX5), 16.02.2012
//Developed by alex55 (AXforum.info)
//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')
    #define.SaveLocationParamsCache('AXSaveLocationParams')

    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

            globalCache.clear(#GoBackParamsCache);
        }
        else
        {
            [methodNodePath, editorLine, editorColumn] = globalCache.get(#SaveLocationParamsCache, #SaveLocationParamsCache, conNull());
            treeNode = TreeNode::findNode(methodNodePath);

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

    return;
}
Tags
ax2009, ax3.0, ax4.0, tools, x++, законченный пример, инструменты, объявление переменной, полезное

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Поменять вид курсора dreamer DAX: Программирование 9 13.08.2010 15:23
Изменение "курсора" в цикле ZVV DAX: Программирование 8 09.12.2008 15:11
Инициализация записи из курсора в форме andy239 DAX: Программирование 5 16.08.2005 15:00
Как расчитать значение курсора при вызове initValue в таблице? Red Stranger DAX: Программирование 8 06.04.2005 16:24

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 01:48.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.