1*50e6b072SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*50e6b072SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*50e6b072SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*50e6b072SAndrew Rist * distributed with this work for additional information
6*50e6b072SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*50e6b072SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*50e6b072SAndrew Rist * "License"); you may not use this file except in compliance
9*50e6b072SAndrew Rist * with the License. You may obtain a copy of the License at
10*50e6b072SAndrew Rist *
11*50e6b072SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*50e6b072SAndrew Rist *
13*50e6b072SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*50e6b072SAndrew Rist * software distributed under the License is distributed on an
15*50e6b072SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*50e6b072SAndrew Rist * KIND, either express or implied. See the License for the
17*50e6b072SAndrew Rist * specific language governing permissions and limitations
18*50e6b072SAndrew Rist * under the License.
19*50e6b072SAndrew Rist *
20*50e6b072SAndrew Rist *************************************************************/
21*50e6b072SAndrew Rist
22*50e6b072SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #ifndef LAYOUT_VCL_WRAPPER_HXX
25cdf0e10cSrcweir #define LAYOUT_VCL_WRAPPER_HXX
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <layout/layout.hxx>
28cdf0e10cSrcweir #include <com/sun/star/uno/Reference.hxx>
29cdf0e10cSrcweir #include <com/sun/star/awt/XDialog2.hpp>
30cdf0e10cSrcweir #include <com/sun/star/awt/XFocusListener.hpp>
31cdf0e10cSrcweir #include <com/sun/star/awt/XWindow.hpp>
32cdf0e10cSrcweir #include <com/sun/star/awt/XVclWindowPeer.hpp>
33cdf0e10cSrcweir #include <cppuhelper/implbase1.hxx>
34cdf0e10cSrcweir
35cdf0e10cSrcweir #include <cstring>
36cdf0e10cSrcweir
37cdf0e10cSrcweir namespace layout
38cdf0e10cSrcweir {
39cdf0e10cSrcweir
40cdf0e10cSrcweir namespace css = com::sun::star;
41cdf0e10cSrcweir
42cdf0e10cSrcweir class WindowImpl
43cdf0e10cSrcweir {
44cdf0e10cSrcweir public:
45cdf0e10cSrcweir Window *mpWindow;
46cdf0e10cSrcweir Context *mpCtx;
47cdf0e10cSrcweir css::uno::Reference< css::awt::XWindow > mxWindow;
48cdf0e10cSrcweir css::uno::Reference< css::awt::XVclWindowPeer > mxVclPeer;
49cdf0e10cSrcweir ::Window *mvclWindow;
50cdf0e10cSrcweir bool bFirstTimeVisible;
51cdf0e10cSrcweir
52cdf0e10cSrcweir WindowImpl (Context *context, PeerHandle const &peer, Window *window);
53cdf0e10cSrcweir virtual ~WindowImpl ();
54cdf0e10cSrcweir
55cdf0e10cSrcweir void wrapperGone();
56cdf0e10cSrcweir css::uno::Any getProperty (char const *name);
57cdf0e10cSrcweir void setProperty (char const *name, css::uno::Any any);
58cdf0e10cSrcweir void redraw (bool resize=false);
59cdf0e10cSrcweir
60cdf0e10cSrcweir // XFocusListener
61cdf0e10cSrcweir virtual void SAL_CALL disposing (css::lang::EventObject const&) throw (css::uno::RuntimeException);
62cdf0e10cSrcweir };
63cdf0e10cSrcweir
64cdf0e10cSrcweir class ControlImpl : public WindowImpl
65cdf0e10cSrcweir , public ::cppu::WeakImplHelper1 <css::awt::XFocusListener>
66cdf0e10cSrcweir {
67cdf0e10cSrcweir public:
68cdf0e10cSrcweir Link mGetFocusHdl;
69cdf0e10cSrcweir Link mLoseFocusHdl;
70cdf0e10cSrcweir
71cdf0e10cSrcweir ControlImpl( Context *context, PeerHandle const& peer, Window *window );
72cdf0e10cSrcweir ~ControlImpl ();
73cdf0e10cSrcweir
74cdf0e10cSrcweir virtual void SetGetFocusHdl (Link const& link);
75cdf0e10cSrcweir Link& GetGetFocusHdl ();
76cdf0e10cSrcweir virtual void SetLoseFocusHdl (Link const& link);
77cdf0e10cSrcweir Link& GetLoseFocusHdl ();
78cdf0e10cSrcweir virtual void UpdateListening (Link const& link);
79cdf0e10cSrcweir
80cdf0e10cSrcweir // XFocusListener
81cdf0e10cSrcweir virtual void SAL_CALL disposing (css::lang::EventObject const&) throw (css::uno::RuntimeException);
82cdf0e10cSrcweir void SAL_CALL focusGained (css::awt::FocusEvent const& e) throw (css::uno::RuntimeException);
83cdf0e10cSrcweir void SAL_CALL focusLost (css::awt::FocusEvent const& e) throw (css::uno::RuntimeException);
84cdf0e10cSrcweir };
85cdf0e10cSrcweir
getImpl() const86cdf0e10cSrcweir inline WindowImpl &Window::getImpl() const{ return *(static_cast< WindowImpl * >( mpImpl )); }
87cdf0e10cSrcweir
88cdf0e10cSrcweir // Helpers for defining boiler-plate constructors ...
89cdf0e10cSrcweir // Could in-line in top-level but not with safe static_casts.
90cdf0e10cSrcweir #define IMPL_GET_IMPL(t) \
91cdf0e10cSrcweir inline t##Impl &t::getImpl() const \
92cdf0e10cSrcweir { \
93cdf0e10cSrcweir return *(static_cast<t##Impl *>(mpImpl)); \
94cdf0e10cSrcweir }
95cdf0e10cSrcweir #define IMPL_CONSTRUCTORS_BODY(t,par,unoName,body) \
96cdf0e10cSrcweir t::t( Context *context, const char *pId, sal_uInt32 nId ) \
97cdf0e10cSrcweir : par( new t##Impl( context, context->GetPeerHandle( pId, nId ), this ) ) \
98cdf0e10cSrcweir { \
99cdf0e10cSrcweir Window *parent = dynamic_cast<Window*> (context);\
100cdf0e10cSrcweir body;\
101cdf0e10cSrcweir if (parent)\
102cdf0e10cSrcweir SetParent (parent);\
103cdf0e10cSrcweir } \
104cdf0e10cSrcweir t::t( Window *parent, WinBits bits) \
105cdf0e10cSrcweir : par( new t##Impl( parent->getContext(), Window::CreatePeer( parent, bits, unoName ), this ) ) \
106cdf0e10cSrcweir { \
107cdf0e10cSrcweir body;\
108cdf0e10cSrcweir if ( parent )\
109cdf0e10cSrcweir SetParent (parent);\
110cdf0e10cSrcweir } \
111cdf0e10cSrcweir t::t( Window *parent, ResId const& res) \
112cdf0e10cSrcweir : par( new t##Impl( parent->getContext(), Window::CreatePeer( parent, 0, unoName ), this ) ) \
113cdf0e10cSrcweir { \
114cdf0e10cSrcweir body;\
115cdf0e10cSrcweir setRes (res);\
116cdf0e10cSrcweir if (parent)\
117cdf0e10cSrcweir SetParent (parent);\
118cdf0e10cSrcweir }
119cdf0e10cSrcweir #define IMPL_CONSTRUCTORS(t,par,unoName) IMPL_CONSTRUCTORS_BODY(t, par, unoName, )
120cdf0e10cSrcweir #define IMPL_CONSTRUCTORS_2(t,win_par,other_par,unoName) \
121cdf0e10cSrcweir t::t( Context *context, const char *pId, sal_uInt32 nId ) \
122cdf0e10cSrcweir : win_par( new t##Impl( context, context->GetPeerHandle( pId, nId ), this ) ) \
123cdf0e10cSrcweir , other_par( new other_par##Impl( Window::GetPeer() ) ) \
124cdf0e10cSrcweir { \
125cdf0e10cSrcweir } \
126cdf0e10cSrcweir t::t( Window *parent, WinBits bits) \
127cdf0e10cSrcweir : win_par( new t##Impl( parent->getContext(), Window::CreatePeer( parent, bits, unoName ), this ) ) \
128cdf0e10cSrcweir , other_par( new other_par##Impl( Window::GetPeer() ) ) \
129cdf0e10cSrcweir { \
130cdf0e10cSrcweir }
131cdf0e10cSrcweir
132cdf0e10cSrcweir #define IMPL_IMPL(t, parent) \
133cdf0e10cSrcweir class t##Impl : public parent##Impl \
134cdf0e10cSrcweir { \
135cdf0e10cSrcweir public: \
136cdf0e10cSrcweir t##Impl( Context *context, PeerHandle const& peer, Window *window ) \
137cdf0e10cSrcweir : parent##Impl( context, peer, window ) \
138cdf0e10cSrcweir { \
139cdf0e10cSrcweir } \
140cdf0e10cSrcweir };
141cdf0e10cSrcweir
142cdf0e10cSrcweir
143cdf0e10cSrcweir } // namespace layout
144cdf0e10cSrcweir
145cdf0e10cSrcweir #endif /* LAYOUT_VCL_WRAPPER_HXX */
146