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

Здесь обсуждается всё, что касается макросов.
Post Reply
buniak_a_h
Posts: 2050
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 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.5.1
  1. Добавлена возможность удаления ветки дерева. Ошибки удаления пока не обрабатываются (кроме сообщения об ошибке).
  2. Исправлены ошибки:
    1. Вылет при обновлении ветки, если кэш не создавался и не читался с диска.
    2. Обновление корневой ветки по Ctrl+R.
    3. Сортировка и поиск папок были в некоторых местах регистрозависимыми (!).
  3. Рефакторинг
TreePanel_2_5_1.7z
(25.95 KiB) Downloaded 26 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.
Last edited by buniak_a_h on Sun 02 Aug, 2020 01:00, edited 27 times in total.
citRiks
Posts: 812
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 258 times
Been thanked: 46 times

Выделить и скопировать из режима просмотра (F3)

Post by citRiks »

buniak_a_h wrote: Sun 08 Mar, 2020 22:31 Самое трудоёмкое - сформировать собственно дерево (если не просто с отступами, а именно грид рисовать). А я как раз это и не стал делать.
1. Что такое "грид"?
2. Насколько я знаю, фильтрация в панелях невозможна, т.е. файл из которого делаем панель надо отфильтровать, сохранить, перезагрузить панель, чего ресурсо-затраты не дадут получать немедленную реакцию.
Last edited by HaRT on Tue 10 Mar, 2020 13:28, edited 2 times in total.
Reason: Показан текст из-под [offtopic]
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2050
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

Выделить и скопировать из режима просмотра (F3)

Post by buniak_a_h »

citRiks wrote: Mon 09 Mar, 2020 08:38
buniak_a_h wrote: Sun 08 Mar, 2020 22:31 Самое трудоёмкое - сформировать собственно дерево (если не просто с отступами, а именно грид рисовать). А я как раз это и не стал делать.
что такое "грид"?
Грид - линии, соединяющие листья и узлы дерева. Чисто для красоты, но наглядно. Плохо, что они зависят от того, последний узел среди sibling-потомков или нет. Ну и от выше расположенных узлов. У меня была прога на дельфях, найду - переведу. Вроде, эффективненько получилось.
citRiks wrote: Mon 09 Mar, 2020 08:38 2.) Насколько я знаю, фильтрация в панелях невозможна, т.е. файл из которого делаем панель надо отфильтровать, сохранить, перезагрузить панель, чего ресурсо-затраты не дадут получать немедленную реакцию.
Про фильтрацию в панелях смотрите тему про представление результатов поиска в панельном модуле. Я там пару форков представил; так вот в одном - фильтрация. Там, правда, условием видимости является условие файлового фильтра. Но это же не имеет значения; главное - есть boolean-значение «видно или нет».
Last edited by HaRT on Tue 10 Mar, 2020 13:28, edited 1 time in total.
Reason: Показан текст из-под [offtopic]
citRiks
Posts: 812
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 258 times
Been thanked: 46 times

Выделить и скопировать из режима просмотра (F3)

Post by citRiks »

buniak_a_h,
т.е., "грид" - это нарисованные псевдографикой ветки?
если готовить файл для дерева так,
то они вроде так уже есть нарисованные даже с фильтрацией:
edit:<tree > tree.txt & type tree.txt | find "что-нибудь"
(нажать Ф8 перевести в OEM кодировку)
прогу в дельфях - давайте, может пригодится
2.) Где тема с фильтрацией панели когда панель не файловая?
3.) сама идея фильтрации только через диалоги без АПИ, меня несколько отвращает
Напоминает мне самые ранние версии Windows (да и многие поныне их продукты)
где большинство всего настраивалось/задавалось только через GUI,
или какими-то страшными запрещенными недокументированными хаками.
(Ну в чем у разрабов проблема вынести это в АПИ? вопрос риторический если что)
Last edited by HaRT on Tue 10 Mar, 2020 13:28, edited 3 times in total.
Reason: Показан текст из-под [offtopic]
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2050
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

О как!!! Наша переписка с citRiks стала темой … Ну, раз так!
Во вложении вполне работоспособный панельный модуль, позволяющий даже делать некоторые полезные вещи (например, просматривать и переходить на папки из дерева)

Сам скрипт в первом сообщении темы
Last edited by buniak_a_h on Wed 11 Mar, 2020 03:44, edited 2 times in total.
buniak_a_h
Posts: 2050
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

