summaryrefslogtreecommitdiff
path: root/vcl/inc/salframe.hxx
blob: 63096e0e2a40190e359c48260b5b5045db12aa33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */

#ifndef _SV_SALFRAME_HXX
#define _SV_SALFRAME_HXX

#include <tools/solar.h>
#include <vcl/dllapi.h>

#ifdef __cplusplus

#include <vcl/ptrstyle.hxx>

#endif // __cplusplus
#include <salwtype.hxx>
#include <salgeom.hxx>
#include <tools/gen.hxx>
#include <vcl/region.hxx>

#include <vcl/impdel.hxx>
#include <rtl/ustring.hxx>
#include <vcl/keycod.hxx>

class AllSettings;
class SalGraphics;
class SalBitmap;
class SalMenu;
class Window;


struct SalFrameState;
struct SalInputContext;
struct SystemEnvData;

// -----------------
// - SalFrameTypes -
// -----------------

#define SAL_FRAME_TOTOP_RESTOREWHENMIN      ((sal_uInt16)0x0001)
#define SAL_FRAME_TOTOP_FOREGROUNDTASK      ((sal_uInt16)0x0002)
#define SAL_FRAME_TOTOP_GRABFOCUS           ((sal_uInt16)0x0004)
#define SAL_FRAME_TOTOP_GRABFOCUS_ONLY       ((sal_uInt16)0x0008)

#define SAL_FRAME_ENDEXTTEXTINPUT_COMPLETE  ((sal_uInt16)0x0001)
#define SAL_FRAME_ENDEXTTEXTINPUT_CANCEL    ((sal_uInt16)0x0002)


// -----------------
// - SalFrameStyle -
// -----------------

#define SAL_FRAME_STYLE_DEFAULT             ((sal_uLong)0x00000001)
#define SAL_FRAME_STYLE_MOVEABLE            ((sal_uLong)0x00000002)
#define SAL_FRAME_STYLE_SIZEABLE            ((sal_uLong)0x00000004)
#define SAL_FRAME_STYLE_CLOSEABLE           ((sal_uLong)0x00000008)

// no shadow effect on WindowsXP
#define SAL_FRAME_STYLE_NOSHADOW            ((sal_uLong)0x00000010)
// indicate tooltip windows, so they can always be topmost
#define SAL_FRAME_STYLE_TOOLTIP             ((sal_uLong)0x00000020)
// windows without windowmanager decoration, this typically only applies to floating windows
#define SAL_FRAME_STYLE_OWNERDRAWDECORATION ((sal_uLong)0x00000040)
// dialogs
#define SAL_FRAME_STYLE_DIALOG              ((sal_uLong)0x00000080)
// partial fullscreen: fullscreen on one monitor of a multimonitor display
#define SAL_FRAME_STYLE_PARTIAL_FULLSCREEN  ((sal_uLong)0x00800000)
// plugged system child window
#define SAL_FRAME_STYLE_PLUG                ((sal_uLong)0x10000000)
// system child window inside another SalFrame
#define SAL_FRAME_STYLE_SYSTEMCHILD         ((sal_uLong)0x08000000)
// floating window
#define SAL_FRAME_STYLE_FLOAT               ((sal_uLong)0x20000000)
// floating window that needs to be focusable
#define SAL_FRAME_STYLE_FLOAT_FOCUSABLE     ((sal_uLong)0x04000000)
// toolwindows should be painted with a smaller decoration
#define SAL_FRAME_STYLE_TOOLWINDOW          ((sal_uLong)0x40000000)
// the window containing the intro bitmap, aka splashscreen
#define SAL_FRAME_STYLE_INTRO               ((sal_uLong)0x80000000)

// ----------------------------------------
// - extended frame style                 -
// - (sal equivalent to extended WinBits) -
// ----------------------------------------
typedef sal_uInt64 SalExtStyle;
#define SAL_FRAME_EXT_STYLE_DOCUMENT        SalExtStyle(0x00000001)
#define SAL_FRAME_EXT_STYLE_DOCMODIFIED     SalExtStyle(0x00000002)

// ------------------------
// - Flags for SetPosSize -
// ------------------------

#define SAL_FRAME_POSSIZE_X                 ((sal_uInt16)0x0001)
#define SAL_FRAME_POSSIZE_Y                 ((sal_uInt16)0x0002)
#define SAL_FRAME_POSSIZE_WIDTH             ((sal_uInt16)0x0004)
#define SAL_FRAME_POSSIZE_HEIGHT            ((sal_uInt16)0x0008)

#ifdef __cplusplus

using ::rtl::OUString;
using ::rtl::OString;

// ------------
// - SalFrame -
// ------------

struct SystemParentData;

class VCL_PLUGIN_PUBLIC SalFrame : public vcl::DeletionNotifier
{
    // the VCL window corresponding to this frame
    Window*                 m_pWindow;
    SALFRAMEPROC            m_pProc;
public:                     // public for Sal Implementation
    SalFrame() : m_pWindow( NULL ), m_pProc( NULL ) {}
    virtual ~SalFrame();

public:                     // public for Sal Implementation
    SalFrameGeometry        maGeometry;

public:
    // SalGraphics or NULL, but two Graphics for all SalFrames
    // must be returned
    virtual SalGraphics*        GetGraphics() = 0;
    virtual void                ReleaseGraphics( SalGraphics* pGraphics ) = 0;

    // Event must be destroyed, when Frame is destroyed
    // When Event is called, SalInstance::Yield() must be returned
    virtual sal_Bool                PostEvent( void* pData ) = 0;

