1*2d785d7eSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*2d785d7eSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*2d785d7eSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*2d785d7eSAndrew Rist  * distributed with this work for additional information
6*2d785d7eSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*2d785d7eSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*2d785d7eSAndrew Rist  * "License"); you may not use this file except in compliance
9*2d785d7eSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*2d785d7eSAndrew Rist  *
11*2d785d7eSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*2d785d7eSAndrew Rist  *
13*2d785d7eSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*2d785d7eSAndrew Rist  * software distributed under the License is distributed on an
15*2d785d7eSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2d785d7eSAndrew Rist  * KIND, either express or implied.  See the License for the
17*2d785d7eSAndrew Rist  * specific language governing permissions and limitations
18*2d785d7eSAndrew Rist  * under the License.
19*2d785d7eSAndrew Rist  *
20*2d785d7eSAndrew Rist  *************************************************************/
21*2d785d7eSAndrew Rist 
22*2d785d7eSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef FORMS_WINDOWSTATEGUARD_HXX
25cdf0e10cSrcweir #define FORMS_WINDOWSTATEGUARD_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir /** === begin UNO includes === **/
28cdf0e10cSrcweir #include <com/sun/star/awt/XWindow2.hpp>
29cdf0e10cSrcweir #include <com/sun/star/awt/XControlModel.hpp>
30cdf0e10cSrcweir /** === end UNO includes === **/
31cdf0e10cSrcweir #include <rtl/ref.hxx>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir //........................................................................
34cdf0e10cSrcweir namespace frm
35cdf0e10cSrcweir {
36cdf0e10cSrcweir //........................................................................
37cdf0e10cSrcweir 
38cdf0e10cSrcweir 	//====================================================================
39cdf0e10cSrcweir 	//= WindowStateGuard
40cdf0e10cSrcweir 	//====================================================================
41cdf0e10cSrcweir     class WindowStateGuard_Impl;
42cdf0e10cSrcweir 
43cdf0e10cSrcweir     /** a helper class which monitors certain states of an XWindow2, and ensures
44cdf0e10cSrcweir         that they're consistent with respective properties at an XModel.
45cdf0e10cSrcweir 
46cdf0e10cSrcweir         For form controls, window states - such as "Enabled" - can be set by various
47cdf0e10cSrcweir         means. You can set the respective control model property, you can directly manipulate
48cdf0e10cSrcweir         the XWindow2, or the state can change implicitly due to VCL actions. In any case,
49cdf0e10cSrcweir         we need to ensure that the state does not contradict the model property "too much".
50cdf0e10cSrcweir 
51cdf0e10cSrcweir         As an example, consider a form control which, according to its model's property, is disabled.
52cdf0e10cSrcweir         Now when the parent VCL window of the control's VCL window is enabled, then the the control's
53cdf0e10cSrcweir         window is enabled, too - which contradicts the model property.
54cdf0e10cSrcweir 
55cdf0e10cSrcweir         A WindowStateGuard helps you preventing such inconsistent states.
56cdf0e10cSrcweir 
57cdf0e10cSrcweir         The class is not threadsafe.
58cdf0e10cSrcweir     */
59cdf0e10cSrcweir 	class WindowStateGuard
60cdf0e10cSrcweir 	{
61cdf0e10cSrcweir     private:
62cdf0e10cSrcweir         ::rtl::Reference< WindowStateGuard_Impl >   m_pImpl;
63cdf0e10cSrcweir 
64cdf0e10cSrcweir     public:
65cdf0e10cSrcweir         WindowStateGuard();
66cdf0e10cSrcweir         ~WindowStateGuard();
67cdf0e10cSrcweir 
68cdf0e10cSrcweir         void    attach(
69cdf0e10cSrcweir             const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow2 >& _rxWindow,
70cdf0e10cSrcweir             const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel
71cdf0e10cSrcweir         );
72cdf0e10cSrcweir 	};
73cdf0e10cSrcweir 
74cdf0e10cSrcweir //........................................................................
75cdf0e10cSrcweir } // namespace frm
76cdf0e10cSrcweir //........................................................................
77cdf0e10cSrcweir 
78cdf0e10cSrcweir #endif // FORMS_WINDOWSTATEGUARD_HXX
79cdf0e10cSrcweir 
80