/***************************************************************************
                            KCursor.java -  description
                             -------------------
    begin                : Fri Nov 15 11:45:52 2002
    copyright            : (C) 2000-2002 Lost Highway Ltd.
    email                : Richard_Dale@tipitina.demon.co.uk
    generated by         : duke@tipitina on Fri Nov 15 11:45:52 2002, using kalyptus 0.9.
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU Library General Public License as published by*
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
***************************************************************************/

package org.kde.koala;

import org.kde.qt.*;
import java.util.*;
import java.lang.Error;

/**

 A wrapper around {@link QCursor} that allows for "themed" cursors.

 Currently, the only themed cursor is a hand shaped cursor.

 A typical usage would be
 <PRE>
 	setCursor(KCursor.handCursor());
 </PRE>

 @author Kurt Granroth <granroth@kde.org>
 
 @short A QCursor wrapper allowing "themed" cursors and auto-hiding cursors.

*/
public class KCursor extends Qt  {
	protected KCursor(Class dummy){super((Class) null);}

	private native void newKCursor();

/** 
 Constructor.

 Does not do anything so far.

*/
	public KCursor() {
		super((Class) null);
		newKCursor();
	}

/** 
 Returns the proper hand cursor according to
 the current GUI style (static function).
     
*/
	public static native QCursor handCursor();

/** 
 Returns the proper arrow+hourglass cursor according to
 the current GUI style (static function).
     
*/
	public static native QCursor workingCursor();

/** 
 Returns the proper arrow cursor according to
 the current GUI style (static function).
     
*/
	public static native QCursor arrowCursor();

/** 
 Returns the proper up arrow cursor according to
 the current GUI style (static function).
     
*/
	public static native QCursor upArrowCursor();

/** 
 Returns the proper cross-hair cursor according to
 the current GUI style (static function).
     
*/
	public static native QCursor crossCursor();

/** 
 Returns the proper hourglass cursor according to
 the current GUI style (static function).
     
*/
	public static native QCursor waitCursor();

/** 
 Returns the proper text cursor according to
 the current GUI style (static function).
     
*/
	public static native QCursor ibeamCursor();

/** 
 Returns the proper vertical resize cursor
 according to the current GUI style (static function).
     
*/
	public static native QCursor sizeVerCursor();

/** 
 Returns the proper horizontal resize cursor
 according to the current GUI style (static function).
     
*/
	public static native QCursor sizeHorCursor();

/** 
 Returns the proper diagonal resize (/) cursor
 according to the current GUI style (static function).
     
*/
	public static native QCursor sizeBDiagCursor();

/** 
 Returns the proper diagonal resize (\) cursor
 according to the current GUI style (static function).
     
*/
	public static native QCursor sizeFDiagCursor();

/** 
 Returns the proper all-directions resize cursor
 according to the current GUI style (static function).
     
*/
	public static native QCursor sizeAllCursor();

/** 
 Returns a blank or invisible cursor (static function).
     
*/
	public static native QCursor blankCursor();

/** 
 Returns a WhatsThis cursor (static function).
     
*/
	public static native QCursor whatsThisCursor();

/** 
 Sets auto-hiding the cursor for widget <code>w.</code> Enabling it will result in
 the cursor being hidden when

 The cursor will be shown again when the focus is lost or a mouse-event
 happens.

 Side effect: when enabling auto-hide, mouseTracking is enabled for the
 specified widget, because it's needed to get mouse-move-events. So
 don't disable mouseTracking for a widget while using auto-hide for it.

 When disabling auto-hide, mouseTracking will be disabled, so if you need
 mouseTracking after disabling auto-hide, you have to reenable
 mouseTracking.

 If you want to use auto-hiding for widgets that don't take focus, e.g.
 a QCanvasView, then you have to pass all key-events that should trigger
 auto-hiding to {@link #autoHideEventFilter}.
     
*/
	public static native void setAutoHideCursor( QWidget w, boolean enable);

/** 
 Overloaded method for the case where you have an event-filter installed
 on the widget you want to enable auto-cursor-hiding.

 In this case set <code>customEventFilter</code> to true and call
 {@link #autoHideEventFilter} from the beginning of your eventFilter().

*/
	public static native void setAutoHideCursor( QWidget w, boolean enable, boolean customEventFilter);

/** 
 Sets the delay time in milliseconds for auto-hiding. When no keyboard
 events arrive for that time-frame, the cursor will be hidden.

 Default is 5000, i.e. 5 seconds.
     
*/
	public static native void setHideCursorDelay( int ms);

/** 

 Default is 5000, i.e. 5 seconds.
     
*/
	public static native int hideCursorDelay();

/** 
 KCursor has to install an eventFilter over the widget you want to
 auto-hide. If you have an own eventFilter() on that widget and stop
 some events by returning true, you might break auto-hiding, because
 KCursor doesn't get those events.

 In this case, you need to call setAutoHideCursor( widget, true, true );
 to tell KCursor not to install an eventFilter. Then you call this method
 from the beginning of your eventFilter, for example:
 <pre>
 edit = new KEdit( this, "some edit widget" );
 edit.installEventFilter( this );
 KCursor.setAutoHideCursor( edit, true, true );

 [...]

 boolean YourClass.eventFilter( QObject o, QEvent e )
 {
     if ( o == edit ) // only that widget where you enabled auto-hide!
         KCursor.autoHideEventFilter( o, e );

     // now you can do your own event-processing
     [...]
 }
 </pre>

 Note that you must not call KCursor.autoHideEventFilter() when you
 didn't enable or after disabling auto-hiding.
     
*/
	public static native void autoHideEventFilter( QObject arg1, QEvent arg2);
}
