Реализовать дерево директорий панельным модулем на Луа

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

citRiks wrote: Sun 08 Mar, 2020 21:37
buniak_a_h wrote: Sat 07 Mar, 2020 19:41 Я начинал делать дерево в виде панельного модуля. Вот это мне показалось наиболее удобным. Но… Отвлекли на работе.
ну положите куда-нибудь на видное место если там есть хоть что-то полезное, может кто-нибудь продолжит
Спасибо citRiks-у за наводку на tree.com - давно забытая утилитка. Получился довольно небольшой и вполне пригодный модуль. Позволяет открывать-закрывать узлы дерева, задавать глубину, на которую первоначально открываются узлы; просматривать в пассивной панели текущую папку и переходить в панели дерева на выбранную папку.



Чего может не хватать:
  • обновления дерева (по таймеру, например);
  • вывода характеристик (суммарный размер поддерева, самого нового файла, количество файлов).
  • Что ещё - не знаю.
Если кому-нить это интересно, перечисленные недоделки я по возможности доделаю. Также принимаются предложения, чего может ещё не хватать для нормальной работы. Но так-то вроде вполне удобненько получилось … :-)
Опять же если будут добровольцы - локализацию и перевод хелпа были бы полезны. Если скрипт кому-нить покажется полезным …

Версия 2.6.6.
  1. Исправлен «снос» имени текущей папки в командную строку: теперь оно заменяет отмеченную часть командной строки или (если ничего не отмечено) вставляется в текущую позицию строки.
  2. Исправлена мелкая неточность: вопрос о пересоздании кэша задаётся только в том случае, если задан период актуализации кэша
TreePanel_2_6_6.7z
(31.08 KiB) Downloaded 144 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Mon 14 Dec, 2020 07:40, edited 37 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Реализовать дерево директорий панельным модулем на Луа

Post by citRiks »

Latest post of the previous page:

buniak_a_h,
спасибо за разьяснения
(думаю что тут обсуждать алгоритм лазанья по дереву вполне уместно, чем где бы то ни было)
все таки выглядит что бинарный поиск по большим обьемам предметов
должен быть более эффективным, да и не супер сложным по реализации,
но доверяю вашим проверкам и опыту.

А то next() выглядит больше как тотальное сканирование,
хоть и по отсортированному оно конечно лучше чем по неотсортированном

Проблема бинарного поиска еще и в том что он не умеет искать по средней части строки,
например найти все папки *\some_folder*\*
Last edited by citRiks on Sun 12 Apr, 2020 14:12, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

citRiks wrote: Sun 12 Apr, 2020 14:10 next() выглядит больше как тотальное сканирование
Это и есть тотальное сканирование. И я его не использую. Я привёл его только как доказательство (некорректное, кстати!), что движок Lua сортирует хэшированные таблицы по индексу.
И, кстати, Вы писали про хэш-таблицы. Так вот: возможно, Lua заводит как раз для Lua-таблицы связанную с ней хэш-таблицу; именно за счёт этого (а также за счёт получения значения. Item[j].FileName - трудоёмкая операция) и получается скорость.
Last edited by buniak_a_h on Sun 12 Apr, 2020 14:21, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by zg »

buniak_a_h wrote: Wed 15 Apr, 2020 18:50 citRiks, я, наверно, неясно высказался.
Проблема не в событии смены папки (да хоть по таймеру проверять!). А в том, что функция panel.RedrawPanel, при помощи которой можно переместить указатель, требует либо хендлера (которого нету), либо whatpanel - призак активной-пассивной панели. Который без описанных мной танцев с бубнами тоже не определить.
вот я скачал ваш скрипт и вызова panel.RedrawPanel там не обнаружил. в каком месте вам нужно его вызывать?
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

