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_svx.hxx" 26 27 // include --------------------------------------------------------------- 28 #include <tools/shl.hxx> 29 #ifndef _STATUS_HXX //autogen 30 #include <vcl/status.hxx> 31 #endif 32 #include <svl/eitem.hxx> 33 #include <sfx2/app.hxx> 34 #include <sfx2/dispatch.hxx> 35 36 #define _SVX_INSCTRL_CXX 37 38 #include <svx/dialogs.hrc> 39 40 #include "svx/insctrl.hxx" 41 #include <svx/dialmgr.hxx> 42 43 #define PAINT_OFFSET 5 44 45 SFX_IMPL_STATUSBAR_CONTROL(SvxInsertStatusBarControl, SfxBoolItem); 46 47 // class SvxInsertStatusBarControl --------------------------------------- 48 49 SvxInsertStatusBarControl::SvxInsertStatusBarControl( sal_uInt16 _nSlotId, 50 sal_uInt16 _nId, 51 StatusBar& rStb ) : 52 53 SfxStatusBarControl( _nSlotId, _nId, rStb ), 54 bInsert( sal_True ) 55 { 56 } 57 58 // ----------------------------------------------------------------------- 59 60 SvxInsertStatusBarControl::~SvxInsertStatusBarControl() 61 { 62 } 63 64 // ----------------------------------------------------------------------- 65 66 void SvxInsertStatusBarControl::StateChanged( sal_uInt16 , SfxItemState eState, 67 const SfxPoolItem* pState ) 68 { 69 if ( SFX_ITEM_AVAILABLE != eState ) 70 GetStatusBar().SetItemText( GetId(), String() ); 71 else 72 { 73 DBG_ASSERT( pState->ISA( SfxBoolItem ), "invalid item type" ); 74 SfxBoolItem* pItem = (SfxBoolItem*)pState; 75 bInsert = pItem->GetValue(); 76 DrawItemText_Impl(); 77 } 78 } 79 80 // ----------------------------------------------------------------------- 81 82 void SvxInsertStatusBarControl::Click() 83 { 84 if ( !GetStatusBar().GetItemText( GetId() ).Len() ) 85 return; 86 bInsert = !bInsert; 87 SfxBoolItem aIns( GetSlotId(), bInsert ); 88 89 ::com::sun::star::uno::Any a; 90 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aArgs( 1 ); 91 aArgs[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "InsertMode" )); 92 aIns.QueryValue( a ); 93 aArgs[0].Value = a; 94 95 execute( aArgs ); 96 } 97 98 // ----------------------------------------------------------------------- 99 100 void SvxInsertStatusBarControl::Paint( const UserDrawEvent& ) 101 { 102 DrawItemText_Impl(); 103 } 104 105 // ----------------------------------------------------------------------- 106 107 void SvxInsertStatusBarControl::DrawItemText_Impl() 108 { 109 sal_uInt16 _nId = RID_SVXSTR_OVERWRITE_TEXT; 110 111 if ( bInsert ) 112 _nId = RID_SVXSTR_INSERT_TEXT; 113 GetStatusBar().SetItemText( GetId(), SVX_RESSTR( _nId ) ); 114 } 115 116 sal_uIntPtr SvxInsertStatusBarControl::GetDefItemWidth(const StatusBar& rStb) 117 { 118 long nWidth1 = rStb.GetTextWidth(SVX_RESSTR(RID_SVXSTR_OVERWRITE_TEXT)); 119 long nWidth2 = rStb.GetTextWidth(SVX_RESSTR(RID_SVXSTR_INSERT_TEXT)); 120 121 if(nWidth1<nWidth2) 122 nWidth1=nWidth2; 123 124 return nWidth1+PAINT_OFFSET; 125 } 126 127 128