Page 1 of 14

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

Posted: Sun 08 Mar, 2020 22:31
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 - давно забытая утилитка. Получился довольно небольшой и вполне пригодный модуль. Позволяет открывать-закрывать узлы дерева, задавать глубину, на которую первоначально открываются узлы; просматривать в пассивной панели текущую папку и переходить в панели дерева на выбранную папку.



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

Версия 1.4.2
  1. Полностью реализован функционал при работе с деревом плагина ArcLite (открытие текущей папки на пассивной панели, выход из дерева с переходом на текущую папку)
  2. Очередная попытка навести порядок с корневой папкой при старте модуля и с папкой возврата.
  3. Реализовано восстановление позиций как активной, так и пассивной панелей.
  4. Для плагиновой (ArcLite) панели реализовано автоматическое открытие пути от корневой папки к текущей и позиционирование на ней при старте дерева.
  5. Изменена логика открытия узлов дерева при старте: "свёрнутыми" делаются не только узлы заданного уровня вложенности, но и все, входящие в них.
  6. При вызове по префиксу с указанием корневого пути (например, ptree:C:\%TEMP%), если текущая папка является вложенной по отношению к указанной в командной строке, дерево автоматически позиционируется на текущей папке.
  7. Добавлена возможность "косвенного" указания дерева в командной строке:
    ptree:@"<имя_файла_дерева>"
    где имя_файла_дерева - имя файла - результата вывода системной утилиты tree.com.
    *) Этот синтаксис делает возможным использование кэша… Ну, правда, пока только в полуавтоматическом режиме.
TreePanel_1_4_2.7z
(11.96 KiB) Downloaded 8 times


1)Корневой каталог - каталог, который вместе с вложенными показан на дереве.

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

Posted: Mon 09 Mar, 2020 08:38
by citRiks
buniak_a_h wrote:
Sun 08 Mar, 2020 22:31
Самое трудоёмкое - сформировать собственно дерево (если не просто с отступами, а именно грид рисовать). А я как раз это и не стал делать.
1. Что такое "грид"?
2. Насколько я знаю, фильтрация в панелях невозможна, т.е. файл из которого делаем панель надо отфильтровать, сохранить, перезагрузить панель, чего ресурсо-затраты не дадут получать немедленную реакцию.

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

Posted: Mon 09 Mar, 2020 10:59
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-значение «видно или нет».

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

Posted: Mon 09 Mar, 2020 12:56
by citRiks
buniak_a_h,
т.е., "грид" - это нарисованные псевдографикой ветки?
если готовить файл для дерева так,
то они вроде так уже есть нарисованные даже с фильтрацией:
edit:<tree > tree.txt & type tree.txt | find "что-нибудь"
(нажать Ф8 перевести в OEM кодировку)
прогу в дельфях - давайте, может пригодится
2.) Где тема с фильтрацией панели когда панель не файловая?
3.) сама идея фильтрации только через диалоги без АПИ, меня несколько отвращает
Напоминает мне самые ранние версии Windows (да и многие поныне их продукты)
где большинство всего настраивалось/задавалось только через GUI,
или какими-то страшными запрещенными недокументированными хаками.
(Ну в чем у разрабов проблема вынести это в АПИ? вопрос риторический если что)

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

Posted: Tue 10 Mar, 2020 21:58
by buniak_a_h
О как!!! Наша переписка с citRiks стала темой … Ну, раз так!
Во вложении вполне работоспособный панельный модуль, позволяющий даже делать некоторые полезные вещи (например, просматривать и переходить на папки из дерева)

Сам скрипт в первом сообщении темы

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

