xref: /aoo41x/main/svx/source/dialog/orienthelper.cxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_svx.hxx"
30*cdf0e10cSrcweir #include "svx/orienthelper.hxx"
31*cdf0e10cSrcweir 
32*cdf0e10cSrcweir #include <vector>
33*cdf0e10cSrcweir #include <utility>
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir #ifndef _SV_BUTTON_HXX
36*cdf0e10cSrcweir #include <vcl/button.hxx>
37*cdf0e10cSrcweir #endif
38*cdf0e10cSrcweir #include "svx/dialcontrol.hxx"
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir namespace svx {
41*cdf0e10cSrcweir 
42*cdf0e10cSrcweir // ============================================================================
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir struct OrientationHelper_Impl
45*cdf0e10cSrcweir {
46*cdf0e10cSrcweir     typedef std::pair< Window*, TriState >  WindowPair;
47*cdf0e10cSrcweir     typedef std::vector< WindowPair >       WindowVec;
48*cdf0e10cSrcweir 
49*cdf0e10cSrcweir     DialControl&        mrCtrlDial;
50*cdf0e10cSrcweir     CheckBox&           mrCbStacked;
51*cdf0e10cSrcweir     WindowVec           maWinVec;
52*cdf0e10cSrcweir     bool                mbEnabled;
53*cdf0e10cSrcweir     bool                mbVisible;
54*cdf0e10cSrcweir 
55*cdf0e10cSrcweir     explicit            OrientationHelper_Impl( DialControl& rCtrlDial, CheckBox& rCbStacked );
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir     void                AddDependentWindow( Window& rWindow, TriState eDisableIfStacked );
58*cdf0e10cSrcweir 
59*cdf0e10cSrcweir     void                EnableDependentWindows();
60*cdf0e10cSrcweir     void                EnableWindow( Window& rWindow, TriState eDisableIfStacked );
61*cdf0e10cSrcweir 
62*cdf0e10cSrcweir     void                ShowDependentWindows();
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir     DECL_LINK( ClickHdl, void* );
65*cdf0e10cSrcweir };
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir // ----------------------------------------------------------------------------
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir OrientationHelper_Impl::OrientationHelper_Impl( DialControl& rCtrlDial, CheckBox& rCbStacked ) :
70*cdf0e10cSrcweir     mrCtrlDial( rCtrlDial ),
71*cdf0e10cSrcweir     mrCbStacked( rCbStacked ),
72*cdf0e10cSrcweir     mbEnabled( rCtrlDial.IsEnabled() ),
73*cdf0e10cSrcweir     mbVisible( rCtrlDial.IsVisible() )
74*cdf0e10cSrcweir {
75*cdf0e10cSrcweir     maWinVec.push_back( WindowPair( &mrCtrlDial, STATE_CHECK ) );
76*cdf0e10cSrcweir     maWinVec.push_back( WindowPair( &mrCbStacked, STATE_DONTKNOW ) );
77*cdf0e10cSrcweir     mrCbStacked.SetClickHdl( LINK( this, OrientationHelper_Impl, ClickHdl ) );
78*cdf0e10cSrcweir }
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir void OrientationHelper_Impl::AddDependentWindow( Window& rWindow, TriState eDisableIfStacked )
81*cdf0e10cSrcweir {
82*cdf0e10cSrcweir     maWinVec.push_back( std::make_pair( &rWindow, eDisableIfStacked ) );
83*cdf0e10cSrcweir     EnableWindow( rWindow, eDisableIfStacked );
84*cdf0e10cSrcweir }
85*cdf0e10cSrcweir 
86*cdf0e10cSrcweir void OrientationHelper_Impl::EnableDependentWindows()
87*cdf0e10cSrcweir {
88*cdf0e10cSrcweir     for( WindowVec::iterator aIt = maWinVec.begin(), aEnd = maWinVec.end(); aIt != aEnd; ++aIt )
89*cdf0e10cSrcweir         EnableWindow( *aIt->first, aIt->second );
90*cdf0e10cSrcweir }
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir void OrientationHelper_Impl::EnableWindow( Window& rWindow, TriState eDisableIfStacked )
93*cdf0e10cSrcweir {
94*cdf0e10cSrcweir     bool bDisableOnStacked = false;
95*cdf0e10cSrcweir     switch( eDisableIfStacked )
96*cdf0e10cSrcweir     {
97*cdf0e10cSrcweir         // STATE_CHECK: Disable window, if stacked text is turned on or "don't know".
98*cdf0e10cSrcweir         case STATE_CHECK:   bDisableOnStacked = (mrCbStacked.GetState() != STATE_NOCHECK);  break;
99*cdf0e10cSrcweir         // STATE_NOCHECK: Disable window, if stacked text is turned off or "don't know".
100*cdf0e10cSrcweir         case STATE_NOCHECK: bDisableOnStacked = (mrCbStacked.GetState() != STATE_CHECK);    break;
101*cdf0e10cSrcweir         default: ;//prevent warning
102*cdf0e10cSrcweir     }
103*cdf0e10cSrcweir     rWindow.Enable( mbEnabled && !bDisableOnStacked );
104*cdf0e10cSrcweir }
105*cdf0e10cSrcweir 
106*cdf0e10cSrcweir void OrientationHelper_Impl::ShowDependentWindows()
107*cdf0e10cSrcweir {
108*cdf0e10cSrcweir     for( WindowVec::iterator aIt = maWinVec.begin(), aEnd = maWinVec.end(); aIt != aEnd; ++aIt )
109*cdf0e10cSrcweir         aIt->first->Show( mbVisible );
110*cdf0e10cSrcweir }
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir IMPL_LINK( OrientationHelper_Impl, ClickHdl, void*, EMPTYARG )
113*cdf0e10cSrcweir {
114*cdf0e10cSrcweir     EnableDependentWindows();
115*cdf0e10cSrcweir 	return 0L;
116*cdf0e10cSrcweir }
117*cdf0e10cSrcweir 
118*cdf0e10cSrcweir // ============================================================================
119*cdf0e10cSrcweir 
120*cdf0e10cSrcweir OrientationHelper::OrientationHelper( DialControl& rCtrlDial, CheckBox& rCbStacked ) :
121*cdf0e10cSrcweir     mpImpl( new OrientationHelper_Impl( rCtrlDial, rCbStacked ) )
122*cdf0e10cSrcweir {
123*cdf0e10cSrcweir     mpImpl->EnableDependentWindows();
124*cdf0e10cSrcweir     mpImpl->ShowDependentWindows();
125*cdf0e10cSrcweir }
126*cdf0e10cSrcweir 
127*cdf0e10cSrcweir OrientationHelper::OrientationHelper( DialControl& rCtrlDial, NumericField& rNfRotation, CheckBox& rCbStacked ) :
128*cdf0e10cSrcweir     mpImpl( new OrientationHelper_Impl( rCtrlDial, rCbStacked ) )
129*cdf0e10cSrcweir {
130*cdf0e10cSrcweir     rCtrlDial.SetLinkedField( &rNfRotation );
131*cdf0e10cSrcweir     mpImpl->EnableDependentWindows();
132*cdf0e10cSrcweir     mpImpl->ShowDependentWindows();
133*cdf0e10cSrcweir }
134*cdf0e10cSrcweir 
135*cdf0e10cSrcweir OrientationHelper::~OrientationHelper()
136*cdf0e10cSrcweir {
137*cdf0e10cSrcweir }
138*cdf0e10cSrcweir 
139*cdf0e10cSrcweir void OrientationHelper::AddDependentWindow( Window& rWindow, TriState eDisableIfStacked )
140*cdf0e10cSrcweir {
141*cdf0e10cSrcweir     mpImpl->AddDependentWindow( rWindow, eDisableIfStacked );
142*cdf0e10cSrcweir }
143*cdf0e10cSrcweir 
144*cdf0e10cSrcweir void OrientationHelper::Enable( bool bEnable )
145*cdf0e10cSrcweir {
146*cdf0e10cSrcweir     mpImpl->mbEnabled = bEnable;
147*cdf0e10cSrcweir     mpImpl->EnableDependentWindows();
148*cdf0e10cSrcweir }
149*cdf0e10cSrcweir 
150*cdf0e10cSrcweir void OrientationHelper::Show( bool bShow )
151*cdf0e10cSrcweir {
152*cdf0e10cSrcweir     mpImpl->mbVisible = bShow;
153*cdf0e10cSrcweir     mpImpl->ShowDependentWindows();
154*cdf0e10cSrcweir }
155*cdf0e10cSrcweir 
156*cdf0e10cSrcweir void OrientationHelper::SetStackedState( TriState eState )
157*cdf0e10cSrcweir {
158*cdf0e10cSrcweir     if( eState != GetStackedState() )
159*cdf0e10cSrcweir     {
160*cdf0e10cSrcweir         mpImpl->mrCbStacked.SetState( eState );
161*cdf0e10cSrcweir         mpImpl->EnableDependentWindows();
162*cdf0e10cSrcweir     }
163*cdf0e10cSrcweir }
164*cdf0e10cSrcweir 
165*cdf0e10cSrcweir TriState OrientationHelper::GetStackedState() const
166*cdf0e10cSrcweir {
167*cdf0e10cSrcweir     return mpImpl->mrCbStacked.GetState();
168*cdf0e10cSrcweir }
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir void OrientationHelper::EnableStackedTriState( bool bEnable )
171*cdf0e10cSrcweir {
172*cdf0e10cSrcweir     mpImpl->mrCbStacked.EnableTriState( bEnable );
173*cdf0e10cSrcweir }
174*cdf0e10cSrcweir 
175*cdf0e10cSrcweir // ============================================================================
176*cdf0e10cSrcweir 
177*cdf0e10cSrcweir OrientStackedWrapper::OrientStackedWrapper( OrientationHelper& rOrientHlp ) :
178*cdf0e10cSrcweir     SingleControlWrapperType( rOrientHlp )
179*cdf0e10cSrcweir {
180*cdf0e10cSrcweir }
181*cdf0e10cSrcweir 
182*cdf0e10cSrcweir bool OrientStackedWrapper::IsControlDontKnow() const
183*cdf0e10cSrcweir {
184*cdf0e10cSrcweir     return GetControl().GetStackedState() == STATE_DONTKNOW;
185*cdf0e10cSrcweir }
186*cdf0e10cSrcweir 
187*cdf0e10cSrcweir void OrientStackedWrapper::SetControlDontKnow( bool bSet )
188*cdf0e10cSrcweir {
189*cdf0e10cSrcweir     GetControl().EnableStackedTriState( bSet );
190*cdf0e10cSrcweir     GetControl().SetStackedState( bSet ? STATE_DONTKNOW : STATE_NOCHECK );
191*cdf0e10cSrcweir }
192*cdf0e10cSrcweir 
193*cdf0e10cSrcweir bool OrientStackedWrapper::GetControlValue() const
194*cdf0e10cSrcweir {
195*cdf0e10cSrcweir     return GetControl().GetStackedState() == STATE_CHECK;
196*cdf0e10cSrcweir }
197*cdf0e10cSrcweir 
198*cdf0e10cSrcweir void OrientStackedWrapper::SetControlValue( bool bValue )
199*cdf0e10cSrcweir {
200*cdf0e10cSrcweir     GetControl().SetStackedState( bValue ? STATE_CHECK : STATE_NOCHECK );
201*cdf0e10cSrcweir }
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir // ============================================================================
204*cdf0e10cSrcweir 
205*cdf0e10cSrcweir } // namespace svx
206*cdf0e10cSrcweir 
207