Уважаемые знатоки! Не сможете ли Вы помочь мне в следующем вопросе (проблема пограничная панельного модуля и FastFind):
Имеется панельный модуль, представляющий дерево; некоторые узлы скрыты вследствие того, что родительский узел «схлопнут».
Пользователь инициирует быстрый поиск (Alt+буква).
К сожалению в поиске не участвуют те самые скрытые итемы. Я смог бы организовать поиск по всем узлам дерева и при нахождении раскрывать "мешающие" узлы, но для этого мне надо: (а) определить, что панель находится «в активном поиске» (не подумайте плохого); (б)получать сообщения, когда строка поиска меняется и (в)получать строку поиска. Есть ли такая возможность?
В статье, на которую я привёл ссылку, предлагается сделать поиск диалогом. Мне казалось бы логичным просто добавление поля SearchStr в структуру APanel/PPanel; если поиск не инициирован, это поле - nil. Иначе - искомая строка.
citRiks
Posts: 812
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 258 times
Been thanked: 46 times

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

Post by citRiks »

buniak_a_h,
Потестировал немного, нет слов, мой респект, видно что большая и продуманная работа сделана.
Кажется что наиболее близкая к оригинальному дереву и удобная реализация на эту тему.
Из пожеланий могу сказать разве что вот
1.) При самом открытии развернутыми показываются папки только двух уровней, и это разумно
Но если раскрывать свернутые папки, то они показываются уже в полном виде,
может быть ту же логику "два уровня развернуты, далее свернуты" применить и к развертываемым папкам?
Или, как вариант, назначить какое нажатие по которому сворачиваются-разворачиваются уровни.
2.) При переходе из дерева выше (в родительскую папку), выходим и из самого дерева
Может быть не выходить из дерева, а показывать его с уровня этой самой родительской папки?
так на мой взгляд логичнее и удобнее для пользователя
Last edited by citRiks on Wed 11 Mar, 2020 20:05, edited 1 time in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2050
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Wed 11 Mar, 2020 19:59 buniak_a_h,
<…>видно что большая и продуманная работа сделана.
На самом деле первый вариант занял часа два. Спасибо за tree.com - это ещё из MS-DOS, есессно, хорошо забытое :-)
citRiks wrote: Wed 11 Mar, 2020 19:59 Из пожеланий могу сказать разве что вот
1.) При самом открытии развернутыми показываются папки только двух уровней, и это разумно
Но если раскрывать свернутые папки, то они показываются уже в полном виде,
может быть ту же логику "два уровня развернуты, далее свернуты" применить и к развертываемым папкам?
на самом деле сделано было так специально. Логика такая: при вызове выводятся первые пара уровней, чтоб облегчить ориентацию. Если юзер раскрывает узел - показываю сразу до конца, что он видел, тут искомое или нет. Если он сворачивает внутренний узел, это сворачивание запоминается и уже не забывается.
citRiks wrote: Wed 11 Mar, 2020 19:59 Или, как вариант, назначить какое нажатие по которому сворачиваются-разворачиваются уровни.
Уже. Collapse all / Expand all сделаны. Правда, Collapse all зависит от того самого первоначального уровня.
citRiks wrote: Wed 11 Mar, 2020 19:59 2.) При переходе из дерева выше (в родительскую папку), выходим и из самого дерева
Может быть не выходить из дерева, а показывать его с уровня этой самой родительской папки?
так на мой взгляд логичнее для пользователя
И как тогда выйти?
Я сделал просто ввод "нового" корня дерева. По умолчанию подставляется текущий; соответственно, перейти на уровень выше - просто стереть имя последнего каталога.
--
Сказанное относится к версии 1.1.1, ещё не опубликованной.
citRiks
Posts: 812
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 258 times
Been thanked: 46 times

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

Post by citRiks »

buniak_a_h wrote: Wed 11 Mar, 2020 20:20 на самом деле сделано было так специально. Логика такая: при вызове выводятся первые пара уровней, чтоб облегчить ориентацию. Если юзер раскрывает узел - показываю сразу до конца, что он видел, тут искомое или нет. Если он сворачивает внутренний узел, это сворачивание запоминается и уже не забывается.
Ок, в принципе тоже логично ..
или может сделать настраиваемый "max-expand-level" ?
который например:
-1 - раскрывать полностью (как сейчас)
<номер> - раскрывать на <номер> уровней
(не настаиваю, если сильно добавляет работы или отвлекает от чего более важного)
buniak_a_h wrote: Wed 11 Mar, 2020 20:20 И как тогда выйти?
ну также как выходят из "натурального" дерева сейчас - Ctrl-T и вышел.
Любой хоткей в общем, или Alt-F1 (меню дисков)
buniak_a_h wrote: Wed 11 Mar, 2020 20:20 Я сделал просто ввод "нового" корня дерева. По умолчанию подставляется текущий; соответственно, перейти на уровень выше - просто стереть имя последнего каталога.
--
Сказанное относится к версии 1.1.1, ещё не опубликованной
больше догадываюсь о чем речь чем понимаю, но думаю дождемся новой версии и посмотрим :)
Last edited by citRiks on Wed 11 Mar, 2020 20:30, edited 1 time in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2050
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

