I tried this widget. The function gwinTableSetSelected() worked not properly. I fixed this problem. Sorry for my English.
void gwinTableSetSelected(GHandle gh, int row, bool_t doSelect) {
const gfxQueueASyncItem * qi;
int i;
// is it a valid handle?
if (gh->vmt != (gwinVMT *)&tableVMT)
return;
// watch out for an invalid row
if (row < 0 || row >= gh2obj->rowCount)
return;
// If not a multiselect mode - clear previous selected row
if (doSelect && !(gh->flags & GTABLE_FLG_MULTISELECT)) {
for(qi = gfxQueueASyncPeek(&gh2obj->table_head); qi; qi = gfxQueueASyncNext(qi)) {
if (qi2li->flags & GTABLE_FLG_SELECTED) {
qi2li->flags &= ~GTABLE_FLG_SELECTED;
qi2li->modified = GTABLE_TEXT_MODIFIED;
gh2obj->modified |= GTABLE_BODY_MODIFIED;
break;
}
}
}
// Danger Will Robinson
// Find row and set selected or not
for(qi = gfxQueueASyncPeek(&gh2obj->table_head), i = 0; qi; qi = gfxQueueASyncNext(qi), i++) {
if (i == row) {
if (!doSelect && (qi2li->flags & GTABLE_FLG_SELECTED) > 0){
qi2li->flags &= ~GTABLE_FLG_SELECTED;
qi2li->modified = GTABLE_TEXT_MODIFIED;
gh2obj->modified |= GTABLE_BODY_MODIFIED;}
if (doSelect && (qi2li->flags & GTABLE_FLG_SELECTED) == 0){
qi2li->flags |= GTABLE_FLG_SELECTED;
qi2li->modified = GTABLE_TEXT_MODIFIED;
gh2obj->modified |= GTABLE_BODY_MODIFIED;}
break;
}
}
_gwinUpdate(gh);
}