/* (non-Javadoc)
   * @see org.d3s.alricg.generator.views.RefreshableViewPartImpl#createTable(org.eclipse.swt.widgets.Composite)
   */
  @Override
  protected TableViewer createTable(Composite parent) {
    // init Table
    int idx = 0;
    final TableViewer tableViewer =
        new TableViewer(parent, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
    tableViewer.getTable().setLinesVisible(true);
    tableViewer.getTable().setHeaderVisible(true);
    ColumnViewerToolTipSupport.enableFor(tableViewer, ToolTip.NO_RECREATE);

    // Columns setzen
    TableViewerColumn tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("*");
    tc.setLabelProvider(new CustomColumnLabelProvider.GeneralImageProvider());
    tc.getColumn().setWidth(25);
    tc.getColumn().setMoveable(false);
    tc.getColumn()
        .addSelectionListener(
            new ViewerSelectionListener(
                new CustomColumnViewerSorter.GeneralImageSorter(), tableViewer));

    tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
    tableViewer.getTable().setSortColumn(tc.getColumn());
    tc.getColumn().setText("Name");
    tc.setLabelProvider(new CustomColumnLabelProvider.NameLabelProvider());
    tc.getColumn().setWidth(DEFAULT_FIRSTCOLUMN_WIDTH);
    tc.getColumn()
        .addSelectionListener(
            new ViewerSelectionListener(new CustomColumnViewerSorter.NameSorter(), tableViewer));

    tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("Art");
    tc.setLabelProvider(new CustomColumnLabelProvider.FertigkeitArtProvider());
    tc.getColumn().setWidth(125);
    tc.getColumn().setMoveable(true);
    tc.getColumn()
        .addSelectionListener(
            new ViewerSelectionListener(
                new CustomColumnViewerSorter.FertigkeitArtSorter(), tableViewer));

    tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("GP");
    tc.getColumn().setToolTipText("Generierungspunkte Kosten");
    tc.setLabelProvider(new CustomColumnLabelProvider.VorNachteilGpProvider());
    tc.getColumn().setWidth(100);
    tc.getColumn().setMoveable(true);
    tc.getColumn()
        .addSelectionListener(
            new ViewerSelectionListener(
                new CustomColumnViewerSorter.VorNachteilGpSorter(), tableViewer));

    tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("SE");
    tc.getColumn().setToolTipText("Schlechte Eigenschaft");
    tc.getColumn().setWidth(27);
    tc.setLabelProvider(new SchlechteEigenschaftProvider());
    tc.getColumn()
        .addSelectionListener(
            new ViewerSelectionListener(
                new CustomColumnViewerSorter.SchlechteEigenschaftSorter(), tableViewer));

    tc = new TableViewerColumn(tableViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("Voraussetzung");
    tc.setLabelProvider(new CharElementVoraussetzungProvider());
    tc.getColumn().setWidth(200);
    tc.getColumn().setMoveable(true);
    tc.getColumn()
        .addSelectionListener(
            new ViewerSelectionListener(
                new CustomColumnViewerSorter.CharElementVoraussetzungSorter(), tableViewer));

    // Inhalt und Sortierung setzen
    tableViewer.setContentProvider(new TableViewContentProvider());
    tableViewer.getTable().setSortDirection(SWT.UP);
    tableViewer.setSorter(new CustomColumnViewerSorter.NameSorter());
    tableViewer.setInput(
        ViewUtils.buildTableView(
            StoreDataAccessor.getInstance().getXmlAccessors(),
            getRegulator(),
            this.getObjectCreator()));

    return tableViewer;
  }
  /** Erstellt eine TreeTable + ContextMenu und setzt sie in den View */
  protected TreeViewer createTree(Composite parent) {
    // Init Viewer
    int idx = 0;
    final TreeViewer treeViewer =
        new TreeViewer(parent, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
    treeViewer.getTree().setLinesVisible(true);
    treeViewer.getTree().setHeaderVisible(true);
    ColumnViewerToolTipSupport.enableFor(treeViewer, ToolTip.NO_RECREATE);

    // Columns
    TreeViewerColumn tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("Name");
    treeViewer.getTree().setSortColumn(tc.getColumn());
    tc.setLabelProvider(new CustomColumnLabelProvider.NameLabelProvider());
    tc.getColumn().setWidth(DEFAULT_FIRSTCOLUMN_WIDTH);
    tc.getColumn()
        .addSelectionListener(
            new ViewerSelectionListener(new CustomColumnViewerSorter.NameSorter(), treeViewer));

    tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("*");
    tc.setLabelProvider(new CustomColumnLabelProvider.GeneralImageProvider());
    tc.getColumn().setWidth(25);
    tc.getColumn().setMoveable(false);
    tc.getColumn()
        .addSelectionListener(
            new ViewerSelectionListener(
                new CustomColumnViewerSorter.GeneralImageSorter(), treeViewer));

    tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("Art");
    tc.setLabelProvider(
        new ColumnLabelProvider() {
          @Override
          public String getText(Object element) {
            if (((TreeObject) element).getValue() instanceof Talent) {
              return ((Talent) ((TreeObject) element).getValue()).getArt().toString();
            }
            return ""; //$NON-NLS-1$
          }
        });
    tc.getColumn().setWidth(75);
    tc.getColumn().setMoveable(true);
    tc.getColumn().addSelectionListener(new ViewerSelectionListener(new ArtSorter(), treeViewer));

    tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("Probe");
    tc.setLabelProvider(new CustomColumnLabelProvider.Faehigkeit3EigenschaftProvider());
    tc.getColumn().setWidth(75);
    tc.getColumn().setMoveable(true);

    tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("SKT");
    tc.setLabelProvider(new CustomColumnLabelProvider.SKTLabelProvider());
    tc.getColumn().setWidth(75);
    tc.getColumn().setMoveable(true);
    tc.getColumn()
        .addSelectionListener(
            new ViewerSelectionListener(new CustomColumnViewerSorter.SktSorter(), treeViewer));

    tc = new TreeViewerColumn(treeViewer, SWT.LEFT, idx++);
    tc.getColumn().setText("Voraussetzung");
    tc.setLabelProvider(new CustomColumnLabelProvider.CharElementVoraussetzungProvider());
    tc.getColumn().setWidth(150);
    tc.getColumn().setMoveable(true);
    tc.getColumn()
        .addSelectionListener(
            new ViewerSelectionListener(
                new CustomColumnViewerSorter.CharElementVoraussetzungSorter(), treeViewer));

    // Inhalt und Sortierung setzen
    TreeObject root =
        ViewUtils.buildTreeView(
            StoreDataAccessor.getInstance().getXmlAccessors(),
            getRegulator(),
            this.getObjectCreator());
    treeViewer.setContentProvider(new TreeViewContentProvider(root));
    treeViewer.getTree().setSortDirection(SWT.DOWN);
    treeViewer.setSorter(new CustomColumnViewerSorter.NameSorter());
    treeViewer.setInput(root);

    return treeViewer;
  }