Обновление wxGrid с динамическим содержимым

Кажется, это не так просто, как я надеялся:

Используя wxWidgets (стабильная серия 2.8), у меня есть wxGrid (без подкласса) с настраиваемым «адаптером данных» ”Как класс, производный от wxGridTableBase.

wxGrid* grid = new wxGrid (this, ID_TABLE);
grid->SetTable (new TableAdapter (foo, bar, baz));
grid->EnableEditing (false);
sizer->Add(grid, wxSizerFlags (1).Expand());

«Простая» вещь, которую я не могу найти, - это способ обновить сетку при изменении базовой модели данных. Простого вызова wxWindow :: Update ( pGrid-> Update () ) явно недостаточно, чтобы заставить сетку вызвать базовую реализацию wxGridTableBase?

wxGrid* const grid = (wxGrid* const) FindWindow (ID_TABLE);
if (NULL != grid) {
     grid->Update ();
     grid->AutoSizeColumns ();
}

В частности, эта сетка действует как список, и строки будут добавляться и удаляться из него асинхронно тем же или (потенциально) другим процессом - это список общих данных, который может обновляться любой из нескольких сетевых систем. Сама сетка / список фактически доступна только для чтения; другие элементы управления используются для добавления и удаления элементов, и каждая строка имеет один атрибут логического типа, который также можно переключать.

Кажется, что новые строки не добавляются в представление, и удаление строк вызовет прерывистые SEGV в коде рисования wx.

Из-за механизма динамического / асинхронного обновления я надеюсь избежать необходимости постоянно удалять и повторно добавлять сетку в окно, так как я уверен, что это вызовет всевозможные мерцания и мерзость ... так что я прибегну к такой грубой силе, если это будет абсолютно необходимо, но я решительно предпочитаю избегать этого.

К сожалению, несмотря на то, что она отмечена как «стабильная версия», документация wxGrid, похоже, в основном состоит из еще не написанных тегов.

Обновлено: У меня возникают подозрения, что это проблема с компоновкой контейнера. При рисовании сетки нижняя часть сетки (последняя строка) может фактически перекрывать как фрейм wxStaticBox вокруг своей части окна wxFrame, так и часть строки состояния фрейма. Добавление и удаление строк, похоже, не приводит к изменению макета контейнера; Я экспериментирую с попыткой вызвать Layout и тому подобное. В идеале это должна быть область прокрутки, но wxGrid должен по-прежнему быть «ограниченным» в пределах своего содержащего Sizer.

Макет фактически состоит из статического блока, содержащего вертикальный блок, первым элементом которого является горизонтальный блок кнопок, затем сетка, как это:

    --[ Static Box ]------------------------
   |                                        |
   | [Button] [Button] [Button]             |
   |                                        |
   |  -----------------------------------   |
   | |      |   A      |   B   |    C    |  |
   | |-----------------------------------|  |
   | |    1 |   1a     |   1b  |    1c   |  |
   |  -----------------------------------   |
   |                                        |
    ----------------------------------------

К сожалению, политика компании запрещает мне публиковать скриншоты : - (

Если это важно, это (в настоящее время) wxGTK-2.8.12 в Fedora 16 (x86_64), хотя я наблюдаю идентичное поведение в CentOS5 / RHEL5 с использованием пакетов EPEL (Fedora).

5
задан BRPocock 25 January 2012 в 16:59
поделиться