wxListCtrl selection under MAC OS

August 14th, 2009 Begemot Posted in Использование

Наткнулся на разное поведение wxListCtrl’a под виндой и маком. Надо при смене выделения в другом контроле устанавливать правильное выделение в wxListCtrl. Под виндой все просто

        int t = нужная строка;
    list->SetItemState(t, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
    list->EnsureVisible(t);

Под маком надо обязательно сбрасывать старое выделение и только потом ставить новое.

    int cursel = list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
    if (cursel != wxNOT_FOUND)
               list->SetItemState(cursel, !wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
 ......
      int t = нужная строка;
      list->SetItemState(t, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
      list->EnsureVisible(t);
Related:

5 Responses to “wxListCtrl selection under MAC OS”

  1. Лучше бы патч для библиотеки сделал. 🙂

  2. ээ, а я как-то не подумал об этом. Ну это типа надо разбираться как оно там в нутрях, много думать что бы ничего не сломать, да?
    Как вообще их делать правильно?

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

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

  5. В данному случае у меня не получится обойтись без обходного пути – мы используем кастомный билд wxWidgets и доступа к сорцам у меня нету.

    Кстати я тут подумал мы то используем 2.8.9 фактически.. может уже и исправили то.