Yes,
1) your list-building of the header list is indeed what i meant.
One remark about it, I would, for simplicity, do the pre-appending with the All option in the server, so the DataAction returns the complete and correct list.
=> no need for the PopulateTabHeaders action, no ListClear, no need for a local 'HeaderList' variable.
You then can directly use as source for the list widget inside your tabs header the list being returned from the DataAction. But that's largely a matter of taste, I personally always like to reduce the number of moving parts.
2) As for applying the selected tab to the filter, you are now referencing the HeaderList.Current.Id, but current is not affected by choosing a tab. You'll have to reinstate the OnTabChange of the tabs widget, and capture the id of the selected tab. This can not be done with 'Current', but by indexing into the list.
So instead of
HeaderList.Current.Id
it is
HeaderList[ActiveTab].Id
Set the value of that to an extra local variable with type ProjectStatusId, then do a refresh and use that local variable as filter.
I amended your OML.
3) The caution about the widget not being meant for this was only that, a caution : sometimes this can lead to unpredictable behaviour because the makers of the widget (Outsystems team) don't take your use case in consideration when they update the widget.
Dorine