Hi Giorgio, RoundTripListener is a bit of a misnomer. It is fired only when a round trip starts and ends on the server. It does not take into account the roundtrip start/end on the client.
Setting cursor in the RounTripListener methods does not help because the message will reach the client only after the roundtrip has ended. ULC follows a request-response architecture and all the requests are initiated from the client. So the server cannot "push" a request to the client unless the client has already started a roundtrip. For synchronous requests, ULC blocks user inputs to the ULC client and installs the wait cursor till the response to the request returns to the client. Moreover, installing your own EventQueue is not advisable in ULC because ULC installs its own EventQueue which is special. So, basically what you are trying to do is sort of simulate a ULCProgressBar i.e. you want a special cursor to indicate that your long action is in progress and at the end of the action you want to reset the cursor back to the default. I have created a small snippet (at the end of this mail) that achieves what you desire. In the snippet, the long task is excuted in ULCPollingTimer. Note that the onus of disabling other widgets and windows is on the programmer. I would also like you to read about ULCProgressBar and http://ulc-community.canoo.com/snipsnap/space/Contributions/Extensions/Progr ess+Pane I hope this helps. Thanks and regards, Janak -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of Zanetti, Giorgio Sent: Monday, July 31, 2006 3:23 PM To: [EMAIL PROTECTED] Subject: How to change client cursor Hello all, I'm trying to modify the style of the cursor when my client application is waiting for long running server elaborations. The intent is to replace the hourglass with a custom cursor any time it appears. I've added a RoundTripListener to my ApplicationContext and modified the client and server half objects to handle my new setCursor methods. When I run my application, I've noticed that: -the round trip listener is invoked as soon as the server application is busy (for debug purpose I print a sample message when the listener is invoked); -the setCursor client methods of the half objects are invoked; -the client cursor remains an hourglass and change only at the end of the transaction (seams that the setCursor message is the last message sent from server to client); A solution may be to send, from roundTripDidStart/roundTripDidEnd methods of the listener RoundTripListener, asynchronous messages to the client component. But I don't know why? I'm new to ULC and I'm trying many solutions without results. Can you help me in solving this problem? Best regards Giorgio Z. --------------------------------- import com.ulcjava.base.application.AbstractApplication; import com.ulcjava.base.application.ULCBoxPane; import com.ulcjava.base.application.ULCButton; import com.ulcjava.base.application.ULCFrame; import com.ulcjava.base.application.ULCPollingTimer; import com.ulcjava.base.application.UlcUtilities; import com.ulcjava.base.application.event.ActionEvent; import com.ulcjava.base.application.event.IActionListener; import com.ulcjava.base.development.DevelopmentRunner; public class HourGlassCursorSnippet extends AbstractApplication { public void start() { final ULCButton button = new ULCButton("Long Action"); final ULCFrame frame = new ULCFrame("HourGlassCursorSnippet"); ULCBoxPane centerPane = new ULCBoxPane(true); centerPane.add(ULCBoxPane.BOX_EXPAND_EXPAND, button); button.addActionListener(new IActionListener() { public void actionPerformed(ActionEvent event) { System.out.println("Action Started"); button.setEnabled(false); final ULCPollingTimer timer = new ULCPollingTimer(500, null); timer.setRepeats(false); timer.addActionListener(new IActionListener() { char fCurrentChar = 'A'; public void actionPerformed(ActionEvent event) { if (fCurrentChar <= 'Z') { // simulate a task UlcUtilities.getRootPane(button).setCursor(com.u lcjava.base.application.util.Cursor.CROSSHAIR_CURSOR); try { Thread.sleep(Math.round(1000*Math.random())) ; } catch (InterruptedException e) { } fCurrentChar++; timer.restart(); } else { button.setEnabled(true); UlcUtilities.getRootPane(button).setCursor(com.u lcjava.base.application.util.Cursor.DEFAULT_CURSOR); System.out.println("Action Ended"); } } }); timer.start(); } }); frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE); frame.setContentPane(centerPane); frame.setSize(200,200); frame.setVisible(true); } public static void main(String[] args) { DevelopmentRunner.setApplicationClass(HourGlassCursorSnippet.class) ; DevelopmentRunner.main(args); } } _______________________________________________ ULC-developer mailing list [email protected] http://lists.canoo.com/mailman/listinfo/ulc-developer
