refactor GCViewerGui to (almost) passive view