@Override
 public void popout(TabLabelView tab) {
   if (dataTabs.hasTab(tab)) {
     int index = dataTabs.popTab(tab);
     view.removeDataTab(index);
     TabPanelPresenter p = dataTabs.getPresenter(tab);
     p.removed();
     String datakey = ((DataPanelPresenterImpl) p).getDataKey();
     DataTablePlace place = new DataTablePlace();
     place.setDataKey(datakey);
     popoutDataTab(place, tab.hashCode());
   } else if (visTabs.hasTab(tab)) {
     int index = visTabs.popTab(tab);
     view.removeVisTab(index);
     TabPanelPresenter p = visTabs.getPresenter(tab);
     p.removed();
     if (p instanceof ConfusionMatrixPresenterImpl) {
       ConfusionMatrixPresenterImpl cp = (ConfusionMatrixPresenterImpl) p;
       ConfusionMatrixPlace place = new ConfusionMatrixPlace();
       place.setRandomForest(cp.getRandomForest());
       popoutConfusionMatrixTab(place, tab.hashCode());
     } else {
       TreePanelPresenterImpl tp = (TreePanelPresenterImpl) p;
       TreeVisPlace place = new TreeVisPlace();
       place.setDataKey(tp.getDatakey());
       place.setModelKey(tp.getModelkey());
       place.setTree(tp.getTreeIndex());
       popoutTreeVisTab(place, tab.hashCode());
     }
   } else {
     logger.log(Level.SEVERE, "Unknown tab!");
   }
 }
  private void popoutDataTab(DataTablePlace place, int id) {
    logger.log(Level.INFO, "Popping data panel: " + place.getDataKey());

    // FIXME: this needs to be injected...
    AppPlaceHistoryMapper historyMapper = Entry.getPlaceHistoryMapper();

    String token = historyMapper.getToken(place);
    String url = Window.Location.createUrlBuilder().setHash(token).buildString();
    int width = Window.getClientWidth() / 2;
    int height = Window.getClientHeight() / 2;
    String features =
        "width=" + width + ",height=" + height + ",menubar=0,location=0,toolbar=0,status=0";

    DataPanelActivity.openPanel(this, url, "_blank", features, Integer.toString(id));
  }