RawDigger для Mac - вторая альфа
Прошу любить, жаловать и скачивать отсюда.
По традиции, расширенно комментирую Changelog:
- 64/32 бита. Протестирована на 10.5 (32 bit),10.6 (64bit) и 10.7 (64bit), может быть
работает и на интеловской 10.4
Надо сказать, что для удержания дистрибутива в приемлемом размере пришлось пересобрать Qt в урезанном варианте (без Webkit, QDeclarative и много чего еще). Иначе размер .app моментально раздувало до 75M, а это уже перебор.
macdeployqt можно попросить не копировать лишнего (-no-plugins), но тогда оно не копирует плагины (сюрприз!), а не только QWebKit и прочих. А без плагинов - кой-чего отваливается и программа крэшится, ага.
- Поправлены размеры шрифтов и контролов в ряде мест (и где были слишком крупные, и где были слишком мелкие).
Отдельное спасибо за совет с Qt::WA_MacMiniSize. Выглядит не очень, ну так QGroupBox на маке в любом случае выглядит так себе.
- Добавлено место на правом краю гистограммы, где 5 цифр не влезало
- Поправлены верхние информационные окошки, все цифры должны (бы) быть видны
- Работает Drag-n-Drop на иконку приложения (за исключением дропа прямо на образ дистрибутивного диска, где работать и не должен).
Про это напишу особо ниже.
- Если About-диалог открыт сразу после запуска программы, то он не закрывается самопроизвольно через несколько секунд.
Drop на открытое окно программы обрабатывается как-то стандартно, относительно виндовой версии ничего добавлять не пришлось.
А вот с дропом на не-запущенную программу дело обстоит весело:
- Гугление ничего разумного не дало, то есть совсем.
- Изучая Info.plist разных программ - понял что туда написать, чтобы операционка решила, что дроп поддерживается (CFBundleDocumentTypes). Программа стала запускаться, только дропнутый файл ей в командной строке не передается, тут вам не винды!
- В маковской доке написано, дескать
- (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames
. И полученный приватно совет гласил то же самое.Но у меня, я извиняюсь, C++, а не Objective-C. Куда Objective-C намазывать я просто не представляю.
Пошел читать Qt-шные примеры, благо там много про Drag-n-Drop. Экспериментально выяснил, что примеры - дроп на иконку не поддерживают. Но поддерживает Qt Designer. Но он, сука, здоровый, читать его умаешься. Вставляя в него отладочную печать (хорошо что там исходники разумные и имена функций называются человечески, grep Open нашел что мне надо) - выяснил искомое место.
- Оказывается, надо засабклассить QApplication и в ейном event() обработать QEvent::FileOpen.
После этого знания уже удается нагуглить правильных слов, хотя почему ни в Mac-specific-документации, ни в документации на Drag-n-Drop это место не упомянуто - до сих пор загадка.
- И таки да. Это место в Qt обрабатывается куском, написанным на Objective-C.
- И даже более-менее понятно, для чего оно так извращенно сделано, чтобы можно было дропать на иконку в доке (возможно, запущенной программы) и запускалась бы не новая копия, а старая могла бы воспринять. Хотя вот мне продолжает казаться, что это через анус.
Comments
Может это и полный ...., но как-же интересно получается.
Может это и полный ...., но как-же интересно получается.
> хотя почему ни в Mac-specific-документации, ни в документа
> хотя почему ни в Mac-specific-документации, ни в документации на Drag-n-Drop это место не упомянуто - до сих пор загадка.
подозреваю, что потому что (для совсем родных программ) это место никто явно не зовет, а используют внутри всяких NSDocumentController
Теоретически, на каждый NSчто-то-там должен находиться CF-что-то-там-же
Ну и ты, конечно, знаешь о существовании Objective C++, то есть что тебе никто не мешает из плюсового кода звать кокао в любом месте?
(и превращать CFArrayRef в NSArray и обратно?)
Я, естественно, ни о чем таком (Objective C++, CFArrayRef и
Я, естественно, ни о чем таком (Objective C++, CFArrayRef и вообще всем этом) - не знаю, а главное - ведь и не хочу знать. Я абсолютно счастлив от того, что в Qt оно оказалось как-то само работает.
А про документацию - мое недоумение относится именно к Qt. Там есть раздел в документации про Drag-n-Drop (и про многие Mac-specific вещи есть отсылка куда следует (например к QMacPasteboardMime).
Там есть специфичный раздел про Mac. А вот про FileOpenEvent (которое одновременно и про DnD и Mac-specific) в этих доках не упомянуто внятно. Собственно, невнятно - тоже.
А ну тады понятно Меня, видимо, сбила с толку фраза "И так
А
ну тады понятно
Меня, видимо, сбила с толку фраза "И таки да. Это место в Qt обрабатывается куском, написанным на Objective-C", как будто в этом есть что-то плохое.
Потому что в том, что касается маковского рантайма ObjC первичен. К нему бывают "необъектные" интерфейсы, но иногда и не бывают.
То же относится к предыдущему посту про (argc, argv)
они вполне себе есть, просто никакой функции связанной с файлами, которые тебя просит отрыть гуй не несут
Нет, ничего плохого в Obj-C нету. Но с учетом того, что в Qt
Нет, ничего плохого в Obj-C нету. Но с учетом того, что в Qt ~250M исходников на C++ (оценил от фонаря, архив в 290M, но там иконки всякие тоже есть) и немножко (относительно этих 250M) кусочков на Obj-C на мой взгляд свидетельствует о том, что из C/C++ API макоси получить доступ (любой, удобный, эффективный - не знаю) не удалось.
Вряд-ли вкрапления на чуждом языке появляются просто от большой любви к многоязыковому программированию.
(занудно) вопрос, конечно, еще в том, сколько в этих гигазах
(занудно) вопрос, конечно, еще в том, сколько в этих гигазах вареза платформонезависимого кода, а сколько про макос
ну, это же известный факт жизни. Есть макосный гуй, в котором все API - это взаимодействие ObjC'шных объектов внутри конкретного рантайма
К некоторым конкретным объектам этого рантайма сделан сишный апи, а к некоторым - нет
что в какой-то степени логично, ибо одно дело строки туда-сюда таскать, а другое дело проецировать на плоскость логику того же NSApplication - там страшненько будет и совсем не для людей
Самое смешно, что формально ты неправ там вообще нет '.m' е
Самое смешно, что формально ты неправ
там вообще нет '.m' есть только '.mm', то бишь ObjC++, а не ObjC - то есть весь код плюсовый ж)
я не настоящий сварщик грепом, но да, похоже, что .cpp использующего CFString там сильно больше, чем любого .mm
Ну так я о том и толкую - все что смогли - таки написали на
Ну так я о том и толкую - все что смогли - таки написали на C++. С CFString.
А до Objective-ужаса дело дошло только от невозможности сделать на человечьем языке.
Дроп из Qt приложения в Mac OS
Случайно наткнулся на Ваш блог)
Скажите Алексей, а Вы случайно не сталкивались с проблемой дропа из Qt приложения в Mac OS, если сталкивались то как решали?
p.s. вот тут подробнее про проблему - http://www.prog.org.ru/topic_22179_0.html
Нет, не сталкивался. У меня
Нет, не сталкивался. У меня наоборот, из FS в приложение.