zg, я не стал реализовывать такой функционал. Пока.
Если Вы всерьёз, то поищите места по IsPanelModule в этом скрипте и в "сопряжённом (поиск) скрипте BAX_QSearch.lua по слову ModuleId - это именно поиск панели, которые выводит панельный модуль. Если б был хендлер панели, который заносился бы в Open (хотя эта функция почему-то у меня не вызывается. Но это - уже следующий вопрос) - поиск был бы легче. Да и вообще на самом деле все функции таблицы panel были бы заточены на нужную панель по хендлеру. Например, ClosePanel вызывается для активной панели. Но ведь панель можно закрыть и находясь на другой (по AltF1/AltF2, например). И тогда это работать не будет.
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by zg »

buniak_a_h wrote: Thu 16 Apr, 2020 01:01Если Вы всерьёз
нет, сейчас всем будет очень смешно.
buniak_a_h wrote: Thu 16 Apr, 2020 01:01то поищите места по IsPanelModule в этом скрипте
поискал. т.е. вам нужно вызвать panel.RedrawPanel для вашей же панели из mod.ClosePanel и mod.GetFindData. я правильно понимаю?
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

И из "внешнего" по отношению к mod скрипта, которому эта панель передана при "регистрации" (регистрация - из mod.ProcessPanelInput, далее BAX_QSearch как бы "знает"нужную панель.)
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by zg »

buniak_a_h wrote: Thu 16 Apr, 2020 05:00mod.ProcessPanelInput
даже так. а перерисовать вам надо вашу же панель или какую-то другую?
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

zg wrote: Thu 16 Apr, 2020 07:22даже так.
В ProcessPanelInput - только "регистрация" - передача панели (GUID модуля панели и функций фильтрации/поиска) в другой скрипт. Тот его запоминает и использует для некоторых операций. В частности, для определения, доступен ли фильтр или только поиск, и функции фильтрации/поиска
zg wrote: Thu 16 Apr, 2020 07:22 вашу же панель или какую-то другую?
Мою, но я не всегда знаю, активная она или нет
Last edited by buniak_a_h on Thu 16 Apr, 2020 10:20, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by zg »

buniak_a_h wrote: Thu 16 Apr, 2020 10:19Мою, но я не всегда знаю, активная она или нет
это не нужно.
вот смотрите, из вашего же скрипта function mod.ProcessPanelInput (object, handle, Rec) и из док result = panel.RedrawPanel (handle, whatpanel [, redrawinfo]) и для второй функции вам нужен хендл, да? вы ничего не замечаете? подсказка: то что надо заметить находится между первой и второй запятой в первом куске кода.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

zg, спасибо.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Реализовать дерево директорий панельным модулем на Луа

Post by DV »

Вариант без использования tree.com отложен ввиду отсутствия очевидных преимуществ?
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

DV wrote: Wed 01 Jul, 2020 14:09 Вариант без использования tree.com отложен ввиду отсутствия очевидных преимуществ?
Версия 2.1.1.
Очевидные преимущества видны невооружённым взглядом. В частности, кроме текста дерева можно добавить параметры папок (время, в частности). Также составляется дерево архива. Увы, не все кайфы реализованы.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

P/S. В 2.1.1 затесался отладочный вывод. Убран в 2.1.2. Прошу прощения у всех пострадавших…
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Реализовать дерево директорий панельным модулем на Луа

Post by DV »

Спасибо! Вижу по изменениям в коде, что задачка была трудоёмкая!
В целом всё работает замечательно. Не сразу сообразил, что для навигации (перехода в) папку внутри архива нужно обязательно нажимать F3.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

DV wrote: Sat 11 Jul, 2020 10:29 для навигации (перехода в) папку внутри архива нужно обязательно нажимать F3
Есть настройка типа "непосредственный переход". Если включена, то при переходе по дереву в другой панели открывается текущая папка дерева.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

DV, извините, не заметил слов "внутри архива". Да, я эту настройку для случая внутри архива специально когда-то не учитывал (переход во временной папке, которая к тому же может быть уже удалена, смысла не имел). Теперь это можно вернуть. Сделаю (заодно и параметры папок - времена созданий/модификаций).
Post Reply

Return to “Обсуждение макросов”