wxVListBox с «динамическими» данными - PullRequest
1 голос
/ 22 октября 2009

У меня есть поток данных, который я хочу поместить в контейнер. Этот контейнер будет иметь фиксированный размер или динамически ограничен определенным размером во время выполнения. Последнее может быть предпочтительным.

Когда контейнер заполнен, самые старые данные будут удалены.

Я хочу отобразить эти данные, используя wxVListBox , потому что мне нужен полный контроль над дисплеем. Однако есть проблема: вызовы OnDrawItem не являются атомарными, что означает, что после заполнения контейнера каждый вызов OnDrawItem будет обращаться к движущимся данным, результат будет непрерывный дисплей с отсутствующими элементами.

Это, безусловно, верно для любого контейнера с собственным индексированием, подобным массиву, который требуется OnDrawItem .

Я могу смоделировать индексацию, подобную массиву, в std :: map , используя индексацию итератора, если ключ является последовательным целым числом, тогда все элементы будут упорядочены, и карту можно будет легко удалить, но это похоже на неэффективный хак.

Как я могу решить это? Какие-нибудь другие идеи или контейнеры, о которых я не думал?

1 Ответ

1 голос
/ 23 октября 2009

Наилучший подход, по-видимому, заключается в ленивом управлении полным состоянием контейнера в OnDrawBackground . Таким образом, сам интерфейс гарантирует, что данные останутся статичными при последующих вызовах OnDrawItem , используя deque в качестве контейнера.

...