    virtual void                SetTitle( const rtl::OUString& rTitle ) = 0;
    virtual void                SetIcon( sal_uInt16 nIcon ) = 0;
    virtual void                SetRepresentedURL( const rtl::OUString& );
    virtual void                    SetMenu( SalMenu *pSalMenu ) = 0;
    virtual void                    DrawMenuBar() = 0;

    virtual void                SetExtendedFrameStyle( SalExtStyle nExtStyle ) = 0;

    // Before the window is visible, a resize event
    // must be sent with the correct size
    virtual void                Show( sal_Bool bVisible, sal_Bool bNoActivate = sal_False ) = 0;
    virtual void                Enable( sal_Bool bEnable ) = 0;
    // Set ClientSize and Center the Window to the desktop
    // and send/post a resize message
    virtual void                SetMinClientSize( long nWidth, long nHeight ) = 0;
    virtual void                SetMaxClientSize( long nWidth, long nHeight ) = 0;
    virtual void                SetPosSize( long nX, long nY, long nWidth, long nHeight, sal_uInt16 nFlags ) = 0;
    virtual void                GetClientSize( long& rWidth, long& rHeight ) = 0;
    virtual void                GetWorkArea( Rectangle& rRect ) = 0;
    virtual SalFrame*           GetParent() const = 0;
    // Note: x will be mirrored at parent if UI mirroring is active
    SalFrameGeometry            GetGeometry();
    const SalFrameGeometry&     GetUnmirroredGeometry() const { return maGeometry; }
    virtual void                SetWindowState( const SalFrameState* pState ) = 0;
    virtual sal_Bool                GetWindowState( SalFrameState* pState ) = 0;
    virtual void                ShowFullScreen( sal_Bool bFullScreen, sal_Int32 nDisplay ) = 0;
    // Enable/Disable ScreenSaver, SystemAgents, ...
    virtual void                StartPresentation( sal_Bool bStart ) = 0;
    // Show Window over all other Windows
    virtual void                SetAlwaysOnTop( sal_Bool bOnTop ) = 0;

    // Window to top and grab focus
    virtual void                ToTop( sal_uInt16 nFlags ) = 0;

    // this function can call with the same
    // pointer style
    virtual void                SetPointer( PointerStyle ePointerStyle ) = 0;
    virtual void                CaptureMouse( sal_Bool bMouse ) = 0;
    virtual void                SetPointerPos( long nX, long nY ) = 0;

    // flush output buffer
    virtual void                Flush( void) = 0;
    virtual void                Flush( const Rectangle& );
    // flush output buffer, wait till outstanding operations are done
    virtual void                Sync() = 0;

    virtual void                SetInputContext( SalInputContext* pContext ) = 0;
    virtual void                EndExtTextInput( sal_uInt16 nFlags ) = 0;

    virtual rtl::OUString              GetKeyName( sal_uInt16 nKeyCode ) = 0;

    // returns in 'rKeyCode' the single keycode that translates to the given unicode when using a keyboard layout of language 'aLangType'
    // returns sal_False if no mapping exists or function not supported
    // this is required for advanced menu support
    virtual sal_Bool                MapUnicodeToKeyCode( sal_Unicode aUnicode, LanguageType aLangType, KeyCode& rKeyCode ) = 0;

    // returns the input language used for the last key stroke
    // may be LANGUAGE_DONTKNOW if not supported by the OS
    virtual LanguageType        GetInputLanguage() = 0;

    virtual void                UpdateSettings( AllSettings& rSettings ) = 0;

    // returns system data (most prominent: window handle)
    virtual const SystemEnvData*    GetSystemData() const = 0;

    // get current modifier, button mask and mouse position
    struct SalPointerState
    {
        sal_uLong   mnState;
        Point   maPos;      // in frame coordinates
    };

    virtual SalPointerState     GetPointerState() = 0;

    struct SalIndicatorState
    {
        sal_uInt16  mnState;
    };

    virtual SalIndicatorState   GetIndicatorState() = 0;

    virtual void                SimulateKeyPress( sal_uInt16 nKeyCode ) = 0;

    // set new parent window
    virtual void                SetParent( SalFrame* pNewParent ) = 0;
    // reparent window to act as a plugin; implementation
    // may choose to use a new system window inetrnally
    // return false to indicate failure
    virtual bool                SetPluginParent( SystemParentData* pNewParent ) = 0;

    // move the frame to a new screen
    virtual void                SetScreenNumber( unsigned int nScreen ) = 0;

    virtual void                SetApplicationID( const rtl::OUString &rApplicationID) = 0;

    // shaped system windows
    // set clip region to none (-> rectangular windows, normal state)
    virtual void                    ResetClipRegion() = 0;
    // start setting the clipregion consisting of nRects rectangles
    virtual void                    BeginSetClipRegion( sal_uLong nRects ) = 0;
    // add a rectangle to the clip region
    virtual void                    UnionClipRegion( long nX, long nY, long nWidth, long nHeight ) = 0;
    // done setting up the clipregion
    virtual void                    EndSetClipRegion() = 0;

    // Callbacks (indepent part in vcl/source/window/winproc.cxx)
    // for default message handling return 0
    void                        SetCallback( Window* pWindow, SALFRAMEPROC pProc )
    { m_pWindow = pWindow; m_pProc = pProc; }

    // returns the instance set
    Window*                       GetWindow() const { return m_pWindow; }

    // Call the callback set; this sometimes necessary for implementation classes
    // that should not now more than necessary about the SalFrame implementation
    // (e.g. input methods, printer update handlers).
    long                        CallCallback( sal_uInt16 nEvent, const void* pEvent ) const
    { return m_pProc ? m_pProc( m_pWindow, const_cast<SalFrame*>(this), nEvent, pEvent ) : 0; }
};



#endif // __cplusplus

#endif // _SV_SALFRAME_HXX

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */