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

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

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

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Arrays;

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.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;

import com.dubture.composer.ui.controller.ScriptsController;
import com.dubture.composer.ui.dialogs.ScriptDialog;
import com.dubture.composer.ui.editor.ComposerFormPage;
import com.dubture.composer.ui.editor.FormLayoutFactory;
import com.dubture.composer.ui.editor.TreeSection;
import com.dubture.composer.ui.parts.TreePart;
import com.dubture.getcomposer.core.collection.JsonArray;
import com.dubture.getcomposer.core.objects.Scripts;

public class ScriptsSection extends TreeSection implements PropertyChangeListener {

  private TreeViewer scriptsViewer;
 
  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;
 
  public ScriptsSection(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("Scripts");
    section.setDescription("Manage the scripts for your package.");
    section.setLayout(FormLayoutFactory.createClearGridLayout(false, 1));
    GridData gd = new GridData(GridData.FILL_BOTH);
    gd.grabExcessVerticalSpace = true;
    section.setLayoutData(gd);

    Composite container = createClientContainer(section, 2, toolkit);
    createViewerPartControl(container, SWT.SINGLE, 2, toolkit);
    TreePart treePart = getTreePart();
    ScriptsController scriptsController = new ScriptsController();
    scriptsViewer = treePart.getTreeViewer();
    scriptsViewer.setContentProvider(scriptsController);
    scriptsViewer.setLabelProvider(scriptsController);
   
    toolkit.paintBordersFor(container);
    section.setClient(container);
    section.setLayout(FormLayoutFactory.createClearGridLayout(false, 1));

    scriptsViewer.setInput(composerPackage.getScripts());
    composerPackage.addPropertyChangeListener(this);
    updateButtons();
   
    makeActions();
    updateMenu();
  }
 
  protected boolean createCount() {
    return true;
  }
 
  private void updateButtons() {
    ISelection selection = scriptsViewer.getSelection();
   
    TreePart treePart = getTreePart();
    treePart.setButtonEnabled(ADD_INDEX, enabled);
    treePart.setButtonEnabled(EDIT_INDEX, !selection.isEmpty() && enabled);
    treePart.setButtonEnabled(REMOVE_INDEX, !selection.isEmpty() && enabled);
  }
 
  private void updateMenu() {
    IStructuredSelection selection = (IStructuredSelection)scriptsViewer.getSelection();
   
    editAction.setEnabled(selection.size() > 0);
    removeAction.setEnabled(selection.size() > 0);
  }
 
  @Override
  public void setEnabled(boolean enabled) {
    super.setEnabled(enabled);
    updateButtons();
   
    refresh();
    scriptsViewer.getTree().setEnabled(enabled);
  }

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

  @Override
  public void propertyChange(PropertyChangeEvent e) {
    if (e.getPropertyName().startsWith("scripts")) {
      refresh();
    }
  }
 
  protected void selectionChanged(IStructuredSelection sel) {
    updateButtons();
    updateMenu();
  }
 
  private void makeActions() {
    addAction = new Action("Add...") {
      @Override
      public void run() {
        handleAdd();
      }
    };
   
    editAction = new Action("Edit...") {
      @Override
      public void run() {
        handleEdit();
      }
    };
   
    removeAction = new Action("Remove") {
      @Override
      public void run() {
        handleRemove();
      }
    };
  }
 
  @Override
  protected void fillContextMenu(IMenuManager manager) {
    manager.add(addAction);
    manager.add(editAction);
    manager.add(removeAction);
  }
 
  private void handleAdd() {
    ScriptDialog diag = new ScriptDialog(scriptsViewer.getTree().getShell());
   
    if (!scriptsViewer.getSelection().isEmpty()) {
      Object element = ((StructuredSelection)scriptsViewer.getSelection()).getFirstElement();
      ScriptsController controller = (ScriptsController)scriptsViewer.getLabelProvider();
      String text = controller.getText(element);
      if (Arrays.asList(Scripts.getEvents()).contains(text)) {
        diag.setEvent(text);
      }
    }
   
    if (diag.open() == Dialog.OK) {
      composerPackage.getScripts().getAsArray(diag.getEvent()).add(diag.getHandler());
      refresh();
    }
  }
 
  private void handleEdit() {
    Object element = ((StructuredSelection)scriptsViewer.getSelection()).getFirstElement();
    ScriptsController controller = (ScriptsController)scriptsViewer.getLabelProvider();
    String text = controller.getText(element);
    ScriptDialog diag = new ScriptDialog(scriptsViewer.getTree().getShell());
   
    // edit event
    if (Arrays.asList(Scripts.getEvents()).contains(text)) {
      diag.setEvent(text);
      diag.setHandlerEnabled(false);
      if (diag.open() == Dialog.OK) {
        String event = diag.getEvent();
        if (!event.equalsIgnoreCase(text)) {
          composerPackage.getScripts().set(event,
              composerPackage.getScripts().getAsArray(text));
          composerPackage.getScripts().remove(text);
        }
      }
    }
   
    // edit handler
    else {
      String event = controller.getText(controller.getParent(element));
      diag.setEvent(event);
      diag.setHandler(text);
      diag.setEventEnabled(false);
      if (diag.open() == Dialog.OK) {
        String handler = diag.getHandler();
        if (!handler.equalsIgnoreCase(text)) {
          JsonArray events = composerPackage.getScripts().getAsArray(event);
          events.replace(text, handler);
        }
      }
    }
  }
 
  private void handleRemove() {
    Object element = ((StructuredSelection)scriptsViewer.getSelection()).getFirstElement();
    ScriptsController controller = (ScriptsController)scriptsViewer.getLabelProvider();
    String text = controller.getText(element);
   
    // remove event
    if (Arrays.asList(Scripts.getEvents()).contains(text)) {
      MessageDialog diag = new MessageDialog(
        scriptsViewer.getTree().getShell(),
        "Remove Event",
        null,
        "Do you really wan't to remove " + text + "?",
        MessageDialog.WARNING,
        new String[] {"Yes", "No"},
        0);

      if (diag.open() == Dialog.OK) {
        composerPackage.getScripts().remove(text);
      }
    }
   
    // remove handler
    else {
      String event = controller.getText(controller.getParent(element));
     
      MessageDialog diag = new MessageDialog(
          scriptsViewer.getTree().getShell(),
          "Remove Event",
          null,
          "Do you really wan't to remove " + text + " in " + event + "?",
          MessageDialog.WARNING,
          new String[] {"Yes", "No"},
          0);
     
      if (diag.open() == Dialog.OK) {
        JsonArray events = composerPackage.getScripts().getAsArray(event);
        events.remove(text);
      }
    }
  }
 
  @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.ScriptsSection

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.