Double Commander

Файловый менеджер

Модератор: Модераторы

Сообщение B4rr4cuda » 28.01.2008 12:34:38

Пока копал KasToolbar пришла мысль:
Есть такая полезная утилитка для ТС, как TCMenu.
Кликаем на кнопочку в тулбаре - вуаля раскрывается меню. Очень удобно и приятно. В общем нашел решение, как это сделать в DC, вот example:
В MainToolBarToolButtonClick вызываем:

Код: Выделить всё
ExecCmdEx(NumberOfButton);

где
Код: Выделить всё
function TfrmMain.ExecCmdEx(ButtonIndex:integer): boolean;
var cmd:string;
begin
   cmd:=MainToolBar.GetButtonX(ButtonIndex,cmdx);
   actionLst.ActionByName(Cmd).Tag:=ButtonIndex;

if actionLst.ActionByName(Cmd) <> nil then
    Result := actionLst.ActionByName(Cmd).Execute
  else
    Result := ExecCmdFork(Format('"%s"', [Cmd]));
end;


Добавляем action - actShowButtonMenu.

Код: Выделить всё
procedure TfrmMain.actShowButtonMenuExecute(Sender: TObject);
var Point:TPoint;
  lst:TKAStoolBar; var i:integer; x:TMenuItem; cmd:string;
begin

     cmd:=MainToolBar.GetButtonX((Sender as TAction).tag,CmdX);
     pmToolMenu.Items.Clear;
     lst:=TKAStoolBar.Create(nil);

     lst.LoadFromFile(gpIniDir + MainToolBar.GetButtonX((Sender as TACtion).tag,ParamX));
     for i:=1 to lst.ButtonCount do
       begin
         X:=TMenuItem.Create(pmToolMenu);
         x.Caption:=lst.GetButtonX(i,MenuX);
         pmToolmenu.Items.Add(x);
       end;
     lst.free;
     Point := Mouse.CursorPos;
     pmToolMenu.PopUp(Point.x,Point.Y);

end;

Заодно решается проблема передачи параметров.
(Если я туплю и это не проблема, то ткните носом пожалуйста)

Использовал для вытягивания бара KasToolbar, что не есть гуд. Думаю стоит вынести функции работы с бар файлом в отдельный класс.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Alexx2000 » 28.01.2008 18:02:49

Можно сделать, не вижу в этом особых проблем.
По поводу параметров, думал сделать примерно так:
    - Завести переменную, что-то типа Parameters
    - В ExecCmd заполнять ее
    - В actions которые понимают параметры считывать её

Думаю стоит вынести функции работы с бар файлом в отдельный класс.

Как это сделаем, так сразу и меню добавим.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Сообщение B4rr4cuda » 29.01.2008 01:59:24

По поводу параметров, думал сделать примерно так:

- Завести переменную, что-то типа Parameters
- В ExecCmd заполнять ее
- В actions которые понимают параметры считывать её

А зачем? Если вот этого
Код: Выделить всё
actionLst.ActionByName(Cmd).Tag:=ButtonIndex;
...
MainToolBar.GetButtonX((Sender as TAction).tag,...);
хватает для доступа ко всей информации кнопки??? Я тоже сначала хотел добавить переменую, ну а дальше? Когда понадобится другое свойство? Опять переменые плодить?

Патч добавил. Чем тебе не понравился
property Commands?

Отвечу здесь. Не понравилось отсутствием централизованости и наличием уже трех переменых для хранения частей одного логического элемента, только на этом этапе. Просто подобный опыт у меня уже есть (BarEditor) и не хочется повторно наступать на те же грабли снова. Начиналось там тоже разрознеными листами. Потом начинается путаница в индексах, потом задолбывает писать кучу параметров для передачи одной кнопки и тд.
Просто TKasToolbar используется и для дисковых панелей.
И там удобно использовать свойства Buttons и Commands

Commands и другие листы можно оставить в качестве альтернативного способа доступа, но только не как основного.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Alexx2000 » 29.01.2008 14:49:54

B4rr4cuda писал(а):
Патч добавил. Чем тебе не понравился
property Commands?

Отвечу здесь. Не понравилось отсутствием централизованости и наличием уже трех переменых для хранения частей одного логического элемента, только на этом этапе. Просто подобный опыт у меня уже есть (BarEditor) и не хочется повторно наступать на те же грабли снова. Начиналось там тоже разрознеными листами. Потом начинается путаница в индексах, потом задолбывает писать кучу параметров для передачи одной кнопки и тд.

Логично я с этим полностью согласен.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Сообщение B4rr4cuda » 30.01.2008 06:35:51

