Package com.simonepezzano.hshare.composites

Source Code of com.simonepezzano.hshare.composites.StuffComposite

package com.simonepezzano.hshare.composites;

import java.io.File;
import java.net.URI;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TreeColumn;

import com.simonepezzano.hshare.HFiles;
import com.simonepezzano.hshare.HLog;
import com.simonepezzano.hshare.Statics;
import com.simonepezzano.hshare.dialogs.AttributesDialog;
import com.simonepezzano.hshare.providers.TreeFilesLabelProvider;
import com.simonepezzano.hshare.providers.TreeFilesProvider;
import com.simonepezzano.hshare.providers.TreeSorter;

/**
* This composite contains the information about the shared directories and files
* @author Simone Pezzano
*/
public class StuffComposite extends Composite {

  private TreeViewer tv;
  private TreeSorter ts;
  private TreeFilesProvider tfp;
  private TreeFilesLabelProvider tflp;
 
  public StuffComposite(Composite parent, int style) {
    super(parent, style);
    setLayout(new GridLayout());

    tv = new TreeViewer(this,SWT.BORDER|SWT.MULTI);
    tv.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
    tv.getTree().setHeaderVisible(true);
   
    TreeColumn tc0 = new TreeColumn(tv.getTree(),SWT.NONE);
    tc0.setText("Path");
    tc0.setWidth(400);
   
    TreeColumn tc1 = new TreeColumn(tv.getTree(),SWT.NONE);
    tc1.setText("Size");
    tc1.setWidth(100);
   
    TreeColumn tc2 = new TreeColumn(tv.getTree(),SWT.NONE);
    tc2.setText("A.K.A.");
    tc2.setWidth(150);
   
    TreeColumn tc3 = new TreeColumn(tv.getTree(),SWT.MULTI);
    tc3.setText("Comment");
    tc3.setWidth(200);
   
    tfp = new TreeFilesProvider();
    tflp = new TreeFilesLabelProvider();
    ts = new TreeSorter();
    tv.setContentProvider(tfp);
    tv.setLabelProvider(tflp);
   
    tv.setSorter(ts);
    tv.setInput(DocumentHelper.createDocument());
   
    tv.addDoubleClickListener(new IDoubleClickListener(){
      public void doubleClick(DoubleClickEvent event) {
        startEdit(((Element)((IStructuredSelection)event.getSelection()).getFirstElement()));
      }
    });
   
     DropTarget dt = new DropTarget(tv.getTree(), DND.DROP_LINK);
     dt.setTransfer(new Transfer[] { TextTransfer.getInstance() });
     dt.addDropListener(new DropTargetAdapter() {
       public void drop(DropTargetEvent event) {
         try{
           String uriStr = String.valueOf(event.data).trim();
           URI uri = URI.create(uriStr);
           HFiles.getInstance().add(new File(uri).getAbsolutePath());
           refresh();
         }catch(Exception e){e.printStackTrace();}
         }
       });
   
    try {
      refresh();
    } catch (DocumentException e) {
      HLog.doclogger.fatal("Refreshing the files document revealed it to be malformed, how strange...",e);
    }

  }
  /**
   * Checks the tree consistency and refreshes the treeviewer displaying the share areas
   * @throws DocumentException
   */
  public void refresh() throws DocumentException{
    Document doc = HFiles.getInstance().getDocument();
    HFiles.getInstance().checkTree(doc.getRootElement());
    tfp.setFiles(doc);
    tv.refresh();
  }
  /**
   * Opens the editing window
   * @param el the HShare descriptor we want to edit
   */
  public void startEdit(Element el){
    AttributesDialog ad = new AttributesDialog(StuffComposite.this.getShell(),el);
    ad.setLocation(Statics.getOriginForCenter(AttributesDialog.WIDTH, AttributesDialog.HEIGHT));
    HLog.facelogger.debug("Starting properties editing");
    ad.addDisposeListener(new DisposeListener(){
      public void widgetDisposed(DisposeEvent e) {
        HLog.facelogger.debug("Properties editing finished, refreshing contents");
        tv.refresh();
      }
    });
    ad.open();
  }
  /**
   * Opens the editing window for the selected ite
   */
  public void startEdit(){
    startEdit(((Element)((IStructuredSelection)tv.getSelection()).getFirstElement()));
  }
  /**
   * @return the TreeViewer displaying the share information
   */
  public TreeViewer getTv() {
    return tv;
  }

}
TOP

Related Classes of com.simonepezzano.hshare.composites.StuffComposite

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.