Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SWT - Showing a busy Cursor

I am trying to change the cursor when I start a operation. I want the cursor showing busy until the operation is finished. I have a separate class for the operationListener. I am not sure how to assign the cursor?

Call from AplotBaseDialog class

listOp.addOperationListener(new MyOperationListener(this) {
    etc....
} 

Separate Class

 public abstract class MyOperationListener implements InterfaceAIFOperationListener {
   Cursor busyCursor = null;
   AplotBaseDialog w = null;

  public MyOperationListener(AplotBaseDialog win) {

  **Should this not be getCurrent?**
    busyCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_WAIT);

    w = win;
  } // end constructor

  public void startOperation(String startMessage) {
     ** should this be getting a Shell form the AplotBaseDialog? **
     w.???.setCursor(busyCursor);

  } // end startOperation()

  public void endOperation() {
     try {
        endOperationImpl();
     }
     finally {
        w.???.setCursor(null);
     }
  } // end endOperation()

  abstract protected void endOperationImpl();
 } // end class MyOperationListener

EDIT

  plotButton.addSelectionListener(new SelectionAdapter() {
         public void widgetSelected(SelectionEvent e) {
            BusyIndicator.showWhile(Display.getDefault(), new Runnable(){
               public void run(){
                  startPrinterListOperation(); 
               }
             });
         }
   });  

EDIT

 private void startPrinterListOperation() {

  listOp = new AplotPrinterListOperation(appReg.getString("aplot.message.GETPRINTERLIST"), session);
  listOp.addOperationListener(new MyOperationListener(this) {
     public void endOperationImpl() {
        try {
           printers.clear();
           printers.addAll((ArrayList<PrinterProfile>) listOp.getPrinters());
           Display.getDefault().asyncExec(new Runnable() {
              public void run() {

                 showAplotPlotterDialog();
              }
           });
        }
        finally {

           listOp.removeOperationListener(this);
           listOp = null;
        }
     }
  });
  session.queueOperation(listOp);


 } // end startPrinterListOperation()
like image 460
jkteater Avatar asked Sep 17 '12 20:09

jkteater


1 Answers

You could use

    BusyIndicator.showWhile(Display.getDefault(), new Runnable(){

    public void run(){
       //your code
    }
    });
like image 154
sambi reddy Avatar answered Nov 14 '22 22:11

sambi reddy