Опять мысли посетили мою голову.
1. Так как в KasBarMenu хинт кнопки присваивается к MenuItem.Caption, то пустая кнопка с подсказкой - (минус), будет разделителем меню. 2Alexx2000 добавь пожалуйста в семпловый default.bar.

2. Хоткеи и команды. Текущий вариант работы с хоткеями - тупиковый.
Назначение на разные хоткеи одной команды с разными параметрами - невозможно.
Предлагаю хранение и работу с хоткеями организовать схоже с Toolbar-ом. Конфиг хранить в *.бар формате, только поле ShortCut добавить. Диалог настройки хоткеев сделать аналогично fConfigToolbar с небольшими изменениями. Чуток переделал KasBarFiles, должно подойти под это дело. (патч кинул на sf)

3. После реализации пункта 2 и небольшой правки DC, возможно будет создание пользователем (!) любого количества (!) необходимых ему меню, подвязаных к хоткеям.

4. Добавление скриптового языка (lua) (знаю назойлив, но это будет потрясающая функциональность =)) в связке с KasBarMenu освобождает от необходимости реализовывать динамические пользовательские меню.

5. Для ТС есть проги очень облегчающие жизнь - наследники ChoiseEditora: F4Menu и OFTC.
Для DC это частный случай пункта 4, реализуемый уже сейчас.

6. Документацию бы для разработчиков. А то мелькнет мысля и начинаешь изобретать велосипед, а потом покопаешься в коде и видишь, что "... все уже написано до нас " (с)
Я понимаю, что полноценую документацию ближайшее время ожидать не приходится, но хотя бы краткое описание функций и модулей. Очень уж высокий порог вхождения, уже месяц ковыряю и только начинаю понимать откуда ноги растут. Благо имена говорящие, иначе вообще трудно было бы.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Alexx2000 » 30.01.2008 16:40:49

1. Так как в KasBarMenu хинт кнопки присваивается к MenuItem.Caption, то пустая кнопка с подсказкой - (минус), будет разделителем меню. 2Alexx2000 добавь пожалуйста в семпловый default.bar.

Добавил
2. Хоткеи и команды. Текущий вариант работы с хоткеями - тупиковый.
Назначение на разные хоткеи одной команды с разными параметрами - невозможно.
Предлагаю хранение и работу с хоткеями организовать схоже с Toolbar-ом. Конфиг хранить в *.бар формате, только поле ShortCut добавить. Диалог настройки хоткеев сделать аналогично fConfigToolbar с небольшими изменениями. Чуток переделал KasBarFiles, должно подойти под это дело. (патч кинул на sf)

Оригинальная идея, это даст неплохие возможности настройки
4. Добавление скриптового языка (lua) (знаю назойлив, но это будет потрясающая функциональность =)) в связке с KasBarMenu освобождает от необходимости реализовывать динамические пользовательские меню.

Используя pLua, как я понял это несложно сделать, только надо определить список объектов, к которым будет предоставлен доступ.
хотя бы краткое описание функций и модулей

Постараюсь сделать в ближайшее время
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Сообщение B4rr4cuda » 30.01.2008 18:02:08

Используя pLua, как я понял это несложно сделать, только надо определить список объектов, к которым будет предоставлен доступ.

По идее, ко всем графическим элементам главного окна

-----------
позволит писать скрипты формирующие вид интерфейса, аля вид - "простой"\"работа"\"ультраадвансед"\"сортировка инфы" и тд (которые можно будет подвязать на хоткеи, кстати команду для запуска скриптов надо будет добавить)
-------------


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

-------------
скрипты автоматизации - динамическое меню, автоудаление временых файлов, выделение дубликатов, синхронизация каталогов, синхроная смена вкладок и тд
-------------


+
вызов всех внутрених команд с передачей параметров из скриптов. Это обязательно - будет расширеный аналог ТС-шного SendMessage(WM_USER+51,<command>,0);
Это, мой воспаленный недосыпом мозг, выдал для начала. Возможно что-то упустил...

-------------
Как пример, скрипт формирующий бар файл, в зависимости от типа файла под курсором и вызов барменю для выбора программы которой этот файл открывать (а-ля ChoiseEditor). Или круче - типа шутки: скриптик имитирующий работу пользователя в фм. :) Представте, фм сам ищет какие-то файлы, что-то копирует, редактирует и все наглядно,графически и интерактивно. :D %) (bash скрипты конечно круче, но использовать такой скриптик, как наглядное пособие для обучения работы с фм и демонстрации возможностей этого самого фм - самое оно.)
-------------


