AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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).
Старый 14.06.2010, 16:34   #2  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Регистрация: 01.04.2005
Спасибо. Попробую.
Иногда моск взрывает от необходимости прокручивать код, после перещелка между методами. :-)
Старый 17.02.2012, 00:02   #3  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Небольшое логическое продолжение по итогам активного использования 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;
}
Теги
ax2009, ax3.0, ax4.0, tools, x++, законченный пример, инструменты, объявление переменной, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поменять вид курсора 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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:09.