private void removeSelection(boolean pAsk) {
   if (pAsk
       && JOptionPaneHelper.showQuestionConfirmBox(
               this,
               "Alle markierten Einträge und ihre untergeordneten Einträge löschen?",
               "Löschen",
               "Nein",
               "Ja")
           == JOptionPane.NO_OPTION) {
     return;
   }
   int cnt = 0;
   for (Village v : getSelectedElements()) {
     treeData.remove(v);
     cnt++;
   }
   buildTree();
   showSuccess(((cnt == 1) ? "Dorf" : cnt + " Dörfer") + " gelöscht");
 }
  private void exportAsHTML() {
    List<Village> selection = getSelectedElements();
    if (selection.isEmpty()) {
      showInfo("Keine Dörfer ausgewählt");
      return;
    }
    // do HTML export
    String dir = GlobalOptions.getProperty("screen.dir");
    if (dir == null) {
      dir = ".";
    }

    JFileChooser chooser = null;
    try {
      // handle vista problem
      chooser = new JFileChooser(dir);
    } catch (Exception e) {
      JOptionPaneHelper.showErrorBox(
          this,
          "Konnte Dateiauswahldialog nicht öffnen.\nMöglicherweise verwendest du Windows Vista. Ist dies der Fall, beende DS Workbench, klicke mit der rechten Maustaste auf DSWorkbench.exe,\n"
              + "wähle 'Eigenschaften' und deaktiviere dort unter 'Kompatibilität' den Windows XP Kompatibilitätsmodus.",
          "Fehler");
      return;
    }

    chooser.setDialogTitle("Datei auswählen");
    chooser.setFileFilter(
        new javax.swing.filechooser.FileFilter() {

          @Override
          public boolean accept(File f) {
            if ((f != null) && (f.isDirectory() || f.getName().endsWith(".html"))) {
              return true;
            }
            return false;
          }

          @Override
          public String getDescription() {
            return "*.html";
          }
        });
    // open dialog
    chooser.setSelectedFile(new File(dir + "/Dorfliste.html"));
    int ret = chooser.showSaveDialog(this);
    if (ret == JFileChooser.APPROVE_OPTION) {
      try {
        // check extension
        File f = chooser.getSelectedFile();
        String file = f.getCanonicalPath();
        if (!file.endsWith(".html")) {
          file += ".html";
        }

        // check overwrite
        File target = new File(file);
        if (target.exists()) {
          if (JOptionPaneHelper.showQuestionConfirmBox(
                  this, "Bestehende Datei überschreiben?", "Überschreiben", "Nein", "Ja")
              == JOptionPane.NO_OPTION) {
            // do not overwrite
            return;
          }
        }
        // do export
        SelectionHTMLExporter.doExport(target, selection);
        GlobalOptions.addProperty("screen.dir", target.getParent());
        showSuccess("Auswahl erfolgreich gespeichert");
        if (JOptionPaneHelper.showQuestionConfirmBox(
                this,
                "Willst du die erstellte Datei jetzt im Browser betrachten?",
                "Information",
                "Nein",
                "Ja")
            == JOptionPane.YES_OPTION) {
          BrowserCommandSender.openPage(target.toURI().toURL().toString());
        }
      } catch (Exception inner) {
        logger.error("Failed to write selection to HTML", inner);
        showError("Fehler beim Speichern");
      }
    }
  }
  private void copyBBToExternalClipboardEvent() {
    try {
      List<Village> selection = getSelectedElements();
      if (selection.isEmpty()) {
        showInfo("Keine Elemente ausgewählt");
        return;
      }
      boolean extended =
          (JOptionPaneHelper.showQuestionConfirmBox(
                  this,
                  "Erweiterte BB-Codes verwenden (nur für Forum und Notizen geeignet)?",
                  "Erweiterter BB-Code",
                  "Nein",
                  "Ja")
              == JOptionPane.YES_OPTION);

      StringBuilder buffer = new StringBuilder();
      if (extended) {
        buffer.append("[u][size=12]Dorfliste[/size][/u]\n\n");
      } else {
        buffer.append("[u]Dorfliste[/u]\n\n");
      }
      buffer.append(new VillageListFormatter().formatElements(selection, extended));

      if (extended) {
        buffer.append("\n[size=8]Erstellt am ");
        buffer.append(
            new SimpleDateFormat("dd.MM.yy 'um' HH:mm:ss")
                .format(Calendar.getInstance().getTime()));
        buffer.append(" mit [url=\"http://www.dsworkbench.de/index.php?id=23\"]DS Workbench ");
        buffer.append(Constants.VERSION).append(Constants.VERSION_ADDITION + "[/url][/size]\n");
      } else {
        buffer.append("\nErstellt am ");
        buffer.append(
            new SimpleDateFormat("dd.MM.yy 'um' HH:mm:ss")
                .format(Calendar.getInstance().getTime()));
        buffer.append(" mit [url=\"http://www.dsworkbench.de/index.php?id=23\"]DS Workbench ");
        buffer.append(Constants.VERSION).append(Constants.VERSION_ADDITION + "[/url]\n");
      }

      String b = buffer.toString();
      StringTokenizer t = new StringTokenizer(b, "[");
      int cnt = t.countTokens();
      if (cnt > 1000) {
        if (JOptionPaneHelper.showQuestionConfirmBox(
                this,
                "Die ausgewählten Dörfer benötigen mehr als 1000 BB-Codes\n"
                    + "und können daher im Spiel (Forum/IGM/Notizen) nicht auf einmal dargestellt werden.\nTrotzdem exportieren?",
                "Zu viele BB-Codes",
                "Nein",
                "Ja")
            == JOptionPane.NO_OPTION) {
          return;
        }
      }

      Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(b), null);
      showSuccess("Daten in Zwischenablage kopiert");
    } catch (Exception e) {
      logger.error("Failed to copy data to clipboard", e);
      showError("Fehler beim Kopieren in die Zwischenablage");
    }
  }