View previous topic :: View next topic |
Author |
Message |
hramm
Joined: 17 Jun 2010 Posts: 19
|
(Separately) Posted: Fri Jul 02, 2010 21:22 Post subject: [Проблема] Обновление иконок на событие "cm_RereadSource" |
|
|
Привет всем.
Вот делаю плагин http://forum.wincmd.ru/viewtopic.php?t=13318
Это WFX плагин клиент DC++.
И столкнулся с такой проблемой.
Для изменения статуса хотел применить механизм смены иконки.
Чтобы сменить иконку необходимо кинуть тоталу сообщение "cm_RereadSource". Я так и делаю. Тотал заново опрашивает содержимое и иконки, но указанные иконки не применяет. При этом, если сменить путь и вернуться, иконка обновится.
Решаемо? |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Fri Jul 02, 2010 21:50 Post subject: |
|
|
Вообще, вопрос сложный, так как ТК кэширует иконки. Но есть одна идея, которую ты заодно и проверишь.
Когда ТК вызывает функцию FsExtractCustomIcon/FsExtractCustomIconW плагина для получения иконки, он добавляет иконку в кэш, в котором иконки различаются по строке RemoteName (этот параметр в FsExtractCustomIcon является как входным, так и выходным). Если нужно одну и ту же иконку применить много раз, нужно указывать произвольную строку в поле RemoteName, но одинаковую для всех файлов с такой иконкой - при этом в кэш иконка будет помещена лишь один раз (например, если ставишь собственную иконку папки, а папок в панели несколько тысяч, в функции FsExtractCustomIcon для каждой папки возвращаешь одну и ту же иконку, а в RemoteName записываешь строчку "/").
Собственно, идея вот в чем. При обновлении панели, если ТК запросит иконки повторно, возвращаешь другую строку в RemoteName (например, генеришь случайное число, переводишь в строку и записываешь в это поле), чтобы дать ТК понять, что иконка уже другая. Возможно, это поможет установить измененную иконку.
А вообще, конечно, менять иконки и обновлять панель - не есть хороший вариант... _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Last edited by MVV on Fri Jul 02, 2010 21:55; edited 2 times in total |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Fri Jul 02, 2010 21:53 Post subject: |
|
|
Я в своём VirtualDisk (в разрабатываемой новой версии, где значки динамические) эту проблему решил обновлением даты-времени виртуального файла перед посылкой сообщения cm_RereadSource. Вроде бы, работает.
Правда, у меня до этого значки при обновлении вообще не запрашивались, я именно эту проблему обходил. А чтобы Тотал их запрашивал, но не отображал… Может, с дескрипторами чего накосячено? Там можно же их идентифицировать. Может, для разных значков возвращаешь одинаковые идентификаторы?
MVV wrote: | А вообще, конечно, менять иконки и обновлять панель - не есть хороший вариант... |
А какой хороший? _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
hramm
Joined: 17 Jun 2010 Posts: 19
|
(Separately) Posted: Fri Jul 02, 2010 22:33 Post subject: |
|
|
MVV wrote: | При обновлении панели, если ТК запросит иконки повторно, возвращаешь другую строку в RemoteName |
Не прокатило. Тотал видимо не проверяет после метода "FsExtractCustomIcon" поле "RemoteName". Оно является входным параметром и только. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Fri Jul 02, 2010 22:39 Post subject: |
|
|
hramm wrote: | MVV wrote: | При обновлении панели, если ТК запросит иконки повторно, возвращаешь другую строку в RemoteName |
Не прокатило. Тотал видимо не проверяет после метода "FsExtractCustomIcon" поле "RemoteName". Оно является входным параметром и только. |
Как я написал, этот параметр является как входным, так и выходным, и используется для кэширования, это написано в справке по WFX API, и это упоминал Гислер лично при обсуждении ситуации, когда нужно было для нескольких тысяч файлов, символизирующих папку, поставить значок папки. А обновляет ли ТК иконки при изменении возвращаемого значения - это и предстояло выяснить.
CaptainFlint wrote: | MVV wrote: | А вообще, конечно, менять иконки и обновлять панель - не есть хороший вариант... |
А какой хороший? |
Не знаю.
Сама идея постоянного изменения значка не очень вписыавется в рамки плагина файловой системы. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
hramm
Joined: 17 Jun 2010 Posts: 19
|
(Separately) Posted: Fri Jul 02, 2010 22:53 Post subject: |
|
|
MVV wrote: | Как я написал, этот параметр является как входным, так и выходным, и используется для кэширования, это написано в справке по WFX API |
Сорри. Заработало.
Я сначала постояное имя писал, а потом вспомнил что надо случайное.
Сделал "sprintf(RemoteName, "%u", rand());" - заработало!
Тему предлагаю закрыть. Всем спасибо! |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Fri Jul 02, 2010 23:35 Post subject: |
|
|
MVV
Загляни сюда, плиз. Завёл отдельную тему, чтобы тут не оффтопить. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Sat Jul 03, 2010 09:26 Post subject: |
|
|
hramm wrote: | Сделал "sprintf(RemoteName, "%u", rand());" - заработало! |
Как более логичное решение предлагаю все же не плодить рандомные идентификаторы, а возвращать определенные строки для определенных статусов - то есть, для каждого отдельно взятого состояния иконки возвращать одну и ту же строку (типа, для зеленой иконки возвращать "icon[1]", для красной - "icon[2]" и т.п.) - например, с индексом иконки из внутреннего массива иконок (или даже дескриптором иконки в виде текстовой строки). Так тотал не будет добавлять в кэш иконки, которые там уже есть, а будет просто использовать их повторно. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
hramm
Joined: 17 Jun 2010 Posts: 19
|
(Separately) Posted: Sat Jul 03, 2010 14:21 Post subject: |
|
|
MVV wrote: | Как более логичное решение предлагаю все же не плодить рандомные идентификаторы |
Я так и сделал. Это только пример. Спасибо. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|