protected void updateText(
    final BaseUI UI, Text headerText, Text detailText
  ) {
    detailText.setText("") ;
    headerText.setText("") ;
    final String name = category.name ;//.toUpperCase() ;
    headerText.setText(name+" structures:") ;
    for (final InstallType type : category.types) {
      final Composite icon = type.sample.portrait(UI) ;
      final String typeName = type.sample.fullName() ;
      final String typeDesc = type.sample.helpInfo() ;
      final int buildCost = type.sample.buildCost() ;
      
      detailText.insert(icon, 40) ;
      detailText.append("  "+typeName) ;
      detailText.append("\n Cost: "+buildCost+" Credits") ;
      //TODO:  List construction materials too.
      
      detailText.append(new Text.Clickable() {
        public void whenClicked() { initInstallTask(UI, type) ; }
        public String fullName() { return "\n  (BUILD)" ; }
      }) ;
      detailText.append(new Text.Clickable() {
        public void whenClicked() {
          listShown = (type == listShown) ? null : type ;
          helpShown = null ;
        }
        public String fullName() { return "  (LIST)" ; }
      }) ;
      detailText.append(new Text.Clickable() {
        public void whenClicked() {
          helpShown = (type == helpShown) ? null : type ;
          listShown = null ;
        }
        public String fullName() { return "  (INFO)" ; }
      }) ;
      
      if (helpShown == type) {
        detailText.append("\n") ;
        detailText.append(typeDesc) ;
        detailText.append("\n") ;
      }
      if (listShown == type) {
        final Batch <Installation> installed = listInstalled(UI, type) ;
        int ID = 0 ;
        if (installed.size() == 0) {
          detailText.append("\n  (no current installations)") ;
        }
        else for (Installation i : installed) {
          detailText.append("\n    ") ;
          final String label = i.fullName()+" No. "+(++ID) ;
          detailText.append(label, (Text.Clickable) i) ;
          //  You might also list location.
        }
        detailText.append("\n") ;
      }
      detailText.append("\n\n") ;
    }
  }