Hарод, пишу панельный плагин для обработки файлов из-под Poser и столкнулся с
весьма нетривиальной вещью. Hаписать парсер .pz3, .cr2, .pp2 и т.д. просто.
Проблема в том, что когда это представлено в виде панели, то оказывается, что в
этой "эмулируемой файловой системе" нет уникального имени. Пример файла:
{
version
{
number 6
}
prop ring
{
geomCustom
{
//...
}
}
prop ring
{
name ring_top
on
bend 1
channels
{
groups
{
//...
То есть "prop ring" использовать как имя нельзя. Их два. И это нормально. В
одном куске описана геометрия, в другом - свойства.
Я поступил так: в качестве имени использую порядковый номер "файла/папки" в
пределах одной "папки", имя "prop ring" засунул в описание файла и в
GetOpenPluginInfo() меняю в режимах панели (ColumnTypes и StatusColumnTypes)
все
"N" с модификаторами на "Z"... Попутно вопрос. Я вычитываю дефолтный
PanelModesArray из реестра, поскольку API не нашел. Может плохо искал?
В общем работает, но не отображается символ перед именем файла при раскраске
(ну и фиг с ним), не работает "cd" по отображаемому имени и command prompt
просто дикий. То есть примерно так:
╔═ ...2\prop ring\channels\groups\groupNode Other ═
·н Описание │ Описание │ Описание
·.. │ │
·parmNode OriginZ│ │
·parmNode OriginY│ │
·parmNode OriginX│ │
· │ │
╟────────────────┴────────────────┴────────────────
·parmNode OriginY 17
╚═══════════════ 51 байт в 3 файлах ═══════════════
5\10\01\2>
Вот это "5\10\01\2>" раздражает неимоверно. Any good idea? Каким корчом
передать в SetDirectory() дополнительную информацию кроме имени "папки",
которое
не уникально? В принципе можно плюнуть на неработающее "cd", если в комскроке
будет то же, что и в заголовке окна.
ЗЫЖ Если позеристы заинтересуются, промежуточные "альфы" могу выкладывать в
и-нете. Пока оно умеет входить в файл и экспортить из него куски в r/o режиме.
Хотя возможность просмотреть или легко выкусить geomCustom из .cr2 в виде .obj
это уже не так мало...
Ты заходи, если что, All!
С уважением, Александр AKA /CorWin
... Квазимодогипеpтоническое пpостpанство
Недавно (10 июня 2006 г., 8:29:17) Вы писали:
AN> Попутно вопрос. Я вычитываю дефолтный PanelModesArray из реестра,
AN> поскольку API не нашел. Может плохо искал?
Гм. а зачем оно тебе, может установить свои настройки для режимов
просмотра? Зачем строить свои настройки на основе настроек FAR'a для
файловой системы?
AN> В общем работает, но не отображается символ перед именем файла при
AN> раскраске (ну и фиг с ним),
Могу предположить, что колонка с именем файла N не отображается на
панели, поэтому и нет этого символа, т.к. он добавляется именно к
имени, насколько я понимаю.
AN> Вот это "5\10\01\2>" раздражает неимоверно. Any good idea? Каким
AN> корчом передать в SetDirectory() дополнительную информацию кроме
AN> имени "папки", которое не уникально? В принципе можно плюнуть на
AN> неработающее "cd", если в комскроке будет то же, что и в заголовке
AN> окна.
Хм... здесь сложнее, могу предложить добавлять служебный префикс к
имени в конце, например, через пробел и для твоего примера получится:
"prop ring[0]"
"prop ring[1]"
Причем такие имена необходимо отдавать только для текущей директории,
а сами имена отдавать без префикса.
В результате у файлов на панели появятся уникальные имена, что
позволит с ними нормально работать.
Пример такого подхода: http://plugring.farmanager.com/downld/files/xmldom135.zip
Если такая идея не канает, будем думать дальше. ;-)
Просто без уникальных имен заставить работать SetDirectory() мне не
представляется возможным.
--
Удачи...
Yuris W. Auzinsh aka Zuz,
ICQ UIN: 5 8 2 5 6 3 7 4,
e-mail : zuz(аt)mail.ru
Сижу я, примус починяю, вдруг (Вторник 15 Августа 2006 17:00:58) мессага от
тебя к моей персоне... Hу, думаю, щас спою...
AN>> Попутно вопрос. Я вычитываю дефолтный PanelModesArray из реестра,
AN>> поскольку API не нашел. Может плохо искал?
YWA> Гм. а зачем оно тебе, может установить свои настройки для режимов
YWA> просмотра? Зачем строить свои настройки на основе настроек FAR'a для
YWA> файловой системы?
Можно и так сделать. Только API от этого не появится :) Меня, как первого и
возможно единственного пользователя данного чуда, вполне устраивает замена
"N..." на "Z" или (если есть и "N..." и "Z") на "C0" "C1". Городить огород с
собственными режимами панелей не хотелось. Диалоги с менюшками "рисовать"... А
собственно, почему бы по Info.Control(hPlugin, FCTL_GETPANELINFO, &pi) не
отдавать заполненными эти структуры? Или по какому-то FCTL_GETPANELADVINFO...
AN>> В общем работает, но не отображается символ перед именем файла при
AN>> раскраске (ну и фиг с ним),
YWA> Могу предположить, что колонка с именем файла N не отображается на
YWA> панели, поэтому и нет этого символа, т.к. он добавляется именно к
YWA> имени, насколько я понимаю.
Правильно понимаешь. А нет его именно из-за (см. ниже).
AN>> Вот это "5\10\01\2>" раздражает неимоверно. Any good idea? Каким
YWA> Хм... здесь сложнее, могу предложить добавлять служебный префикс к
YWA> имени в конце, например, через пробел и для твоего примера получится:
YWA> "prop ring[0]"
YWA> "prop ring[1]"
Так и сделал, правда не с квадратными скобками, а с '\x1D' в качестве
разделителя. Но светить такие имена на панели... Поэтому в комстроке и при
AltF7
(или F3 на "папке") все равно нехорошо смотрится. И по ^Ins в клипбоард
сбрасывается не совсем то, что ожидалось.
YWA> Причем такие имена необходимо отдавать только для текущей директории,
YWA> а сами имена отдавать без префикса.
Эээ... Переведи. Отдавать куда? В PluginPanelItem::FindData.cFileName? Тогда
на кой вообще эти префиксы... точнее суффиксы? В заголовке панели я сам себе
режиссер, на самой панели тоже (правда про символ перед именем файла ты в
курсе), но управлять приглашением комстроки API не позволяет.
YWA> Пример такого подхода:
YWA> http://plugring.farmanager.com/downld/files/xmldom135.zip
Завтра посмотрю... На следующей неделе, если допишу хелп, выложу снэпшот в
Сеть. Я им уже безбоязненно рихтую свои "3d-шедевры"...
ЗЫЖ Кстати, к кому за логином на мантис обращаться? А то я по ходу дела пару
багов с комбобоксами в Dialog API нарыл... Отвечать по этому пункту лучше на
corwinnt (псина) yandex (точка) ru.
Ты заходи, если что, Yuris!
С уважением, Александр AKA /CorWin
... При скрещивании бульдога с носорогом, ежом и ужом получается сфинктер
Недавно (15 августа 2006 г., 23:52:36) Вы писали:
AN> Можно и так сделать. Только API от этого не появится :)
Ага.
AN> Меня, как первого и возможно единственного пользователя данного
AN> чуда, вполне устраивает замена "N..." на "Z" или (если есть и
AN> "N..." и "Z") на "C0" "C1".
Хозяин барин.
AN> Городить огород с собственными режимами панелей не хотелось.
AN> Диалоги с менюшками "рисовать"...
Можно взять из готового плагина с сырцами или у кого-нить попросить
понравившийся (например, The Underscore удобно сделано).
AN> А собственно, почему бы по Info.Control(hPlugin,
AN> FCTL_GETPANELINFO, &pi) не отдавать заполненными эти структуры?
AN> Или по какому-то FCTL_GETPANELADVINFO...
А зачем? Цель то в чем?
YWA>> Причем такие имена необходимо отдавать только для текущей
YWA>> директории, а сами имена отдавать без префикса.
AN> Эээ... Переведи. Отдавать куда?
AN> В PluginPanelItem::FindData.cFileName?
Да.
Здесь ещё другая проблема какова максимальная длинна элемента, который
должен отображаться на панели? Если оно может быть больше 255
символов, то это не наш вариант. Придется от имени файла отказаться
для хранения такого элемента.
AN> Тогда на кой вообще эти префиксы... точнее суффиксы?
Для командной строки и возможности навигации с помощью cd.
AN> В заголовке панели я сам себе режиссер, на самой панели тоже
AN> (правда про символ перед именем файла ты в курсе), но управлять
AN> приглашением комстроки API не позволяет.
см. пример, после чего вопрос должен отпасть сам собой:
YWA>> Пример такого подхода:
YWA>> http://plugring.farmanager.com/downld/files/xmldom135.zip
--