1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sw.hxx" 26 27 // include --------------------------------------------------------------- 28 #include <viewlayoutctrl.hxx> 29 30 #ifndef _STATUS_HXX //autogen 31 #include <vcl/status.hxx> 32 #endif 33 #include <vcl/image.hxx> 34 #include <svl/eitem.hxx> 35 #include <svx/viewlayoutitem.hxx> 36 #ifndef _UTLUI_HRC 37 #include <utlui.hrc> 38 #endif 39 #include <swtypes.hxx> // fuer Pathfinder 40 41 // STATIC DATA ----------------------------------------------------------- 42 43 SFX_IMPL_STATUSBAR_CONTROL( SwViewLayoutControl, SvxViewLayoutItem ); 44 45 // ----------------------------------------------------------------------- 46 47 const long nImageWidthSingle = 15; 48 const long nImageWidthAuto = 25; 49 const long nImageWidthBook = 23; 50 const long nImageWidthSum = 63; 51 const long nImageHeight = 11; 52 53 // ----------------------------------------------------------------------- 54 55 struct SwViewLayoutControl::SwViewLayoutControl_Impl 56 { 57 sal_uInt16 mnState; // 0 = single, 1 = auto, 2 = book, 3 = none 58 Image maImageSingleColumn; 59 Image maImageSingleColumn_Active; 60 Image maImageAutomatic; 61 Image maImageAutomatic_Active; 62 Image maImageBookMode; 63 Image maImageBookMode_Active; 64 }; 65 66 // class SwViewLayoutControl ------------------------------------------ 67 68 SwViewLayoutControl::SwViewLayoutControl( sal_uInt16 _nSlotId, sal_uInt16 _nId, StatusBar& rStb ) : 69 SfxStatusBarControl( _nSlotId, _nId, rStb ), 70 mpImpl( new SwViewLayoutControl_Impl ) 71 { 72 mpImpl->mnState = 0; 73 74 const sal_Bool bHC = GetStatusBar().GetSettings().GetStyleSettings().GetHighContrastMode(); 75 mpImpl->maImageSingleColumn = Image( bHC ? SW_RES(IMG_VIEWLAYOUT_SINGLECOLUMN_HC) : SW_RES(IMG_VIEWLAYOUT_SINGLECOLUMN) ); 76 mpImpl->maImageSingleColumn_Active = Image( bHC ? SW_RES(IMG_VIEWLAYOUT_SINGLECOLUMN_ACTIVE_HC) : SW_RES(IMG_VIEWLAYOUT_SINGLECOLUMN_ACTIVE) ); 77 mpImpl->maImageAutomatic = Image( bHC ? SW_RES(IMG_VIEWLAYOUT_AUTOMATIC_HC) : SW_RES(IMG_VIEWLAYOUT_AUTOMATIC) ); 78 mpImpl->maImageAutomatic_Active = Image( bHC ? SW_RES(IMG_VIEWLAYOUT_AUTOMATIC_ACTIVE_HC) : SW_RES(IMG_VIEWLAYOUT_AUTOMATIC_ACTIVE) ); 79 mpImpl->maImageBookMode = Image( bHC ? SW_RES(IMG_VIEWLAYOUT_BOOKMODE_HC) : SW_RES(IMG_VIEWLAYOUT_BOOKMODE) ); 80 mpImpl->maImageBookMode_Active = Image( bHC ? SW_RES(IMG_VIEWLAYOUT_BOOKMODE_ACTIVE_HC) : SW_RES(IMG_VIEWLAYOUT_BOOKMODE_ACTIVE) ); 81 } 82 83 // ----------------------------------------------------------------------- 84 85 SwViewLayoutControl::~SwViewLayoutControl() 86 { 87 delete mpImpl; 88 } 89 90 // ----------------------------------------------------------------------- 91 92 void SwViewLayoutControl::StateChanged( sal_uInt16 /*nSID*/, SfxItemState eState, const SfxPoolItem* pState ) 93 { 94 if ( SFX_ITEM_AVAILABLE != eState || pState->ISA( SfxVoidItem ) ) 95 GetStatusBar().SetItemText( GetId(), String() ); 96 else 97 { 98 DBG_ASSERT( pState->ISA( SvxViewLayoutItem ), "invalid item type" ); 99 const sal_uInt16 nColumns = static_cast<const SvxViewLayoutItem*>( pState )->GetValue(); 100 const bool bBookMode = static_cast<const SvxViewLayoutItem*>( pState )->IsBookMode(); 101 102 // SingleColumn Mode 103 if ( 1 == nColumns ) 104 mpImpl->mnState = 0; 105 // Automatic Mode 106 else if ( 0 == nColumns ) 107 mpImpl->mnState = 1; 108 // Book Mode 109 else if ( bBookMode && 2 == nColumns ) 110 mpImpl->mnState = 2; 111 else 112 mpImpl->mnState = 3; 113 } 114 115 if ( GetStatusBar().AreItemsVisible() ) 116 GetStatusBar().SetItemData( GetId(), 0 ); // force repaint 117 } 118 119 // ----------------------------------------------------------------------- 120 121 void SwViewLayoutControl::Paint( const UserDrawEvent& rUsrEvt ) 122 { 123 OutputDevice* pDev = rUsrEvt.GetDevice(); 124 Rectangle aRect = rUsrEvt.GetRect(); 125 Color aOldLineColor = pDev->GetLineColor(); 126 Color aOldFillColor = pDev->GetFillColor(); 127 128 //pDev->SetLineColor(); 129 //pDev->SetFillColor( pDev->GetBackground().GetColor() ); 130 131 const bool bSingleColumn = 0 == mpImpl->mnState; 132 const bool bAutomatic = 1 == mpImpl->mnState; 133 const bool bBookMode = 2 == mpImpl->mnState; 134 135 const long nXOffset = (aRect.GetWidth() - nImageWidthSum)/2; 136 const long nYOffset = (aRect.GetHeight() - nImageHeight)/2; 137 138 aRect.Left() = aRect.Left() + nXOffset; 139 aRect.Top() = aRect.Top() + nYOffset; 140 141 // draw single column image: 142 pDev->DrawImage( aRect.TopLeft(), bSingleColumn ? mpImpl->maImageSingleColumn_Active : mpImpl->maImageSingleColumn ); 143 144 // draw automatic image: 145 aRect.Left() += nImageWidthSingle; 146 pDev->DrawImage( aRect.TopLeft(), bAutomatic ? mpImpl->maImageAutomatic_Active : mpImpl->maImageAutomatic ); 147 148 // draw bookmode image: 149 aRect.Left() += nImageWidthAuto; 150 pDev->DrawImage( aRect.TopLeft(), bBookMode ? mpImpl->maImageBookMode_Active : mpImpl->maImageBookMode ); 151 152 // draw separators 153 //aRect = rUsrEvt.GetRect(); 154 //aRect.Left() += nImageWidth; 155 //aRect.setWidth( 1 ); 156 //pDev->DrawRect( aRect ); 157 //aRect.Left() += nImageWidth; 158 //pDev->DrawRect( aRect ); 159 160 //pDev->SetLineColor( aOldLineColor ); 161 //pDev->SetFillColor( aOldFillColor ); 162 } 163 164 sal_Bool SwViewLayoutControl::MouseButtonDown( const MouseEvent & rEvt ) 165 { 166 const Rectangle aRect = getControlRect(); 167 const Point aPoint = rEvt.GetPosPixel(); 168 const long nXDiff = aPoint.X() - aRect.Left(); 169 170 sal_uInt16 nColumns = 1; 171 bool bBookMode = false; 172 173 const long nXOffset = (aRect.GetWidth() - nImageWidthSum)/2; 174 175 if ( nXDiff < nXOffset + nImageWidthSingle ) 176 { 177 mpImpl->mnState = 0; // single 178 nColumns = 1; 179 } 180 else if ( nXDiff < nXOffset + nImageWidthSingle + nImageWidthAuto ) 181 { 182 mpImpl->mnState = 1; // auto 183 nColumns = 0; 184 } 185 else 186 { 187 mpImpl->mnState = 2; // book 188 nColumns = 2; 189 bBookMode = true; 190 } 191 192 // commit state change 193 SvxViewLayoutItem aViewLayout( nColumns, bBookMode ); 194 195 ::com::sun::star::uno::Any a; 196 aViewLayout.QueryValue( a ); 197 198 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aArgs( 1 ); 199 aArgs[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ViewLayout" )); 200 aArgs[0].Value = a; 201 202 execute( aArgs ); 203 204 return sal_True; 205 } 206