xref: /aoo41x/main/svx/source/dialog/orienthelper.cxx (revision f6e50924)
1*f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*f6e50924SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*f6e50924SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*f6e50924SAndrew Rist  * distributed with this work for additional information
6*f6e50924SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*f6e50924SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*f6e50924SAndrew Rist  * "License"); you may not use this file except in compliance
9*f6e50924SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*f6e50924SAndrew Rist  *
11*f6e50924SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*f6e50924SAndrew Rist  *
13*f6e50924SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*f6e50924SAndrew Rist  * software distributed under the License is distributed on an
15*f6e50924SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f6e50924SAndrew Rist  * KIND, either express or implied.  See the License for the
17*f6e50924SAndrew Rist  * specific language governing permissions and limitations
18*f6e50924SAndrew Rist  * under the License.
19*f6e50924SAndrew Rist  *
20*f6e50924SAndrew Rist  *************************************************************/
21*f6e50924SAndrew Rist 
22*f6e50924SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svx.hxx"
26cdf0e10cSrcweir #include "svx/orienthelper.hxx"
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <vector>
29cdf0e10cSrcweir #include <utility>
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #ifndef _SV_BUTTON_HXX
32cdf0e10cSrcweir #include <vcl/button.hxx>
33cdf0e10cSrcweir #endif
34cdf0e10cSrcweir #include "svx/dialcontrol.hxx"
35cdf0e10cSrcweir 
36cdf0e10cSrcweir namespace svx {
37cdf0e10cSrcweir 
38cdf0e10cSrcweir // ============================================================================
39cdf0e10cSrcweir 
40cdf0e10cSrcweir struct OrientationHelper_Impl
41cdf0e10cSrcweir {
42cdf0e10cSrcweir     typedef std::pair< Window*, TriState >  WindowPair;
43cdf0e10cSrcweir     typedef std::vector< WindowPair >       WindowVec;
44cdf0e10cSrcweir 
45cdf0e10cSrcweir     DialControl&        mrCtrlDial;
46cdf0e10cSrcweir     CheckBox&           mrCbStacked;
47cdf0e10cSrcweir     WindowVec           maWinVec;
48cdf0e10cSrcweir     bool                mbEnabled;
49cdf0e10cSrcweir     bool                mbVisible;
50cdf0e10cSrcweir 
51cdf0e10cSrcweir     explicit            OrientationHelper_Impl( DialControl& rCtrlDial, CheckBox& rCbStacked );
52cdf0e10cSrcweir 
53cdf0e10cSrcweir     void                AddDependentWindow( Window& rWindow, TriState eDisableIfStacked );
54cdf0e10cSrcweir 
55cdf0e10cSrcweir     void                EnableDependentWindows();
56cdf0e10cSrcweir     void                EnableWindow( Window& rWindow, TriState eDisableIfStacked );
57cdf0e10cSrcweir 
58cdf0e10cSrcweir     void                ShowDependentWindows();
59cdf0e10cSrcweir 
60cdf0e10cSrcweir     DECL_LINK( ClickHdl, void* );
61cdf0e10cSrcweir };
62cdf0e10cSrcweir 
63cdf0e10cSrcweir // ----------------------------------------------------------------------------
64cdf0e10cSrcweir 
OrientationHelper_Impl(DialControl & rCtrlDial,CheckBox & rCbStacked)65cdf0e10cSrcweir OrientationHelper_Impl::OrientationHelper_Impl( DialControl& rCtrlDial, CheckBox& rCbStacked ) :
66cdf0e10cSrcweir     mrCtrlDial( rCtrlDial ),
67cdf0e10cSrcweir     mrCbStacked( rCbStacked ),
68cdf0e10cSrcweir     mbEnabled( rCtrlDial.IsEnabled() ),
69cdf0e10cSrcweir     mbVisible( rCtrlDial.IsVisible() )
70cdf0e10cSrcweir {
71cdf0e10cSrcweir     maWinVec.push_back( WindowPair( &mrCtrlDial, STATE_CHECK ) );
72cdf0e10cSrcweir     maWinVec.push_back( WindowPair( &mrCbStacked, STATE_DONTKNOW ) );
73cdf0e10cSrcweir     mrCbStacked.SetClickHdl( LINK( this, OrientationHelper_Impl, ClickHdl ) );
74cdf0e10cSrcweir }
75cdf0e10cSrcweir 
AddDependentWindow(Window & rWindow,TriState eDisableIfStacked)76cdf0e10cSrcweir void OrientationHelper_Impl::AddDependentWindow( Window& rWindow, TriState eDisableIfStacked )
77cdf0e10cSrcweir {
78cdf0e10cSrcweir     maWinVec.push_back( std::make_pair( &rWindow, eDisableIfStacked ) );
79cdf0e10cSrcweir     EnableWindow( rWindow, eDisableIfStacked );
80cdf0e10cSrcweir }
81cdf0e10cSrcweir 
EnableDependentWindows()82cdf0e10cSrcweir void OrientationHelper_Impl::EnableDependentWindows()
83cdf0e10cSrcweir {
84cdf0e10cSrcweir     for( WindowVec::iterator aIt = maWinVec.begin(), aEnd = maWinVec.end(); aIt != aEnd; ++aIt )
85cdf0e10cSrcweir         EnableWindow( *aIt->first, aIt->second );
86cdf0e10cSrcweir }
87cdf0e10cSrcweir 
EnableWindow(Window & rWindow,TriState eDisableIfStacked)88cdf0e10cSrcweir void OrientationHelper_Impl::EnableWindow( Window& rWindow, TriState eDisableIfStacked )
89cdf0e10cSrcweir {
90cdf0e10cSrcweir     bool bDisableOnStacked = false;
91cdf0e10cSrcweir     switch( eDisableIfStacked )
92cdf0e10cSrcweir     {
93cdf0e10cSrcweir         // STATE_CHECK: Disable window, if stacked text is turned on or "don't know".
94cdf0e10cSrcweir         case STATE_CHECK:   bDisableOnStacked = (mrCbStacked.GetState() != STATE_NOCHECK);  break;
95cdf0e10cSrcweir         // STATE_NOCHECK: Disable window, if stacked text is turned off or "don't know".
96cdf0e10cSrcweir         case STATE_NOCHECK: bDisableOnStacked = (mrCbStacked.GetState() != STATE_CHECK);    break;
97cdf0e10cSrcweir         default: ;//prevent warning
98cdf0e10cSrcweir     }
99cdf0e10cSrcweir     rWindow.Enable( mbEnabled && !bDisableOnStacked );
100cdf0e10cSrcweir }
101cdf0e10cSrcweir 
ShowDependentWindows()102cdf0e10cSrcweir void OrientationHelper_Impl::ShowDependentWindows()
103cdf0e10cSrcweir {
104cdf0e10cSrcweir     for( WindowVec::iterator aIt = maWinVec.begin(), aEnd = maWinVec.end(); aIt != aEnd; ++aIt )
105cdf0e10cSrcweir         aIt->first->Show( mbVisible );
106cdf0e10cSrcweir }
107cdf0e10cSrcweir 
IMPL_LINK(OrientationHelper_Impl,ClickHdl,void *,EMPTYARG)108cdf0e10cSrcweir IMPL_LINK( OrientationHelper_Impl, ClickHdl, void*, EMPTYARG )
109cdf0e10cSrcweir {
110cdf0e10cSrcweir     EnableDependentWindows();
111cdf0e10cSrcweir 	return 0L;
112cdf0e10cSrcweir }
113cdf0e10cSrcweir 
114cdf0e10cSrcweir // ============================================================================
115cdf0e10cSrcweir 
OrientationHelper(DialControl & rCtrlDial,CheckBox & rCbStacked)116cdf0e10cSrcweir OrientationHelper::OrientationHelper( DialControl& rCtrlDial, CheckBox& rCbStacked ) :
117cdf0e10cSrcweir     mpImpl( new OrientationHelper_Impl( rCtrlDial, rCbStacked ) )
118cdf0e10cSrcweir {
119cdf0e10cSrcweir     mpImpl->EnableDependentWindows();
120cdf0e10cSrcweir     mpImpl->ShowDependentWindows();
121cdf0e10cSrcweir }
122cdf0e10cSrcweir 
OrientationHelper(DialControl & rCtrlDial,NumericField & rNfRotation,CheckBox & rCbStacked)123cdf0e10cSrcweir OrientationHelper::OrientationHelper( DialControl& rCtrlDial, NumericField& rNfRotation, CheckBox& rCbStacked ) :
124cdf0e10cSrcweir     mpImpl( new OrientationHelper_Impl( rCtrlDial, rCbStacked ) )
125cdf0e10cSrcweir {
126cdf0e10cSrcweir     rCtrlDial.SetLinkedField( &rNfRotation );
127cdf0e10cSrcweir     mpImpl->EnableDependentWindows();
128cdf0e10cSrcweir     mpImpl->ShowDependentWindows();
129cdf0e10cSrcweir }
130cdf0e10cSrcweir 
~OrientationHelper()131cdf0e10cSrcweir OrientationHelper::~OrientationHelper()
132cdf0e10cSrcweir {
133cdf0e10cSrcweir }
134cdf0e10cSrcweir 
AddDependentWindow(Window & rWindow,TriState eDisableIfStacked)135cdf0e10cSrcweir void OrientationHelper::AddDependentWindow( Window& rWindow, TriState eDisableIfStacked )
136cdf0e10cSrcweir {
137cdf0e10cSrcweir     mpImpl->AddDependentWindow( rWindow, eDisableIfStacked );
138cdf0e10cSrcweir }
139cdf0e10cSrcweir 
Enable(bool bEnable)140cdf0e10cSrcweir void OrientationHelper::Enable( bool bEnable )
141cdf0e10cSrcweir {
142cdf0e10cSrcweir     mpImpl->mbEnabled = bEnable;
143cdf0e10cSrcweir     mpImpl->EnableDependentWindows();
144cdf0e10cSrcweir }
145cdf0e10cSrcweir 
Show(bool bShow)146cdf0e10cSrcweir void OrientationHelper::Show( bool bShow )
147cdf0e10cSrcweir {
148cdf0e10cSrcweir     mpImpl->mbVisible = bShow;
149cdf0e10cSrcweir     mpImpl->ShowDependentWindows();
150cdf0e10cSrcweir }
151cdf0e10cSrcweir 
SetStackedState(TriState eState)152cdf0e10cSrcweir void OrientationHelper::SetStackedState( TriState eState )
153cdf0e10cSrcweir {
154cdf0e10cSrcweir     if( eState != GetStackedState() )
155cdf0e10cSrcweir     {
156cdf0e10cSrcweir         mpImpl->mrCbStacked.SetState( eState );
157cdf0e10cSrcweir         mpImpl->EnableDependentWindows();
158cdf0e10cSrcweir     }
159cdf0e10cSrcweir }
160cdf0e10cSrcweir 
GetStackedState() const161cdf0e10cSrcweir TriState OrientationHelper::GetStackedState() const
162cdf0e10cSrcweir {
163cdf0e10cSrcweir     return mpImpl->mrCbStacked.GetState();
164cdf0e10cSrcweir }
165cdf0e10cSrcweir 
EnableStackedTriState(bool bEnable)166cdf0e10cSrcweir void OrientationHelper::EnableStackedTriState( bool bEnable )
167cdf0e10cSrcweir {
168cdf0e10cSrcweir     mpImpl->mrCbStacked.EnableTriState( bEnable );
169cdf0e10cSrcweir }
170cdf0e10cSrcweir 
171cdf0e10cSrcweir // ============================================================================
172cdf0e10cSrcweir 
OrientStackedWrapper(OrientationHelper & rOrientHlp)173cdf0e10cSrcweir OrientStackedWrapper::OrientStackedWrapper( OrientationHelper& rOrientHlp ) :
174cdf0e10cSrcweir     SingleControlWrapperType( rOrientHlp )
175cdf0e10cSrcweir {
176cdf0e10cSrcweir }
177cdf0e10cSrcweir 
IsControlDontKnow() const178cdf0e10cSrcweir bool OrientStackedWrapper::IsControlDontKnow() const
179cdf0e10cSrcweir {
180cdf0e10cSrcweir     return GetControl().GetStackedState() == STATE_DONTKNOW;
181cdf0e10cSrcweir }
182cdf0e10cSrcweir 
SetControlDontKnow(bool bSet)183cdf0e10cSrcweir void OrientStackedWrapper::SetControlDontKnow( bool bSet )
184cdf0e10cSrcweir {
185cdf0e10cSrcweir     GetControl().EnableStackedTriState( bSet );
186cdf0e10cSrcweir     GetControl().SetStackedState( bSet ? STATE_DONTKNOW : STATE_NOCHECK );
187cdf0e10cSrcweir }
188cdf0e10cSrcweir 
GetControlValue() const189cdf0e10cSrcweir bool OrientStackedWrapper::GetControlValue() const
190cdf0e10cSrcweir {
191cdf0e10cSrcweir     return GetControl().GetStackedState() == STATE_CHECK;
192cdf0e10cSrcweir }
193cdf0e10cSrcweir 
SetControlValue(bool bValue)194cdf0e10cSrcweir void OrientStackedWrapper::SetControlValue( bool bValue )
195cdf0e10cSrcweir {
196cdf0e10cSrcweir     GetControl().SetStackedState( bValue ? STATE_CHECK : STATE_NOCHECK );
197cdf0e10cSrcweir }
198cdf0e10cSrcweir 
199cdf0e10cSrcweir // ============================================================================
200cdf0e10cSrcweir 
201cdf0e10cSrcweir } // namespace svx
202cdf0e10cSrcweir 
203