Package org.gudy.azureus2.ui.swt.sharing.progress

Source Code of org.gudy.azureus2.ui.swt.sharing.progress.ProgressWindow$progressDialog

/*
* File    : ProgressWindow.java
* Created : 15-Jan-2004
* By      : parg
*
* Azureus - a Java Bittorrent client
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package org.gudy.azureus2.ui.swt.sharing.progress;

/**
* @author parg
*
*/
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.widgets.*;

import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.pluginsimpl.local.PluginInitializer;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.animations.Animator;
import org.gudy.azureus2.ui.swt.animations.shell.AnimableShell;
import org.gudy.azureus2.ui.swt.animations.shell.LinearAnimator;
import org.gudy.azureus2.ui.swt.shells.PopupShell;

import org.gudy.azureus2.plugins.sharing.ShareException;
import org.gudy.azureus2.plugins.sharing.ShareManager;
import org.gudy.azureus2.plugins.sharing.ShareManagerListener;
import org.gudy.azureus2.plugins.sharing.ShareResource;

public class
ProgressWindow
  implements ShareManagerListener
{
  private boolean  DO_ANIMATION  = false// broken so I'm turning off
 
  private ShareManager  share_manager;
  private progressDialog  dialog = null;
 
  private Display      display;
 
  private StyledText    tasks;
  private ProgressBar    progress;
  private Button       cancel_button;
 

  private boolean      shell_opened;
  private boolean      manually_hidden;
 
  public
  ProgressWindow(
    Display    _display )
  {
    try{
      share_manager  = PluginInitializer.getDefaultInterface().getShareManager();
     
      display = _display;
         
      share_manager.addListener(this);
     
    }catch( ShareException e ){
     
      Debug.printStackTrace( e );
    }
   
  }
 
  private class
  progressDialog
    extends   PopupShell
    implements   AnimableShell
  {   
    protected
    progressDialog(
      Display        dialog_display )
    {
      super(dialog_display);
     
      if ( dialog_display.isDisposed()){
               
        return;
      }
     
      shell.setText(MessageText.getString("sharing.progress.title"));
     

      tasks = new StyledText(shell, SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER)
      tasks.setBackground(dialog_display.getSystemColor(SWT.COLOR_WHITE));     
     
      progress = new ProgressBar(shell, SWT.NULL);
      progress.setMinimum(0);
      progress.setMaximum(100);           
           
       
      Button hide_button = new Button(shell,SWT.PUSH);
      hide_button.setText(MessageText.getString("sharing.progress.hide"));
     
      cancel_button = new Button(shell,SWT.PUSH);
      cancel_button.setText(MessageText.getString("sharing.progress.cancel"));
      cancel_button.setEnabled( false );
     
        //Layout :
       
        //Progress Bar on bottom, with Hide button next to it.
     
        FormData formData;
        formData = new FormData();
        formData.right = new FormAttachment(100,-5);
        formData.bottom = new FormAttachment(100,-10);
       
        hide_button.setLayoutData(formData);
      
        formData = new FormData();
        formData.right = new FormAttachment(hide_button,-5);
        formData.bottom = new FormAttachment(100,-10);
       
        cancel_button.setLayoutData(formData);
             
        formData = new FormData();
        formData.right = new FormAttachment(cancel_button,-5);
        formData.left = new FormAttachment(0,50);
        formData.bottom = new FormAttachment(100,-10);
       
        progress.setLayoutData(formData);
       
        formData = new FormData();
        formData.right = new FormAttachment(100,-5);
        formData.bottom = new FormAttachment(100,-50);
        formData.top = new FormAttachment(0,5);
        formData.left = new FormAttachment(0,5);
       
        tasks.setLayoutData(formData);
       
       
        layout();
     
      cancel_button.addListener(SWT.Selection,new Listener() {
        public void handleEvent(Event e) {
          cancel_button.setEnabled( false );
           
          share_manager.cancelOperation();
        }
      });
     
      hide_button.addListener(SWT.Selection,new Listener() {
        public void handleEvent(Event e) {
          hidePanel();
        }
      });
     
     
      shell.setDefaultButton( hide_button );
     
      shell.addListener(SWT.Traverse, new Listener() { 
        public void handleEvent(Event e) {
          if ( e.character == SWT.ESC){
            hidePanel();
          }
        }
      });

     
        Rectangle bounds = shell.getMonitor().getClientArea();   
        x0 = bounds.x + bounds.width - 255;
        x1 = bounds.x + bounds.width;
 
        y0 = bounds.y + bounds.height;
        y1 = bounds.y + bounds.height - 155;
       
        if ( DO_ANIMATION ){
          shell.setLocation(x0,y0);
        }else{
          shell.setLocation(x0,y1);
        }
    }
   
    protected void
    hidePanel()
    {   
      manually_hidden  = true;
      if ( DO_ANIMATION ){
        currentAnimator = new LinearAnimator(this,new Point(x0,y1),new Point(x1,y1),15,30);
        currentAnimator.start();
        hideAfter = true;
      }else{
        shell.setVisible( false );
      }
    }
   
    protected void
    showPanel()
    {
      manually_hidden  = false;
     
      boolean animate = false ;
      if ( !shell_opened ){
     
        shell_opened = true;
       
        shell.open()
       
        animate = DO_ANIMATION ;
      }
     
     
           
     
      if ( !shell.isVisible()){       
        shell.setVisible(true);
        animate = DO_ANIMATION ;
      }
     
      shell.moveAbove(null);

      if(animate && currentAnimator == null) {
            currentAnimator = new LinearAnimator(this,new Point(x0,y0),new Point(x0,y1),15,30);
            currentAnimator.start();
      }
    }
   
  protected boolean
  isShown()
  {
    return( shell.isVisible());
  }
   
   
   
    //Animation properties
    Animator currentAnimator;
    int x0,y0,x1,y1;
   
    boolean isAnimated;
    boolean hideAfter;
   
    public void animationEnded(Animator source) {
      if(source != currentAnimator)
        return;
      isAnimated = false;
      currentAnimator = null;
      if(hideAfter) {
        hideAfter = false;
        if(display == null || display.isDisposed())
          return;
        display.asyncExec(new AERunnable() {         
          public void runSupport() {
            shell.setVisible(false);
          }
        });
      }
    }

    public void animationStarted(Animator source) {
    }

    public Shell getShell() {
      return shell;
    }

    public void reportPercent(int percent) {
    }
  }
 
  public void
  resourceAdded(
    ShareResource    resource )
  {   
      // we don't want to pick these additions up
   
    if ( !share_manager.isInitialising()){
     
      reportCurrentTask( "Resource added: " + resource.getName());
    }
  }
 
  public void
  resourceModified(
    ShareResource    old_resource,
    ShareResource    new_resource )
  {
    reportCurrentTask( "Resource modified: " + old_resource.getName());
  }
 
  public void
  resourceDeleted(
    ShareResource    resource )
  {
    reportCurrentTask( "Resource deleted: " + resource.getName())
  }
 
  public void
  reportProgress(
    final int    percent_complete )
  {
    Utils.execSWTThread(new AERunnable() {
      public void runSupport() {
        if (progress != null && !progress.isDisposed()) {

          if (dialog == null) {
            dialog = new progressDialog(display);
            if (dialog == null) {
              return;
            }
          }

          // only allow percentage updates to make the window visible
          // if it hasn't been manually hidden

          if (!dialog.isShown() && !manually_hidden) {

            dialog.showPanel();
          }

          cancel_button.setEnabled(percent_complete < 100);

          progress.setSelection(percent_complete);
        }

      }
    });
  }
 
  public void
  reportCurrentTask(
    final String  task_description )
  {
    Utils.execSWTThread(new AERunnable() {
      public void runSupport() {

        if (dialog == null) {
          dialog = new progressDialog(display);
          if (dialog == null) {
            return;
          }
        }

        if (tasks != null && !tasks.isDisposed()) {
          dialog.showPanel();

          tasks.append(task_description + Text.DELIMITER);

          int lines = tasks.getLineCount();

          // tasks(nbLines - 2, 1, colors[_color]);

          tasks.setTopIndex(lines - 1);
        }
      }
    });
  }
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.sharing.progress.ProgressWindow$progressDialog

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.