Небольшая авантюра :)
И до чего же мне остопи... осточертели разнообразные глюки виндового контрола ListView. В один прекрасный день я осознал, что на периодический отлов и исправление подобных глюков было потрачено много дней. Ну и решился я на такую авантюру: написать этот класс "ручками", так сказать, под себя. Пока получается. Позавчера сделал отображение и скроллинг, вчера - множественный выбор и перетаскивание/растягивание заголовков. Как там говорится в одной программистской поговорке: никогда не находится время, чтобы сделать что-то необходимое, но всегда находится время, чтобы переделать ;)

Это, кстати, к вопросу, как дела с bard-ом. Нормально дела, вовсю идет работа над новой версией.

Это, кстати, к вопросу, как дела с bard-ом. Нормально дела, вовсю идет работа над новой версией.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
На тему "привык чужой код читать" вспомнилось с баш.орга: если при чтении чужого кода матерные восклицания звучат не чаще двух раз в минуту, это качественный код :)
no subject
>кросс-платформенности среди них нет и не будет
Qt — ещё и мощный тулкит, где зиллионы всего уже написаны и отлажены. %-)
алсо, QT — это QuickTime. %-)
>сли при чтении чужого кода матерные восклицания звучат не чаще двух раз в минуту,
>это качественный код :)
обычно если мне надо лезть в чужой код, то суточный запас матов я уже израсходовал. ибо я что, по доброй воле лезу? ежели работает — не трогаю.
no subject
Win SDK - тоже =)
no subject
нет, stl не предлагать. %-)
no subject
такого говна даже микрософт не написало :)
что касается hash, map - то это вообще не платформо-зависимый уровень, пользуйся чем хошь, хоть STL-ем, хоть еще чем...
no subject
no subject
no subject
no subject
а в оставшихся 5% я использую "аддоны". это значит, что к любому контролу можно прихреначить (на runtime) энное количество "обработчиков", которые будут перехватывать события, предназначенные окну, и делать что-то такое хитроуебищное... например, обслуживать drag-drop-ы или "резиновые контуры"...
и нахер мне тогда связи многие-ко-многим и переназначение реакций? если такое и понадобится, то раз в год, и раз в год мне не в падлу написать цикл.
no subject
однако же схема с «хуками» не есть красива, ящитаю. ну и Qt ещё умеет сам привинцивать сигналы на обработчики с соотв. именами. понятно, что это можно ручками один раз написать массажёра и всё, но лень же — уже написано.
алсо, достаточно удобен широкий диапазон параметров к сигналам. строки, числа, фиготень всякая.
no subject
если же то же самое делать сверху-вниз, тогда ты должен рекурсивно опрашивать всех child-ов "тебе Enter не надо? а тебе Enter не надо?". получится перебор всех контролов вместо однократного прохода ветки снизу-вверх.
"не есть красива" - понятие субъективное. по-моему очень даже есть красива :) по мне так одно слово "moc" однозначно решает все вопросы на тему красоты - и не в пользу той библиотеки, которая этот moc использует :)
виртуальные функции плохи в том смысле, что они вызываются, даже если там заглушка. когда вирт. функций много, то получается много ненужных вызовов.
но как раз на этот случай у меня есть гибридная схема. :) у контрола может быть хоть миллион виртуальных обработчиков, но регулярно из них вызываются только несколько. остальные вызываются теми самыми аддонами.
например, бывает нужно, чтобы при нажатии клавиши мыши началось некое "действо" - перетаскивание чего-то, а при отпускании - что-то произошло. так вот у контрола есть виртуальные функции вроде "перетаскивание началось", "перетаскивание идет"...
но ведь такая функциональность нужна лишь немногим контролам, нафиг тогда вызывать эти функции у всех контролов? нефик. вместо этого я ставлю только на нужный на контрол аддон "перетаскиватель". этот аддон перехватывает мышиные события, рюхает их и потом, если надо, вызывает те самые "перетаскивание началось", "перетаскивание идет"... получается это только для тех контролов, которые действительно нуждаются в таких событиях.
в принципе, можно так все события обрабатывать, но тогда придется в конструкторе создавать эти аддоны-перебрасыватели. компромиссный вариант меня больше устраивает :)
no subject
>но ведь такая функциональность нужна лишь немногим контролам, нафиг тогда
>вызывать эти функции у всех контролов?
правильно. у кого обработчика сигнала нет — тот и не откликнется. %-)
зыж что-то у нас хилый какой-то холивар получается.
no subject
ежели оно всплыло до диалога, то дальше все на этом. либо у диалога есть поинтер на что-то конкретное, дополнительное, тогда это еще плюс один вызов. а всем подряд сувать - какой смысл? в том примере прикинь, если в окне есть multi-line-edit и дерево (как в студии с редактором и деревом проекта), фокус стоит на дереве. деерву Enter не нужен, и зачем тогда совать Enter в первый попавшийся multi-line-edit? это уже излишество :)
no subject
это как это «всё»? это, то есть, диалог должен, например, знать о сущности «дефолтная кнопка» и какие события туда роутить? O_O
а enter надо всем предложить, вдруг он кому нужен? мультилайн умный, он глянет, что фокус не у него — и не станет трогать клаву. а дефолтная кнопка тупая, она увидит enter — и зажрёт, и пофигу ей на фокусы. именно чтобы такие гады не хавали чужие события, сначала его надо утопить до контрола с фокусом.
плюс подхода — диспетчер событий вообще не должен быть осведомлён ни о чём, кроме того, какое его дитё имеет фокус. и скидывает мессагу дитю. дитё в свою очередь тоже является диспетчером, смотрит на своих. и так далее. если событие никому в пень не надо — оно всплывёт на уровень выше и будет скормлено следующему контролу. и так пока контролы не закончатся, после чего ещё на уровень выше всплывёт. просто, как топором по яйцам. оверхэдом можно пренебречь, это гуя — тут даже с сотней контролов не выйдет схему затормозить (ну, у меня не выходило даже на 286-х %-).
no subject
именно. а почему бы и нет?
[ он глянет, что фокус не у него — и не станет трогать клаву ]
и каждый будет смотреть, а не у меня ли фокус, тварьли я дрожащая или право имею клавишу обрабать? :) так просто не надо совать кнопки тому, кто не в фокусе. сам подумай: что есть "фокус"? по определению это тот, кто берет события от кнопок. дело не столько в оверхеде, сколько в предсказуемости с т.з. пользователя - что никакая херня, которая не в фокусе "вдруг" не оживет :)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
жопуиндекс :))