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);
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);
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);
August 15th, 2009 at 12:48 am
Лучше бы патч для библиотеки сделал. 🙂
August 15th, 2009 at 5:17 am
ээ, а я как-то не подумал об этом. Ну это типа надо разбираться как оно там в нутрях, много думать что бы ничего не сломать, да?
Как вообще их делать правильно?
August 15th, 2009 at 2:42 pm
Ну для начала тупо посмотреть на код, который это делает. Иногда вдохновение и причина ошибки находятся сразу, особенно если рядом держать документацию по платформе. В принципе правка библиотеки не такая страшная вещь как звучит.
August 15th, 2009 at 5:42 pm
По крайней мере такой вариант кажется более логичным, чем использование всяких обходных путей.
August 17th, 2009 at 9:20 am
В данному случае у меня не получится обойтись без обходного пути – мы используем кастомный билд wxWidgets и доступа к сорцам у меня нету.
Кстати я тут подумал мы то используем 2.8.9 фактически.. может уже и исправили то.