LCOV - code coverage report
Current view: top level - include/vcl - event.hxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 73 125 58.4 %
Date: 2015-06-13 12:38:46 Functions: 34 58 58.6 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #ifndef INCLUDED_VCL_EVENT_HXX
      21             : #define INCLUDED_VCL_EVENT_HXX
      22             : 
      23             : #include <tools/solar.h>
      24             : #include <vcl/dllapi.h>
      25             : #include <tools/gen.hxx>
      26             : #include <vcl/keycod.hxx>
      27             : #include <vcl/cmdevt.hxx>
      28             : #include <vcl/settings.hxx>
      29             : #include <vcl/vclptr.hxx>
      30             : #include <vcl/outdev.hxx>
      31             : #include <vcl/window.hxx>
      32             : 
      33             : class AllSettings;
      34             : struct IDataObject;
      35             : 
      36             : namespace com { namespace sun { namespace star { namespace awt {
      37             :     struct KeyEvent;
      38             :     struct MouseEvent;
      39             : } } } }
      40             : 
      41             : enum TextDirectionality {
      42             :     TextDirectionality_LeftToRight_TopToBottom,
      43             :     TextDirectionality_RightToLeft_TopToBottom,
      44             :     TextDirectionality_TopToBottom_RightToLeft
      45             : };
      46             : 
      47           1 : class VCL_DLLPUBLIC KeyEvent
      48             : {
      49             : private:
      50             :     vcl::KeyCode    maKeyCode;
      51             :     sal_uInt16      mnRepeat;
      52             :     sal_Unicode     mnCharCode;
      53             : 
      54             : public:
      55             :                     KeyEvent();
      56             :                     KeyEvent( sal_Unicode nChar, const vcl::KeyCode& rKeyCode,
      57             :                               sal_uInt16 nRepeat = 0 );
      58             : 
      59           9 :     sal_Unicode         GetCharCode() const     { return mnCharCode; }
      60          34 :     const vcl::KeyCode& GetKeyCode() const      { return maKeyCode;  }
      61           3 :     sal_uInt16          GetRepeat() const       { return mnRepeat;   }
      62             : 
      63             :     KeyEvent        LogicalTextDirectionality (TextDirectionality eMode) const;
      64             :                     KeyEvent (const KeyEvent& rKeyEvent);
      65             : 
      66             : };
      67             : 
      68           1 : inline KeyEvent::KeyEvent()
      69             : {
      70           1 :     mnCharCode  = 0;
      71           1 :     mnRepeat    = 0;
      72           1 : }
      73             : 
      74           8 : inline KeyEvent::KeyEvent( sal_Unicode nChar, const vcl::KeyCode& rKeyCode,
      75             :                            sal_uInt16 nRepeat ) :
      76           8 :             maKeyCode( rKeyCode )
      77             : 
      78             : {
      79           8 :     mnCharCode  = nChar;
      80           8 :     mnRepeat    = nRepeat;
      81           8 : }
      82             : 
      83             : 
      84             : // - MouseEvent-Types -
      85             : 
      86             : 
      87             : enum class MouseEventModifiers
      88             : {
      89             :    NONE              = 0,
      90             :    // mouse move modifiers
      91             :    SIMPLEMOVE        = 0x0001,
      92             :    DRAGMOVE          = 0x0002,
      93             :    DRAGCOPY          = 0x0004,
      94             :    ENTERWINDOW       = 0x0010,
      95             :    LEAVEWINDOW       = 0x0020,
      96             :    SYNTHETIC         = 0x0040,
      97             :    MODIFIERCHANGED   = 0x0080,
      98             :    // mouse up/down-button modifiers
      99             :    SIMPLECLICK       = 0x0100,
     100             :    SELECT            = 0x0200,
     101             :    MULTISELECT       = 0x0400,
     102             :    RANGESELECT       = 0x0800
     103             : };
     104             : namespace o3tl
     105             : {
     106             :     template<> struct typed_flags<MouseEventModifiers> : is_typed_flags<MouseEventModifiers, 0xff7> {};
     107             : }
     108             : 
     109             : // Maus-Buttons
     110             : #define MOUSE_LEFT              ((sal_uInt16)0x0001)
     111             : #define MOUSE_MIDDLE            ((sal_uInt16)0x0002)
     112             : #define MOUSE_RIGHT             ((sal_uInt16)0x0004)
     113             : 
     114             : 
     115             : // - MouseEvent -
     116             : 
     117             : 
     118             : class VCL_DLLPUBLIC MouseEvent
     119             : {
     120             : private:
     121             :     Point               maPos;
     122             :     MouseEventModifiers mnMode;
     123             :     sal_uInt16          mnClicks;
     124             :     sal_uInt16          mnCode;
     125             : 
     126             : public:
     127             :     explicit        MouseEvent();
     128             :     explicit        MouseEvent( const Point& rPos, sal_uInt16 nClicks = 1,
     129             :                                 MouseEventModifiers nMode = MouseEventModifiers::NONE, sal_uInt16 nButtons = 0,
     130             :                                 sal_uInt16 nModifier = 0 );
     131             : 
     132          64 :     const Point&    GetPosPixel() const     { return maPos; }
     133          17 :     MouseEventModifiers GetMode() const         { return mnMode; }
     134             :                     /** inits this vcl KeyEvent with all settings from the given awt event **/
     135             :                     MouseEvent( const ::com::sun::star::awt::MouseEvent& rEvent );
     136             : 
     137          31 :     sal_uInt16      GetClicks() const       { return mnClicks; }
     138             : 
     139           0 :     bool            IsEnterWindow() const
     140           0 :                         { return bool(mnMode & MouseEventModifiers::ENTERWINDOW); }
     141           6 :     bool            IsLeaveWindow() const
     142           6 :                         { return bool(mnMode & MouseEventModifiers::LEAVEWINDOW); }
     143           0 :     bool            IsSynthetic() const
     144           0 :                         { return bool(mnMode & MouseEventModifiers::SYNTHETIC); }
     145           0 :     bool            IsModifierChanged() const
     146           0 :                         { return bool(mnMode & MouseEventModifiers::MODIFIERCHANGED); }
     147             : 
     148          32 :     sal_uInt16      GetButtons() const
     149          32 :                         { return (mnCode & (MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT)); }
     150          24 :     bool            IsLeft() const
     151          24 :                         { return ((mnCode & MOUSE_LEFT) != 0); }
     152           1 :     bool            IsMiddle() const
     153           1 :                         { return ((mnCode & MOUSE_MIDDLE) != 0); }
     154           6 :     bool            IsRight() const
     155           6 :                         { return ((mnCode & MOUSE_RIGHT) != 0); }
     156             : 
     157          44 :     sal_uInt16      GetModifier() const
     158          44 :                         { return (mnCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2)); }
     159          17 :     bool            IsShift() const
     160          17 :                         { return ((mnCode & KEY_SHIFT) != 0); }
     161           9 :     bool            IsMod1() const
     162           9 :                         { return ((mnCode & KEY_MOD1) != 0); }
     163          14 :     bool            IsMod2() const
     164          14 :                         { return ((mnCode & KEY_MOD2) != 0); }
     165           0 :     bool            IsMod3() const
     166           0 :                         { return ((mnCode & KEY_MOD3) != 0); }
     167             : };
     168             : 
     169       47321 : inline MouseEvent::MouseEvent()
     170             : {
     171       47321 :     mnMode      = MouseEventModifiers::NONE;
     172       47321 :     mnClicks    = 0;
     173       47321 :     mnCode      = 0;
     174       47321 : }
     175             : 
     176          18 : inline MouseEvent::MouseEvent( const Point& rPos, sal_uInt16 nClicks,
     177             :                                MouseEventModifiers nMode,
     178             :                                sal_uInt16 nButtons, sal_uInt16 nModifier ) :
     179          18 :             maPos( rPos )
     180             : {
     181          18 :     mnClicks    = nClicks;
     182          18 :     mnMode      = nMode;
     183          18 :     mnCode      = nButtons | nModifier;
     184          18 : }
     185             : 
     186             : class VCL_DLLPUBLIC ZoomEvent
     187             : {
     188             : private:
     189             :     Point           maCenter;
     190             :     float           mfScale;
     191             : 
     192             : public:
     193           0 :     ZoomEvent() :
     194           0 :         mfScale( 1 )
     195             :     {
     196           0 :     }
     197             : 
     198             :     ZoomEvent( const Point& rCenter,
     199             :                float fScale ) :
     200             :         maCenter( rCenter ),
     201             :         mfScale( fScale )
     202             :     {
     203             :     }
     204             : 
     205           0 :     const Point& GetCenter() const
     206             :     {
     207           0 :         return maCenter;
     208             :     }
     209             : 
     210           0 :     float GetScale() const
     211             :     {
     212           0 :         return mfScale;
     213             :     }
     214             : };
     215             : 
     216             : class VCL_DLLPUBLIC ScrollEvent
     217             : {
     218             : private:
     219             :     int mnXOffset;
     220             :     int mnYOffset;
     221             : 
     222             : public:
     223           0 :     ScrollEvent() :
     224             :         mnXOffset( 0 ),
     225           0 :         mnYOffset( 0 )
     226             :     {
     227           0 :     }
     228             : 
     229             :     ScrollEvent( int xOffset, int yOffset ) :
     230             :         mnXOffset( xOffset ),
     231             :         mnYOffset( yOffset )
     232             :     {
     233             :     }
     234             : 
     235           0 :     int GetXOffset() const
     236             :     {
     237           0 :         return mnXOffset;
     238             :     }
     239             : 
     240           0 :     int GetYOffset() const
     241             :     {
     242           0 :         return mnYOffset;
     243             :     }
     244             : };
     245             : 
     246             : 
     247             : // - HelpEvent -
     248             : 
     249             : enum class HelpEventMode
     250             : {
     251             :     NONE           = 0x0000,
     252             :     CONTEXT        = 0x0001,
     253             :     EXTENDED       = 0x0002,
     254             :     BALLOON        = 0x0004,
     255             :     QUICK          = 0x0008
     256             : };
     257             : namespace o3tl
     258             : {
     259             :     template<> struct typed_flags<HelpEventMode> : is_typed_flags<HelpEventMode, 0x0f> {};
     260             : }
     261             : 
     262             : class VCL_DLLPUBLIC HelpEvent
     263             : {
     264             : private:
     265             :     Point           maPos;
     266             :     HelpEventMode   mnMode;
     267             :     bool            mbKeyboardActivated;
     268             : 
     269             : public:
     270             :     explicit        HelpEvent();
     271             :     explicit        HelpEvent( HelpEventMode nHelpMode );
     272             :     explicit        HelpEvent( const Point& rMousePos, HelpEventMode nHelpMode );
     273             : 
     274           0 :     const Point&    GetMousePosPixel() const { return maPos; }
     275           0 :     HelpEventMode   GetMode() const { return mnMode; }
     276           0 :     bool            KeyboardActivated() const { return mbKeyboardActivated; }
     277           0 :     void            SetKeyboardActivated( bool bKeyboard ) { mbKeyboardActivated = bKeyboard; }
     278             : };
     279             : 
     280             : inline HelpEvent::HelpEvent()
     281             : {
     282             :     mnMode  = HelpEventMode::CONTEXT;
     283             :     mbKeyboardActivated = true;
     284             : }
     285             : 
     286           0 : inline HelpEvent::HelpEvent( const Point& rMousePos, HelpEventMode nHelpMode ) :
     287           0 :             maPos( rMousePos )
     288             : {
     289           0 :     mnMode  = nHelpMode;
     290           0 :     mbKeyboardActivated = false;
     291           0 : }
     292             : 
     293             : inline HelpEvent::HelpEvent( HelpEventMode nHelpMode )
     294             : {
     295             :     mnMode  = nHelpMode;
     296             :     mbKeyboardActivated = true;
     297             : }
     298             : 
     299             : 
     300             : // - UserDrawEvent -
     301             : 
     302             : 
     303       47233 : class VCL_DLLPUBLIC UserDrawEvent
     304             : {
     305             : private:
     306             :     VclPtr<OutputDevice> mpOutDev;
     307             :     Rectangle           maOutRect;
     308             :     sal_uInt16          mnItemId;
     309             :     sal_uInt16          mnStyle;
     310             : 
     311             : public:
     312             :                         UserDrawEvent();
     313             :                         UserDrawEvent( OutputDevice* pOut,
     314             :                                        const Rectangle& rOutRect,
     315             :                                        sal_uInt16 nId, sal_uInt16 nStyle = 0 );
     316             : 
     317       70915 :     OutputDevice*       GetDevice() const { return mpOutDev; }
     318      118192 :     const Rectangle&    GetRect() const { return maOutRect; }
     319       23707 :     sal_uInt16              GetItemId() const { return mnItemId; }
     320       23628 :     sal_uInt16              GetStyle() const { return mnStyle; }
     321             : };
     322             : 
     323             : inline UserDrawEvent::UserDrawEvent()
     324             : {
     325             :     mpOutDev    = NULL;
     326             :     mnItemId    = 0;
     327             :     mnStyle     = 0;
     328             : }
     329             : 
     330       47233 : inline UserDrawEvent::UserDrawEvent( OutputDevice* pOut,
     331             :                                      const Rectangle& rOutRect,
     332             :                                      sal_uInt16 nId, sal_uInt16 nStyle ) :
     333       47233 :             maOutRect( rOutRect )
     334             : {
     335       47233 :     mpOutDev    = pOut;
     336       47233 :     mnItemId    = nId;
     337       47233 :     mnStyle     = nStyle;
     338       47233 : }
     339             : 
     340             : 
     341             : // - TrackingEvent -
     342             : 
     343             : 
     344             : class VCL_DLLPUBLIC TrackingEvent
     345             : {
     346             : private:
     347             :     MouseEvent          maMEvt;
     348             :     TrackingEventFlags  mnFlags;
     349             : 
     350             : public:
     351             :     explicit            TrackingEvent();
     352             :     explicit            TrackingEvent( const MouseEvent&,
     353             :                                        TrackingEventFlags nTrackFlags = TrackingEventFlags::NONE );
     354             : 
     355           0 :     const MouseEvent&   GetMouseEvent() const { return maMEvt; }
     356             : 
     357           0 :     bool                IsTrackingRepeat() const
     358           0 :                             { return bool(mnFlags & TrackingEventFlags::Repeat); }
     359             : 
     360           0 :     bool                IsTrackingEnded() const
     361           0 :                             { return bool(mnFlags & TrackingEventFlags::End); }
     362           0 :     bool                IsTrackingCanceled() const
     363           0 :                             { return bool(mnFlags & TrackingEventFlags::Cancel); }
     364             :     TrackingEventFlags  GetTrackingFlags() const { return mnFlags; }
     365             : };
     366             : 
     367             : inline TrackingEvent::TrackingEvent()
     368             : {
     369             :     mnFlags = TrackingEventFlags::NONE;
     370             : }
     371             : 
     372           0 : inline TrackingEvent::TrackingEvent( const MouseEvent& rMEvt,
     373             :                                      TrackingEventFlags nTrackFlags ) :
     374           0 :             maMEvt( rMEvt )
     375             : {
     376           0 :     mnFlags = nTrackFlags;
     377           0 : }
     378             : 
     379             : 
     380             : // - NotifyEvent -
     381             : 
     382             : enum class MouseNotifyEvent
     383             : {
     384             :     NONE             = 0,
     385             :     MOUSEBUTTONDOWN  = 1,
     386             :     MOUSEBUTTONUP    = 2,
     387             :     MOUSEMOVE        = 3,
     388             :     KEYINPUT         = 4,
     389             :     KEYUP            = 5,
     390             :     GETFOCUS         = 6,
     391             :     LOSEFOCUS        = 7,
     392             :     COMMAND          = 8,
     393             :     DESTROY          = 9,
     394             :     INPUTENABLE      = 10,
     395             :     INPUTDISABLE     = 11,
     396             :     EXECUTEDIALOG    = 100,
     397             :     ENDEXECUTEDIALOG = 101
     398             : };
     399             : 
     400      330300 : class VCL_DLLPUBLIC NotifyEvent
     401             : {
     402             : private:
     403             :     VclPtr<vcl::Window>     mpWindow;
     404             :     void*                   mpData;
     405             :     MouseNotifyEvent        mnEventType;
     406             :     long                    mnRetValue;
     407             : 
     408             : public:
     409             :                             NotifyEvent();
     410             :                             NotifyEvent( MouseNotifyEvent nEventType,
     411             :                                          vcl::Window* pWindow,
     412             :                                          const void* pEvent = NULL,
     413             :                                          long nRet = 0 );
     414             : 
     415     2594300 :     MouseNotifyEvent        GetType() const { return mnEventType; }
     416      178873 :     vcl::Window*            GetWindow() const { return mpWindow; }
     417           0 :     void*                   GetData() const { return mpData; }
     418             : 
     419             :     void                    SetReturnValue( long nRet ) { mnRetValue = nRet; }
     420             :     long                    GetReturnValue() const { return mnRetValue; }
     421             : 
     422             :     const KeyEvent*         GetKeyEvent() const;
     423             :     const MouseEvent*       GetMouseEvent() const;
     424             :     const CommandEvent*     GetCommandEvent() const;
     425             : };
     426             : 
     427          12 : inline const KeyEvent* NotifyEvent::GetKeyEvent() const
     428             : {
     429          12 :     if ( (mnEventType == MouseNotifyEvent::KEYINPUT) || (mnEventType == MouseNotifyEvent::KEYUP) )
     430           2 :         return static_cast<const KeyEvent*>(mpData);
     431             :     else
     432          10 :         return NULL;
     433             : }
     434             : 
     435           0 : inline const MouseEvent* NotifyEvent::GetMouseEvent() const
     436             : {
     437           0 :     if ( (mnEventType >= MouseNotifyEvent::MOUSEBUTTONDOWN) && (mnEventType <= MouseNotifyEvent::MOUSEMOVE) )
     438           0 :         return static_cast<const MouseEvent*>(mpData);
     439             :     else
     440           0 :         return NULL;
     441             : }
     442             : 
     443           0 : inline const CommandEvent* NotifyEvent::GetCommandEvent() const
     444             : {
     445           0 :     if ( mnEventType == MouseNotifyEvent::COMMAND )
     446           0 :         return static_cast<const CommandEvent*>(mpData);
     447             :     else
     448           0 :         return NULL;
     449             : }
     450             : 
     451             : 
     452             : // - DataChangedEvent -
     453             : 
     454             : 
     455             : enum class DataChangedEventType {
     456             :     NONE               = 0,
     457             :     SETTINGS           = 1,
     458             :     DISPLAY            = 2,
     459             :     FONTS              = 4,
     460             :     PRINTER            = 5,
     461             :     FONTSUBSTITUTION   = 6,
     462             :     USER               = 10000
     463             : };
     464             : 
     465             : class VCL_DLLPUBLIC DataChangedEvent
     466             : {
     467             : private:
     468             :     void*                   mpData;
     469             :     AllSettingsFlags        mnFlags;
     470             :     DataChangedEventType    mnType;
     471             : 
     472             : public:
     473             :     explicit                DataChangedEvent();
     474             :     explicit                DataChangedEvent( DataChangedEventType nType,
     475             :                                               const void* pData = NULL,
     476             :                                               AllSettingsFlags nFlags = AllSettingsFlags::NONE );
     477             : 
     478       46010 :     DataChangedEventType    GetType() const { return mnType; }
     479             :     void*                   GetData() const { return mpData; }
     480       19343 :     AllSettingsFlags        GetFlags() const { return mnFlags; }
     481             : 
     482             :     const AllSettings*      GetOldSettings() const;
     483             : };
     484             : 
     485             : inline DataChangedEvent::DataChangedEvent()
     486             : {
     487             :     mpData  = NULL;
     488             :     mnFlags = AllSettingsFlags::NONE;
     489             :     mnType  = DataChangedEventType::NONE;
     490             : }
     491             : 
     492       18049 : inline DataChangedEvent::DataChangedEvent( DataChangedEventType nType,
     493             :                                            const void* pData,
     494             :                                            AllSettingsFlags nChangeFlags )
     495             : {
     496       18049 :     mpData  = const_cast<void*>(pData);
     497       18049 :     mnFlags = nChangeFlags;
     498       18049 :     mnType  = nType;
     499       18049 : }
     500             : 
     501          56 : inline const AllSettings* DataChangedEvent::GetOldSettings() const
     502             : {
     503          56 :     if ( mnType == DataChangedEventType::SETTINGS )
     504          56 :         return static_cast<const AllSettings*>(mpData);
     505             :     else
     506           0 :         return NULL;
     507             : }
     508             : 
     509             : #endif // INCLUDED_VCL_EVENT_HXX
     510             : 
     511             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11