Package com.dubture.composer.ui.editor.composer

Source Code of com.dubture.composer.ui.editor.composer.AuthorSection

package com.dubture.composer.ui.editor.composer;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;

import com.dubture.composer.ui.ComposerUIPluginImages;
import com.dubture.composer.ui.dialogs.PersonDialog;
import com.dubture.composer.ui.editor.ComposerFormPage;
import com.dubture.composer.ui.editor.FormLayoutFactory;
import com.dubture.composer.ui.editor.TableSection;
import com.dubture.composer.ui.parts.TablePart;
import com.dubture.getcomposer.core.collection.Persons;
import com.dubture.getcomposer.core.objects.Person;

public class AuthorSection extends TableSection implements PropertyChangeListener {

  private TableViewer authorViewer;
 
  private IAction addAction;
  private IAction editAction;
  private IAction removeAction;
 
  private static final int ADD_INDEX = 0;
  private static final int EDIT_INDEX = 1;
  private static final int REMOVE_INDEX = 2;

  class AuthorController extends StyledCellLabelProvider implements IStructuredContentProvider {

    private Persons authors;
    private Image authorImage = ComposerUIPluginImages.PERSON.createImage();

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
      authors = (Persons)newInput;
    }

    public Object[] getElements(Object inputElement) {
      return authors.toArray();
    }
   
    public void update(ViewerCell cell) {
      Object obj = cell.getElement();
     
      if (obj instanceof Person) {
        Person author = (Person)obj;
       
        StyledString styledString = new StyledString(author.getName());
       
        if (author.getEmail() != null && author.getEmail().trim() != "" && !author.getEmail().trim().equals("")) {
          styledString.append(" <" + author.getEmail().trim() + ">", StyledString.COUNTER_STYLER);
        }
       
        if (author.getHomepage() != null && author.getHomepage().trim() != "" && !author.getHomepage().trim().equals("")) {
          styledString.append(" - " + author.getHomepage().trim(), StyledString.DECORATIONS_STYLER);
        }
       
        cell.setText(styledString.toString());
        cell.setStyleRanges(styledString.getStyleRanges());
       
        cell.setImage(authorImage);
       
        super.update(cell);
      }
    }
  }
 
  public AuthorSection(ComposerFormPage page, Composite parent) {
    super(page, parent, Section.DESCRIPTION, new String[]{"Add...", "Edit...", "Remove"});
//    createClient(getSection(), page.getManagedForm().getToolkit());
  }
 

  @Override
  protected void createClient(Section section, FormToolkit toolkit) {
    section.setText("Authors");
    section.setDescription("Honour the glorious authors of this package.");
    section.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));

    Composite container = createClientContainer(section, 2, toolkit);
    createViewerPartControl(container, SWT.MULTI, 2, toolkit);
    TablePart tablePart = getTablePart();
    AuthorController authorController = new AuthorController();
    authorViewer = tablePart.getTableViewer();
    authorViewer.setContentProvider(authorController);
    authorViewer.setLabelProvider(authorController);
   
    toolkit.paintBordersFor(container);
    section.setClient(container);
    section.setLayout(FormLayoutFactory.createClearGridLayout(false, 1));

    authorViewer.setInput(composerPackage.getAuthors());
    composerPackage.addPropertyChangeListener(this);
    updateButtons();
   
    makeActions();
    updateMenu();
  }
 
  protected boolean createCount() {
    return true;
  }
 
  private void updateButtons() {
    ISelection selection = authorViewer.getSelection();
   
    TablePart tablePart = getTablePart();
    tablePart.setButtonEnabled(ADD_INDEX, enabled);
    tablePart.setButtonEnabled(EDIT_INDEX, !selection.isEmpty() && enabled);
    tablePart.setButtonEnabled(REMOVE_INDEX, !selection.isEmpty() && enabled);
  }
 
  private void updateMenu() {
    IStructuredSelection selection = (IStructuredSelection)authorViewer.getSelection();
   
    editAction.setEnabled(selection.size() > 0);
    removeAction.setEnabled(selection.size() > 0);
  }
 
  @Override
  public void setEnabled(boolean enabled) {
    super.setEnabled(enabled);
    updateButtons();
   
    refresh();
    authorViewer.getTable().setEnabled(enabled);
  }

  public void refresh() {
    authorViewer.refresh();
    super.refresh();
  }

  @Override
  public void propertyChange(PropertyChangeEvent e) {
    if (e.getPropertyName().startsWith("authors")) {
//      refresh();
    }
  }
 
  protected void selectionChanged(IStructuredSelection sel) {
    updateButtons();
    updateMenu();
  }
 
  private void makeActions() {
    addAction = new Action("Add...") {
      public void run() {
        handleAdd();
      }
    };
   
    editAction = new Action("Edit...") {
      public void run() {
        handleEdit();
      }
    };
   
    removeAction = new Action("Remove") {
      public void run() {
        handleRemove();
      }
    };
  }
 
  @Override
  protected void fillContextMenu(IMenuManager manager) {
    manager.add(addAction);
    manager.add(editAction);
    manager.add(removeAction);
  }
 
  private void handleAdd() {
    PersonDialog diag = new PersonDialog(authorViewer.getTable().getShell(), new Person());
    if (diag.open() == Dialog.OK) {
      composerPackage.getAuthors().add(diag.getPerson());
      refresh();
    }
  }
 
  private void handleEdit() {
    Person author = (Person)((StructuredSelection)authorViewer.getSelection()).getFirstElement();
    PersonDialog diag = new PersonDialog(authorViewer.getTable().getShell(), author.clone());
    if (diag.open() == Dialog.OK) {
      author.setName(diag.getPerson().getName());
      author.setEmail(diag.getPerson().getEmail());
      author.setHomepage(diag.getPerson().getHomepage());
      author.setRole(diag.getPerson().getRole());
    }
  }
 
  @SuppressWarnings("unchecked")
  private void handleRemove() {
    StructuredSelection selection = ((StructuredSelection)authorViewer.getSelection());
    Iterator<Object> it = selection.iterator();
    String[] names = new String[selection.size()];
    List<Person> persons = new ArrayList<Person>();

    for (int i = 0; it.hasNext(); i++) {
      Person person = (Person)it.next();
      persons.add(person);
      names[i] = person.getName();
    }

    MessageDialog diag = new MessageDialog(
        authorViewer.getTable().getShell(),
        "Remove Author" + (selection.size() > 1 ? "s" : ""),
        null,
        "Do you really wan't to remove " + StringUtils.join(names, ", ") + "?",
        MessageDialog.WARNING,
        new String[] {"Yes", "No"},
        0);
   
    if (diag.open() == Dialog.OK) {
      for (Person person : persons) {
        composerPackage.getAuthors().remove(person);
      }
    }
  }
 
  @Override
  protected void buttonSelected(int index) {
    switch (index) {
    case ADD_INDEX:
      handleAdd();
      break;
     
    case EDIT_INDEX:
      handleEdit();
      break;
     
    case REMOVE_INDEX:
      handleRemove();
      break;
    }
  }
}
TOP

Related Classes of com.dubture.composer.ui.editor.composer.AuthorSection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.