Да, о диалоге упаковки - может не стоит повторять ошибки Гислера выдавая список архиваторов Radiobutton-ами, а отображать их в листе ( с симпотишными иконками и с выводом наверх частоиспользуемых, опционально)? По этому поводу было много копий сломано...
Если уж делать клон, так обходя подводные камни и недочеты прототипа.

PS. Есть продвижения в "открытии файлов" (1870808)?
Если б не это, я бы уже начал пользовать DC, как второй фм. А так, тока потестировать.
И ассоциирование по типам гуйное надо бы сделать.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Alexx2000 » 30.01.2008 18:30:07

Да, о диалоге упаковки - может не стоит повторять ошибки Гислера выдавая список архиваторов Radiobutton-ами, а отображать их в листе ( с симпотишными иконками и с выводом наверх частоиспользуемых, опционально)? По этому поводу было много копий сломано...
Если уж делать клон, так обходя подводные камни и недочеты прототипа.

Сначало тоже думал об этом, но дизайнер интерфейса с меня не очень.
Поэтому пока сделал так.
PS. Есть продвижения в "открытии файлов" (1870808)?
Если б не это, я бы уже начал пользовать DC, как второй фм. А так, тока потестировать.

Все оказалось не так просто, как мне показалось.
Однако в принципе решение уже найдено, надо дооформить и закоммитить.

И ассоциирование по типам гуйное надо бы сделать.

Ага, давно об этом думаю, никак руки не дойдут.
Да и формат в котором сейчас это хранится не слишком удобен, для чтения/записи. Сейчас есть только класс для чтения.
Может быть стоит это дело переработать :?:
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Сообщение B4rr4cuda » 31.01.2008 19:17:40

Сначало тоже думал об этом, но дизайнер интерфейса с меня не очень.

Главное правило дизайнера интерфейсов - делай так, чтобы было удобно. :)
А импиритивное правило:
если этим удобно пользоваться тебе - будет удобно пользоваться кому-то еще.
Я тоже не дизайнер, но применение этих правил даёт результат.
Лучше таки сделать лист. Вот темка с обсуждением и голосованием, в качестве доп. сведений и статистики

Однако в принципе решение уже найдено, надо дооформить и закоммитить.

Отлично. :)

Ага, давно об этом думаю, никак руки не дойдут.
Да и формат в котором сейчас это хранится не слишком удобен, для чтения/записи. Сейчас есть только класс для чтения.
Может быть стоит это дело переработать

Видишь ли, формат неудобен, спору нет, но он проверен временем и понятен юзеру .
Насчет переработки - если это нужно для локализации ошибок или не хватает текущей функциональности - то можно и переделать. Иначе - не стоит. Анекдот про солнце и сына программиста, думаю, известен. :)
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Alexx2000 » 01.02.2008 01:28:58

Запуск файлов уже переделал, пробуем...
Видишь ли, формат неудобен, спору нет, но он проверен временем и понятен юзеру .
Насчет переработки - если это нужно для локализации ошибок или не хватает текущей функциональности - то можно и переделать. Иначе - не стоит.

В принципе можно оставить и его, только хотелось бы добавить название категории (можно сделать в рамках этого формата, добавить что-то типа Name). Ну и добавить функции записи в этот самый формат.
Анекдот про солнце и сына программиста, думаю, известен.

:D
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Сообщение B4rr4cuda » 01.02.2008 04:07:05

Переписал, к ейной матери, uColorExt.pas (кинул на sf).
Можно наконец окрашивать атрибуты.
Так как возможна работа с вариантами типа:
ColorFilter3Attributes=-*x*;l*x*;
то надо добавить проверку, в framepanel.pas, является ли итем каталогом. Или запрашивать цвет для каталога отдельно. Ну и гуй надо добавить.

Запуск файлов уже переделал, пробуем...

Вот спасибо!
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение B4rr4cuda » 02.02.2008 07:08:07

Итак результаты одного дня только на DC.
Кроме DC работал с консолью, для чистоты эксперимента, mc не не запускал.
Сразу скажу результаты неутешительные. Больше половины операций с файлами пришлось проводить в консоли. А операций было много. И софт ставил с сорцов и архивы файла разбирал. И в системе копался.

В общем ОЧЕНЬ наболело за один день:

1. Юникодные имена. Очень много файлов оказалось со спец символами в имени. DC с ними справиться не сумел. Ни запустить на просмотр, ни скопировать, ни удалить, ни переместить. Пришлось обратиться к консоли.