citRiks, сейчас, на мой взгляд, главная проблема в том, что Quick Search не учитывает скрытые вложенные узлы. Проблему я описал двумя постами выше, но ответа нет. Видимо, не только я не знаю, что делать. Придётся, наверно, симулировать "быстрый поиск" через far.Text. Грустно … :-(
citRiks
Posts: 812
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 258 times
Been thanked: 46 times

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

Post by citRiks »

buniak_a_h,
очень может быть что ответа тут и не будет на данный момент,
так как панели не поддерживают скрытые items (как это по русски? предметы? сущности?),
и я не слышал чтобы это признавалось недостатком или проблемой, т.е. недостаточно важно.
и я думаю что надо действительно загружать полную версию из файла, ее фильтровать, показывать
или же перенeсти QuickSearch совсем закулисы, а оный диалог и реакцию симулировать создавая кастомный диалог с макросом.
если делать качественную симукяцию, то можно добится, вам работы только добавится,
если же "некачественную" то кажется что это будет немного не нaтурально в отличие от сегоднешней реализации,
впрочем все это рекомендую с оговоркой, т.к. тестирования у меня было лишь несколько минут пока
Last edited by citRiks on Wed 11 Mar, 2020 20:40, edited 1 time in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2050
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Wed 11 Mar, 2020 20:29 или может сделать настраиваемый "max-expand-level" ?
Очень не хотелось делать "развёрнутую" настройку. Сейчас там far.InputBox и far.Message. Развёрнутый диалог ну оооочень не хочется ваять.
Эх, надо делать IDE с визуальным проектированием диалогов …
citRiks
Posts: 812
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 258 times
Been thanked: 46 times

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

Post by citRiks »

buniak_a_h wrote: Wed 11 Mar, 2020 20:39
citRiks wrote: Wed 11 Mar, 2020 20:29 или может сделать настраиваемый "max-expand-level" ?
Очень не хотелось делать "развёрнутую" настройку. Сейчас там far.InputBox и far.Message. Развёрнутый диалог ну оооочень не хочется ваять.
Эх, надо делать IDE с визуальным проектированием диалогов …
я бы сказал, и имел ввиду на самом деле,
что конфиг этот надо бы делать в простейшем файле конфигурации,
тем кото работает в ФАРе это пробленой точно не будет, да и идеологически правильно,
ФАР и нужен для эффективной работы с текстовыми файлами и их правки,
кроме того, В ФАРе на мой взгляд во многом берется за образец Unix/Linux-way,
там большинство всего конфигурируется через файлы конфигов а диалогов в большинстве случаев и нет

Иными словами - диалоги ну их нафиг совсем,
(в том числе например и потому что частовато они забирают себе нажатия)
Делать прежде всего простейший конфиг-файл,
а далее если сойдутся звезды (желание+время+мольбы юзеров) то можно и диалог сделать
Last edited by citRiks on Wed 11 Mar, 2020 20:48, edited 2 times in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
HaRT
Moderator
Posts: 9530
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 229 times

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

Post by HaRT »

buniak_a_h wrote: Wed 11 Mar, 2020 20:30 Quick Search не учитывает скрытые вложенные узлы
Если он будет учитывать все скрытые элементы дерева, то он будет уже совсем не Quick… Во всяком случае, если я буду пользоваться таким деревом, то точно хотел бы иметь возможность быстро искать по показанным сейчас элементам, а если вглубь, то только явно.

Кстати, возможно, стоит глянуть в сторону интеграции с fzf (готовые сборки для Винды есть, описание по-русски не искал, но велики шансы, что где-то тоже есть).
Last edited by HaRT on Wed 11 Mar, 2020 21:04, edited 1 time in total.
Фар есть инструмент, а не нянька. © 2009 DrKnS
buniak_a_h
Posts: 2050
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

HaRT wrote: Wed 11 Mar, 2020 21:03 Если он будет учитывать все скрытые элементы дерева, то он будет уже совсем не Quick… <…>точно хотел бы иметь возможность быстро искать по показанным сейчас элементам
Спасибо, вы успокоили мою совесть :-)
HaRT wrote: Wed 11 Mar, 2020 21:03 Во всяком случае, если я буду пользоваться таким деревом, то точно хотел бы иметь возможность быстро искать по показанным сейчас элементам, а если вглубь, то только явно.
Ок, пусть ищут по Alt+F7
Post Reply

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