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 10cdf0e10cSrcweir * 11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 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. 19cdf0e10cSrcweir * 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 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 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 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 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 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 108cdf0e10cSrcweir IMPL_LINK( OrientationHelper_Impl, ClickHdl, void*, EMPTYARG ) 109cdf0e10cSrcweir { 110cdf0e10cSrcweir EnableDependentWindows(); 111cdf0e10cSrcweir return 0L; 112cdf0e10cSrcweir } 113cdf0e10cSrcweir 114cdf0e10cSrcweir // ============================================================================ 115cdf0e10cSrcweir 116cdf0e10cSrcweir OrientationHelper::OrientationHelper( DialControl& rCtrlDial, CheckBox& rCbStacked ) : 117cdf0e10cSrcweir mpImpl( new OrientationHelper_Impl( rCtrlDial, rCbStacked ) ) 118cdf0e10cSrcweir { 119cdf0e10cSrcweir mpImpl->EnableDependentWindows(); 120cdf0e10cSrcweir mpImpl->ShowDependentWindows(); 121cdf0e10cSrcweir } 122cdf0e10cSrcweir 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 131cdf0e10cSrcweir OrientationHelper::~OrientationHelper() 132cdf0e10cSrcweir { 133cdf0e10cSrcweir } 134cdf0e10cSrcweir 135cdf0e10cSrcweir void OrientationHelper::AddDependentWindow( Window& rWindow, TriState eDisableIfStacked ) 136cdf0e10cSrcweir { 137cdf0e10cSrcweir mpImpl->AddDependentWindow( rWindow, eDisableIfStacked ); 138cdf0e10cSrcweir } 139cdf0e10cSrcweir 140cdf0e10cSrcweir void OrientationHelper::Enable( bool bEnable ) 141cdf0e10cSrcweir { 142cdf0e10cSrcweir mpImpl->mbEnabled = bEnable; 143cdf0e10cSrcweir mpImpl->EnableDependentWindows(); 144cdf0e10cSrcweir } 145cdf0e10cSrcweir 146cdf0e10cSrcweir void OrientationHelper::Show( bool bShow ) 147cdf0e10cSrcweir { 148cdf0e10cSrcweir mpImpl->mbVisible = bShow; 149cdf0e10cSrcweir mpImpl->ShowDependentWindows(); 150cdf0e10cSrcweir } 151cdf0e10cSrcweir 152cdf0e10cSrcweir void OrientationHelper::SetStackedState( TriState eState ) 153cdf0e10cSrcweir { 154cdf0e10cSrcweir if( eState != GetStackedState() ) 155cdf0e10cSrcweir { 156cdf0e10cSrcweir mpImpl->mrCbStacked.SetState( eState ); 157cdf0e10cSrcweir mpImpl->EnableDependentWindows(); 158cdf0e10cSrcweir } 159cdf0e10cSrcweir } 160cdf0e10cSrcweir 161cdf0e10cSrcweir TriState OrientationHelper::GetStackedState() const 162cdf0e10cSrcweir { 163cdf0e10cSrcweir return mpImpl->mrCbStacked.GetState(); 164cdf0e10cSrcweir } 165cdf0e10cSrcweir 166cdf0e10cSrcweir void OrientationHelper::EnableStackedTriState( bool bEnable ) 167cdf0e10cSrcweir { 168cdf0e10cSrcweir mpImpl->mrCbStacked.EnableTriState( bEnable ); 169cdf0e10cSrcweir } 170cdf0e10cSrcweir 171cdf0e10cSrcweir // ============================================================================ 172cdf0e10cSrcweir 173cdf0e10cSrcweir OrientStackedWrapper::OrientStackedWrapper( OrientationHelper& rOrientHlp ) : 174cdf0e10cSrcweir SingleControlWrapperType( rOrientHlp ) 175cdf0e10cSrcweir { 176cdf0e10cSrcweir } 177cdf0e10cSrcweir 178cdf0e10cSrcweir bool OrientStackedWrapper::IsControlDontKnow() const 179cdf0e10cSrcweir { 180cdf0e10cSrcweir return GetControl().GetStackedState() == STATE_DONTKNOW; 181cdf0e10cSrcweir } 182cdf0e10cSrcweir 183cdf0e10cSrcweir void OrientStackedWrapper::SetControlDontKnow( bool bSet ) 184cdf0e10cSrcweir { 185cdf0e10cSrcweir GetControl().EnableStackedTriState( bSet ); 186cdf0e10cSrcweir GetControl().SetStackedState( bSet ? STATE_DONTKNOW : STATE_NOCHECK ); 187cdf0e10cSrcweir } 188cdf0e10cSrcweir 189cdf0e10cSrcweir bool OrientStackedWrapper::GetControlValue() const 190cdf0e10cSrcweir { 191cdf0e10cSrcweir return GetControl().GetStackedState() == STATE_CHECK; 192cdf0e10cSrcweir } 193cdf0e10cSrcweir 194cdf0e10cSrcweir void OrientStackedWrapper::SetControlValue( bool bValue ) 195cdf0e10cSrcweir { 196cdf0e10cSrcweir GetControl().SetStackedState( bValue ? STATE_CHECK : STATE_NOCHECK ); 197cdf0e10cSrcweir } 198cdf0e10cSrcweir 199cdf0e10cSrcweir // ============================================================================ 200cdf0e10cSrcweir 201cdf0e10cSrcweir } // namespace svx 202cdf0e10cSrcweir 203