2. Комстрока. Абсолютно не работоспособна. Уже говорил, но в лине без консоли - никак. Опять полез в консоль.

3. Задолбал alt. Тоже уже обращал на это внимание. Хоть проверку бы добавить, только альт нажался или сочетание с альтом. У меня много хоткеев с альтом. Раздражался до зубовного скрежета.

4. Вкладки. Если добавить на левой панели вкладку и перезапустить DC, то на правой панели появляется зазор, между заголовком (с отображаемым путем) и DrawGrid-ом, высотой с высоту таба.

5. Колонки. Ужос (С). Дата файлов мне неинтересна, а вот аттрибуты нужны. Попытка уменишить ширину колонки "дата", привела к наложению текста полей "дата" на "тип" и "аттрибуты".

6. Отрисовка DrawGrid кривовата. На левой панели справа - зазор в пять-десять пикселей. На правой панели справа зазор чуток поменьше. При появлении нижней полосы прокрутки, снизу появляется пятипиксельный (на глаз) зазор.
Все эти зазоры при навигации дико мерцают. Пока тестируешь - не особо замечаешь, а поработав день - дико бесит.

7. При запуске внизу появляется полоса прокрутки. Пришлось после каждого перезапуска вручную уменьшать ширину колонки "Аттрибуты". Эта потеряная полоса прокрутки может смело называться генератором глюков. Панели то и дело уезжают влево, как будто перемотка этим скрулбаром включается сама по рандому. Б*! Очень зол.

8. Иконки для типов файлов - очень не хватает. Причем хотелось бы назначать их вручную по категориям. Что-то типа "Цвета по типам" в опциях.

9. Без драг-дропа тулбар вообще нефункционален и почти не используется.

10. Порадовал лог, единственное что действительно не раз пригодилось и ни разу не подвело.

11. Шрифты в настройках влияют не на все контролы. Часть использует установленный в режиме дизайна Serif, который на моейсистеме при размере в 8 абсолютно нечитабелен (оооочень мелкий, при 10 - отображается нормально).

Вывод - рано еще DC использовать повседневно. Опять перехожу в режим "потестировать".
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Alexx2000 » 02.02.2008 16:20:46

1. Юникодные имена. Очень много файлов оказалось со спец символами в имени. DC с ними справиться не сумел. Ни запустить на просмотр, ни скопировать, ни удалить, ни переместить. Пришлось обратиться к консоли.

Я вот подумал, в какой кодировке в Linux возвращает имена файлов к примеру FindFirst. Мне не очень понятно в именами в какой кодировке идет работа сейчас.
3. Задолбал alt. Тоже уже обращал на это внимание. Хоть проверку бы добавить, только альт нажался или сочетание с альтом. У меня много хоткеев с альтом. Раздражался до зубовного скрежета.

Сейчас займусь этим, посмотрим что можно сделать.
4. Вкладки. Если добавить на левой панели вкладку и перезапустить DC, то на правой панели появляется зазор, между заголовком (с отображаемым путем) и DrawGrid-ом, высотой с высоту таба.

У меня такое проявлялось только под ГТК1, честно говоря без понятие в чем причина.

5,6,7:
C TDrawGrid столько проблем, сейчас пытался сделать, чтобы панели не съезжали влево, пока без результатов. Ставиш AutoПохоже надо сделать, чтобы последняя колонка растягивалась на всю ширину.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Сообщение B4rr4cuda » 02.02.2008 16:43:26

Я вот подумал, в какой кодировке в Linux возвращает имена файлов к примеру FindFirst. Мне не очень понятно в именами в какой кодировке идет работа сейчас.

Без понятия. По идее должна подхватываться системная, но этого либо не происходит вообще. либо подхватывает частично.
:!: Если кто знает, подскажите пожалуйста.

У меня такое проявлялось только под ГТК1, честно говоря без понятие в чем причина.

Ну, под второй гтк дц использовать пока невозможно. Мерцание, потери фокуса и прочие радости. Значит, надо хоть под первый сделать прилично.
C TDrawGrid столько проблем, сейчас пытался сделать, чтобы панели не съезжали влево, пока без результатов.

Может свой компонентик накатать? На основе листа. Меньше багов будет. Гислер в свое время так и сделал. До сих пор работает, пятнадцатый год уже пошел.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Сообщение Alexx2000 » 05.02.2008 12:15:31

9. Без драг-дропа тулбар вообще нефункционален и почти не используется.

Хотел сделать, однако оказывается у TSpeedButton нет событий OnDragOver, OnDragDrop. Ну и дела :(
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Пред.След.

Вернуться в Double Commander

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru