factored out a dialog base class (stop gap until Grue has something)