Posted: Wed 11 Mar, 2020 03:43
by buniak_a_h
Уважаемые знатоки! Не сможете ли Вы помочь мне в следующем вопросе (проблема пограничная панельного модуля и FastFind):
Имеется панельный модуль, представляющий дерево; некоторые узлы скрыты вследствие того, что родительский узел «схлопнут».
Пользователь инициирует быстрый поиск (Alt+буква).
К сожалению в поиске не участвуют те самые скрытые итемы. Я смог бы организовать поиск по всем узлам дерева и при нахождении раскрывать "мешающие" узлы, но для этого мне надо: (а) определить, что панель находится «в активном поиске» (не подумайте плохого); (б)получать сообщения, когда строка поиска меняется и (в)получать строку поиска. Есть ли такая возможность?
В статье, на которую я привёл ссылку, предлагается сделать поиск диалогом. Мне казалось бы логичным просто добавление поля SearchStr в структуру APanel/PPanel; если поиск не инициирован, это поле - nil. Иначе - искомая строка.

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

Posted: Wed 11 Mar, 2020 19:59
by citRiks
buniak_a_h,
Потестировал немного, нет слов, мой респект, видно что большая и продуманная работа сделана.
Кажется что наиболее близкая к оригинальному дереву и удобная реализация на эту тему.
Из пожеланий могу сказать разве что вот
1.) При самом открытии развернутыми показываются папки только двух уровней, и это разумно
Но если раскрывать свернутые папки, то они показываются уже в полном виде,
может быть ту же логику "два уровня развернуты, далее свернуты" применить и к развертываемым папкам?
Или, как вариант, назначить какое нажатие по которому сворачиваются-разворачиваются уровни.
2.) При переходе из дерева выше (в родительскую папку), выходим и из самого дерева
Может быть не выходить из дерева, а показывать его с уровня этой самой родительской папки?
так на мой взгляд логичнее и удобнее для пользователя

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

Posted: Wed 11 Mar, 2020 20:20
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, ещё не опубликованной.

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

Posted: Wed 11 Mar, 2020 20:29
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, ещё не опубликованной
больше догадываюсь о чем речь чем понимаю, но думаю дождемся новой версии и посмотрим :)

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

Posted: Wed 11 Mar, 2020 20:30
by buniak_a_h
citRiks, сейчас, на мой взгляд, главная проблема в том, что Quick Search не учитывает скрытые вложенные узлы. Проблему я описал двумя постами выше, но ответа нет. Видимо, не только я не знаю, что делать. Придётся, наверно, симулировать "быстрый поиск" через far.Text. Грустно … :-(

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

Posted: Wed 11 Mar, 2020 20:36
by citRiks
buniak_a_h,
очень может быть что ответа тут и не будет на данный момент,
так как панели не поддерживают скрытые items (как это по русски? предметы? сущности?),
и я не слышал чтобы это признавалось недостатком или проблемой, т.е. недостаточно важно.
и я думаю что надо действительно загружать полную версию из файла, ее фильтровать, показывать
или же перенeсти QuickSearch совсем закулисы, а оный диалог и реакцию симулировать создавая кастомный диалог с макросом.
если делать качественную симукяцию, то можно добится, вам работы только добавится,
если же "некачественную" то кажется что это будет немного не нaтурально в отличие от сегоднешней реализации,
впрочем все это рекомендую с оговоркой, т.к. тестирования у меня было лишь несколько минут пока

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

Posted: Wed 11 Mar, 2020 20:39
by buniak_a_h
citRiks wrote:
Wed 11 Mar, 2020 20:29
или может сделать настраиваемый "max-expand-level" ?
Очень не хотелось делать "развёрнутую" настройку. Сейчас там far.InputBox и far.Message. Развёрнутый диалог ну оооочень не хочется ваять.
Эх, надо делать IDE с визуальным проектированием диалогов …

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

Posted: Wed 11 Mar, 2020 20:45
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,
там большинство всего конфигурируется через файлы конфигов а диалогов в большинстве случаев и нет

Иными словами - диалоги ну их нафиг совсем,
(в том числе например и потому что частовато они забирают себе нажатия)
Делать прежде всего простейший конфиг-файл,
а далее если сойдутся звезды (желание+время+мольбы юзеров) то можно и диалог сделать

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

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

Кстати, возможно, стоит глянуть в сторону интеграции с fzf (готовые сборки для Винды есть, описание по-русски не искал, но велики шансы, что где-то тоже есть).

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

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