abstract window toolkit