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