Всем доброго.
Вот задумал я написать свой ФМ. Как сказал Max Diesel (создатель Unreal Commander), у каждого программиста есть период, когда он начинает писать ФМ.
Брался несколько раз (на делфи, билдере), но забрасывал. Сейчас вроде дело пошло. Уже вторую неделю красноглазю и уже есть эффект.
Зачем оно нужно? Под виндой единственный ФМ, в котором можно работать - платный Тотал Коммандер. Есть еще Анреал коммандер, благодаря которому я и решил взяться за это дело. Пользовался им больше полугода, красиво, удобно, но:
1. Задолбал подход автора к регистрации.
2. Глюкавит.
3. Один разработчик, так что работа продвигается медленно.
Вот и решил...
На данный момент реализованно:
1. Табы каталогов.
2. Основной функционал:
- Переименование
- Копирование
- Перемещение
- Удаление
- Запуск программ
- Коммандная строка
3. Несколько панелей инструментов.
4. Просмотр (пока глючный), только на посмотреть.
5. Очереди для файловых операций. Т.е создаешь новую очередь или добавляешь в существующую.
Не реализованно:
1.
Нормальное выделение. Т.е. как в нормальном ФМ выделять правой кнопкой мыши. Скорее всего придется наследоваться от QTreeVew и самому все рисовать.2.
Ворнинги при файловых операциях (файл существует, ошибка записи, и т.д.)3.
Драг и дроп.4. Нормальная строка адреса с автодополнением и прочими фишками(пока используется QLineEdit только для показа текущего пути).
5.
Показ прав доступа (легко, но пока руки не дошли).6. Раскраска по расширениям.
Несколько оговорок:
1. Пока не сделаю то, что не реализованно, выкладывать не буду.
2. Код грязный, так как пишу на скорость. Сделаю основной функционал и можно зачищать.
3. Если решу забросить, обязательно выложу то, что будет на тот момент.
4. Конечно GPL.
Кому интересно, присоединяйтесь. Буду в этой теме задавать насущные вопросы и ждать ответов. Пока вот такие проблемы:
1. Для файловых операций создается диалог, в котором запускается поток, в котором и происходят все операции. В потоке нельзя использовать QMessageBox, поэтому столкнулся с проблемой, как спросить у пользователя что делать (перезаписывать, повторить, прервать). Решение пока видется так:
а. В функции копирования проблема, файл уже существует.
б. Вызывается функция error, которая заполняет определенные поля (код ошибки, имена файлов), ставит пазу, выкидывает сигнал, ждет снятия паузы
в. Диалог ловит сигнал, задает вопрос, в зависимости от ответа заполняет поля в потоке, снимает паузу.
г. Возвращается управление в функцию копирования и, в зависимости от полей, оно продолжается или нет.
Правильно мыслю или можно проще(правильнее)?
2. Чтобы нормально работать с выделением придется наследоваться от QTreeView? Что не нравится в стандартном поведении:
а. Селект при установки курента.
б. Нет возможности через эвент фильтр перехватить мышиные комманды (чтобы по правому клику делать селект).
Пока все. Жду ваших отзывов. Может у кого есть свои наработки?
Текущая версия в аттаче.