blob: 020a826ce677aeb09ea182fd553dddf5e53ed136 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SV_EVENT_HXX
#define _SV_EVENT_HXX
#include <vcl/sv.h>
#include <vcl/dllapi.h>
#include <tools/gen.hxx>
#include <vcl/keycod.hxx>
#include <vcl/cmdevt.hxx>
class AllSettings;
class OutputDevice;
class Window;
struct IDataObject;
namespace com { namespace sun { namespace star { namespace awt {
struct KeyEvent;
struct MouseEvent;
} } } }
enum TextDirectionality {
TextDirectionality_LeftToRight_TopToBottom,
TextDirectionality_RightToLeft_TopToBottom,
TextDirectionality_TopToBottom_RightToLeft
};
// ------------
// - KeyEvent -
// ------------
class VCL_DLLPUBLIC KeyEvent
{
private:
KeyCode maKeyCode;
sal_uInt16 mnRepeat;
xub_Unicode mnCharCode;
public:
KeyEvent();
KeyEvent( xub_Unicode nChar, const KeyCode& rKeyCode,
sal_uInt16 nRepeat = 0 );
/** inits this vcl KeyEvent with all settings from the given awt event **/
KeyEvent( const ::com::sun::star::awt::KeyEvent& rEvent );
/** fills out the given awt KeyEvent with all settings from this vcl event **/
void InitKeyEvent( ::com::sun::star::awt::KeyEvent& rEvent ) const;
xub_Unicode GetCharCode() const { return mnCharCode; }
const KeyCode& GetKeyCode() const { return maKeyCode; }
sal_uInt16 GetRepeat() const { return mnRepeat; }
KeyEvent LogicalTextDirectionality (TextDirectionality eMode) const;
KeyEvent (const KeyEvent& rKeyEvent);
};
inline KeyEvent::KeyEvent()
{
mnCharCode = 0;
mnRepeat = 0;
}
inline KeyEvent::KeyEvent( xub_Unicode nChar, const KeyCode& rKeyCode,
sal_uInt16 nRepeat ) :
maKeyCode( rKeyCode )
{
mnCharCode = nChar;
mnRepeat = nRepeat;
}
// --------------------
// - MouseEvent-Types -
// --------------------
// Maus-Move-Modi
#define MOUSE_SIMPLEMOVE ((sal_uInt16)0x0001)
#define MOUSE_DRAGMOVE ((sal_uInt16)0x0002)
#define MOUSE_DRAGCOPY ((sal_uInt16)0x0004)
#define MOUSE_ENTERWINDOW ((sal_uInt16)0x0010)
#define MOUSE_LEAVEWINDOW ((sal_uInt16)0x0020)
#define MOUSE_SYNTHETIC ((sal_uInt16)0x0040)
#define MOUSE_MODIFIERCHANGED ((sal_uInt16)0x0080)
// Maus-Button-Down/Up-Modi
#define MOUSE_SIMPLECLICK ((sal_uInt16)0x0001)
#define MOUSE_SELECT ((sal_uInt16)0x0002)
#define MOUSE_MULTISELECT ((sal_uInt16)0x0004)
#define MOUSE_RANGESELECT ((sal_uInt16)0x0008)
// Maus-Buttons
#define MOUSE_LEFT ((sal_uInt16)0x0001)
#define MOUSE_MIDDLE ((sal_uInt16)0x0002)
#define MOUSE_RIGHT ((sal_uInt16)0x0004)
// --------------
// - MouseEvent -
// --------------
class VCL_DLLPUBLIC MouseEvent
{
private:
Point maPos;
sal_uInt16 mnMode;
sal_uInt16 mnClicks;
sal_uInt16 mnCode;
public:
explicit MouseEvent();
explicit MouseEvent( const Point& rPos, sal_uInt16 nClicks = 1,
sal_uInt16 nMode = 0, sal_uInt16 nButtons = 0,
sal_uInt16 nModifier = 0 );
const Point& GetPosPixel() const { return maPos; }
sal_uInt16 GetMode() const { return mnMode; }
/** inits this vcl KeyEvent with all settings from the given awt event **/
MouseEvent( const ::com::sun::star::awt::MouseEvent& rEvent );
/** fills out the given awt KeyEvent with all settings from this vcl event **/
void InitMouseEvent( ::com::sun::star::awt::MouseEvent& rEvent ) const;
sal_uInt16 GetClicks() const { return mnClicks; }
sal_Bool IsEnterWindow() const
{ return ((mnMode & MOUSE_ENTERWINDOW) != 0); }
sal_Bool IsLeaveWindow() const
{ return ((mnMode & MOUSE_LEAVEWINDOW) != 0); }
sal_Bool IsSynthetic() const
{ return ((mnMode & MOUSE_SYNTHETIC) != 0); }
sal_Bool IsModifierChanged() const
{ return ((mnMode & MOUSE_MODIFIERCHANGED) != 0); }
sal_uInt16 GetButtons() const
{ return (mnCode & (MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT)); }
sal_Bool IsLeft() const
{ return ((mnCode & MOUSE_LEFT) != 0); }
sal_Bool IsMiddle() const
{ return ((mnCode & MOUSE_MIDDLE) != 0); }
sal_Bool IsRight() const
{ return ((mnCode & MOUSE_RIGHT) != 0); }
sal_uInt16 GetModifier() const
{ return (mnCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2)); }
sal_Bool IsShift() const
{ return ((mnCode & KEY_SHIFT) != 0); }
sal_Bool IsMod1() const
{ return ((mnCode & KEY_MOD1) != 0); }
sal_Bool IsMod2() const
{ return ((mnCode & KEY_MOD2) != 0); }
sal_Bool IsMod3() const
{ return ((mnCode & KEY_MOD3) != 0); }
};
inline MouseEvent::MouseEvent()
{
mnMode = 0;
mnClicks = 0;
mnCode = 0;
}
inline MouseEvent::MouseEvent( const Point& rPos, sal_uInt16 nClicks,
sal_uInt16 nMode,
sal_uInt16 nButtons, sal_uInt16 nModifier ) :
maPos( rPos )
{
mnClicks = nClicks;
mnMode = nMode;
mnCode = nButtons | nModifier;
}
// -------------
// - HelpEvent -
// -------------
#define HELPMODE_CONTEXT ((sal_uInt16)0x0001)
#define HELPMODE_EXTENDED ((sal_uInt16)0x0002)
#define HELPMODE_BALLOON ((sal_uInt16)0x0004)
#define HELPMODE_QUICK ((sal_uInt16)0x0008)
class VCL_DLLPUBLIC HelpEvent
{
private:
Point maPos;
sal_uInt16 mnMode;
sal_Bool mbKeyboardActivated;
public:
explicit HelpEvent();
explicit HelpEvent( sal_uInt16 nHelpMode );
explicit HelpEvent( const Point& rMousePos, sal_uInt16 nHelpMode );
const Point& GetMousePosPixel() const;
sal_uInt16 GetMode() const { return mnMode; }
sal_Bool KeyboardActivated() const { return mbKeyboardActivated; }
void SetKeyboardActivated( sal_Bool bKeyboard ) { mbKeyboardActivated = bKeyboard; }
};
inline HelpEvent::HelpEvent()
{
mnMode = HELPMODE_CONTEXT;
mbKeyboardActivated = sal_True;
}
inline HelpEvent::HelpEvent( const Point& rMousePos, sal_uInt16 nHelpMode ) :
maPos( rMousePos )
{
mnMode = nHelpMode;
mbKeyboardActivated = sal_False;
}
inline HelpEvent::HelpEvent( sal_uInt16 nHelpMode )
{
mnMode = nHelpMode;
mbKeyboardActivated = sal_True;
}
// -----------------
// - UserDrawEvent -
// -----------------
class VCL_DLLPUBLIC UserDrawEvent
{
private:
OutputDevice* mpOutDev;
Rectangle maOutRect;
sal_uInt16 mnItemId;
sal_uInt16 mnStyle;
public:
UserDrawEvent();
UserDrawEvent( OutputDevice* pOut,
const Rectangle& rOutRect,
sal_uInt16 nId, sal_uInt16 nStyle = 0 );
OutputDevice* GetDevice() const { return mpOutDev; }
const Rectangle& GetRect() const { return maOutRect; }
sal_uInt16 GetItemId() const { return mnItemId; }
sal_uInt16 GetStyle() const { return mnStyle; }
};
inline UserDrawEvent::UserDrawEvent()
{
mpOutDev = NULL;
mnItemId = 0;
mnStyle = 0;
}
inline UserDrawEvent::UserDrawEvent( OutputDevice* pOut,
const Rectangle& rOutRect,
sal_uInt16 nId, sal_uInt16 nStyle ) :
maOutRect( rOutRect )
{
mpOutDev = pOut;
mnItemId = nId;
mnStyle = nStyle;
}
// ------------------
// - Tracking-Types -
// ------------------
#define ENDTRACK_CANCEL ((sal_uInt16)0x0001)
#define ENDTRACK_KEY ((sal_uInt16)0x0002)
#define ENDTRACK_FOCUS ((sal_uInt16)0x0004)
#define ENDTRACK_END ((sal_uInt16)0x1000)
#define ENDTRACK_DONTCALLHDL ((sal_uInt16)0x8000)
#define TRACKING_REPEAT ((sal_uInt16)0x0100)
// -----------------
// - TrackingEvent -
// -----------------
class VCL_DLLPUBLIC TrackingEvent
{
private:
MouseEvent maMEvt;
sal_uInt16 mnFlags;
public:
explicit TrackingEvent();
explicit TrackingEvent( const MouseEvent&,
sal_uInt16 nTrackFlags = 0 );
const MouseEvent& GetMouseEvent() const { return maMEvt; }
sal_Bool IsTrackingRepeat() const
{ return ((mnFlags & TRACKING_REPEAT) != 0); }
sal_Bool IsTrackingEnded() const
{ return ((mnFlags & ENDTRACK_END) != 0); }
sal_Bool IsTrackingCanceled() const
{ return ((mnFlags & ENDTRACK_CANCEL) != 0); }
sal_uInt16 GetTrackingFlags() const { return mnFlags; }
};
inline TrackingEvent::TrackingEvent()
{
mnFlags = 0;
}
inline TrackingEvent::TrackingEvent( const MouseEvent& rMEvt,
sal_uInt16 nTrackFlags ) :
maMEvt( rMEvt )
{
mnFlags = nTrackFlags;
}
// ---------------
// - NotifyEvent -
// ---------------
#define EVENT_MOUSEBUTTONDOWN 1
#define EVENT_MOUSEBUTTONUP 2
#define EVENT_MOUSEMOVE 3
#define EVENT_KEYINPUT 4
#define EVENT_KEYUP 5
#define EVENT_GETFOCUS 6
#define EVENT_LOSEFOCUS 7
#define EVENT_COMMAND 8
#define EVENT_DESTROY 9
#define EVENT_INPUTENABLE 10
#define EVENT_INPUTDISABLE 11
#define EVENT_EXECUTEDIALOG 100
#define EVENT_ENDEXECUTEDIALOG 101
#define EVENT_USER 10000
class VCL_DLLPUBLIC NotifyEvent
{
private:
Window* mpWindow;
void* mpData;
sal_uInt16 mnType;
long mnRetValue;
public:
NotifyEvent();
NotifyEvent( sal_uInt16 nType,
Window* pWindow,
const void* pEvent = NULL,
long nRet = 0 );
sal_uInt16 GetType() const { return mnType; }
Window* GetWindow() const { return mpWindow; }
void* GetData() const { return mpData; }
void SetReturnValue( long nRet ) { mnRetValue = nRet; }
long GetReturnValue() const { return mnRetValue; }
const KeyEvent* GetKeyEvent() const;
const MouseEvent* GetMouseEvent() const;
const CommandEvent* GetCommandEvent() const;
};
inline NotifyEvent::NotifyEvent()
{
mpWindow = NULL;
mpData = NULL;
mnType = 0;
mnRetValue = 0;
}
inline NotifyEvent::NotifyEvent( sal_uInt16 nType, Window* pWindow,
const void* pEvent, long nRet )
{
mpWindow = pWindow;
mpData = (void*)pEvent;
mnType = nType;
mnRetValue = nRet;
}
inline const KeyEvent* NotifyEvent::GetKeyEvent() const
{
if ( (mnType == EVENT_KEYINPUT) || (mnType == EVENT_KEYUP) )
return (const KeyEvent*)mpData;
else
return NULL;
}
inline const MouseEvent* NotifyEvent::GetMouseEvent() const
{
if ( (mnType >= EVENT_MOUSEBUTTONDOWN) && (mnType <= EVENT_MOUSEMOVE) )
return (const MouseEvent*)mpData;
else
return NULL;
}
inline const CommandEvent* NotifyEvent::GetCommandEvent() const
{
if ( mnType == EVENT_COMMAND )
return (const CommandEvent*)mpData;
else
return NULL;
}
// --------------------
// - DataChangedEvent -
// --------------------
#define DATACHANGED_SETTINGS ((sal_uInt16)1)
#define DATACHANGED_DISPLAY ((sal_uInt16)2)
#define DATACHANGED_DATETIME ((sal_uInt16)3)
#define DATACHANGED_FONTS ((sal_uInt16)4)
#define DATACHANGED_PRINTER ((sal_uInt16)5)
#define DATACHANGED_FONTSUBSTITUTION ((sal_uInt16)6)
#define DATACHANGED_USER ((sal_uInt16)10000)
class VCL_DLLPUBLIC DataChangedEvent
{
private:
void* mpData;
sal_uLong mnFlags;
sal_uInt16 mnType;
public:
explicit DataChangedEvent();
explicit DataChangedEvent( sal_uInt16 nType,
const void* pData = NULL,
sal_uLong nFlags = 0 );
sal_uInt16 GetType() const { return mnType; }
void* GetData() const { return mpData; }
sal_uLong GetFlags() const { return mnFlags; }
const AllSettings* GetOldSettings() const;
};
inline DataChangedEvent::DataChangedEvent()
{
mpData = NULL;
mnFlags = 0;
mnType = 0;
}
inline DataChangedEvent::DataChangedEvent( sal_uInt16 nType,
const void* pData,
sal_uLong nChangeFlags )
{
mpData = (void*)pData;
mnFlags = nChangeFlags;
mnType = nType;
}
inline const AllSettings* DataChangedEvent::GetOldSettings() const
{
if ( mnType == DATACHANGED_SETTINGS )
return (const AllSettings*)mpData;
else
return NULL;
}
#endif // _SV_EVENT_HXX