1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_sc.hxx" 30 31 #include "scitems.hxx" 32 #include <editeng/adjitem.hxx> 33 #include <svx/drawitem.hxx> 34 #include <svx/fontwork.hxx> 35 #include <editeng/frmdiritem.hxx> 36 #include <editeng/outlobj.hxx> 37 #include <svx/svdocapt.hxx> 38 #include <svx/xtextit.hxx> 39 #include <editeng/writingmodeitem.hxx> 40 #include <sfx2/bindings.hxx> 41 #include <sfx2/viewfrm.hxx> 42 #include <sfx2/objsh.hxx> 43 #include <sfx2/request.hxx> 44 #include <sot/formats.hxx> 45 #include <svl/whiter.hxx> 46 47 #include "sc.hrc" 48 #include "drtxtob.hxx" 49 #include "viewdata.hxx" 50 #include "drawview.hxx" 51 #include "tabvwsh.hxx" 52 #include "impex.hxx" 53 #include "docsh.hxx" 54 #include "transobj.hxx" 55 #include "drwtrans.hxx" 56 #include "drwlayer.hxx" 57 58 //------------------------------------------------------------------------ 59 60 sal_uInt16 ScGetFontWorkId() 61 { 62 return SvxFontWorkChildWindow::GetChildWindowId(); 63 } 64 65 sal_Bool ScDrawTextObjectBar::IsNoteEdit() 66 { 67 return ScDrawLayer::IsNoteCaption( pViewData->GetView()->GetSdrView()->GetTextEditObject() ); 68 } 69 70 // wenn kein Text editiert wird, Funktionen wie in drawsh 71 72 void __EXPORT ScDrawTextObjectBar::ExecuteGlobal( SfxRequest &rReq ) 73 { 74 ScTabView* pTabView = pViewData->GetView(); 75 ScDrawView* pView = pTabView->GetScDrawView(); 76 77 sal_uInt16 nSlot = rReq.GetSlot(); 78 switch ( nSlot ) 79 { 80 case SID_COPY: 81 pView->DoCopy(); 82 break; 83 84 case SID_CUT: 85 pView->DoCut(); 86 pViewData->GetViewShell()->UpdateDrawShell(); 87 break; 88 89 case SID_PASTE: 90 case SID_PASTE_SPECIAL: 91 case SID_CLIPBOARD_FORMAT_ITEMS: 92 case SID_HYPERLINK_SETLINK: 93 { 94 // cell methods are at cell shell, which is not available if 95 // ScDrawTextObjectBar is active 96 //! move paste etc. to view shell? 97 } 98 break; 99 100 case SID_SELECTALL: 101 pView->MarkAll(); 102 break; 103 104 case SID_TEXTDIRECTION_LEFT_TO_RIGHT: 105 case SID_TEXTDIRECTION_TOP_TO_BOTTOM: 106 { 107 SfxItemSet aAttr( pView->GetModel()->GetItemPool(), SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION, 0 ); 108 aAttr.Put( SvxWritingModeItem( 109 nSlot == SID_TEXTDIRECTION_LEFT_TO_RIGHT ? 110 com::sun::star::text::WritingMode_LR_TB : com::sun::star::text::WritingMode_TB_RL, 111 SDRATTR_TEXTDIRECTION ) ); 112 pView->SetAttributes( aAttr ); 113 pViewData->GetScDrawView()->InvalidateDrawTextAttrs(); // Bidi slots may be disabled 114 rReq.Done( aAttr ); 115 } 116 break; 117 118 case SID_ENABLE_HYPHENATION: 119 { 120 SFX_REQUEST_ARG( rReq, pItem, SfxBoolItem, SID_ENABLE_HYPHENATION, sal_False); 121 if( pItem ) 122 { 123 SfxItemSet aSet( GetPool(), EE_PARA_HYPHENATE, EE_PARA_HYPHENATE ); 124 sal_Bool bValue = ( (const SfxBoolItem*) pItem)->GetValue(); 125 aSet.Put( SfxBoolItem( EE_PARA_HYPHENATE, bValue ) ); 126 pView->SetAttributes( aSet ); 127 } 128 rReq.Done(); 129 } 130 break; 131 } 132 } 133 134 void ScDrawTextObjectBar::GetGlobalClipState( SfxItemSet& rSet ) 135 { 136 // cell methods are at cell shell, which is not available if 137 // ScDrawTextObjectBar is active -> disable everything 138 //! move paste etc. to view shell? 139 140 SfxWhichIter aIter(rSet); 141 sal_uInt16 nWhich = aIter.FirstWhich(); 142 while (nWhich) 143 { 144 rSet.DisableItem( nWhich ); 145 nWhich = aIter.NextWhich(); 146 } 147 } 148 149 void __EXPORT ScDrawTextObjectBar::ExecuteExtra( SfxRequest &rReq ) 150 { 151 ScTabView* pTabView = pViewData->GetView(); 152 ScDrawView* pView = pTabView->GetScDrawView(); 153 154 sal_uInt16 nSlot = rReq.GetSlot(); 155 switch ( nSlot ) 156 { 157 case SID_FONTWORK: 158 { 159 sal_uInt16 nId = SvxFontWorkChildWindow::GetChildWindowId(); 160 SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame(); 161 162 if ( rReq.GetArgs() ) 163 pViewFrm->SetChildWindow( nId, 164 ((const SfxBoolItem&) 165 (rReq.GetArgs()->Get(SID_FONTWORK))). 166 GetValue() ); 167 else 168 pViewFrm->ToggleChildWindow( nId ); 169 170 pViewFrm->GetBindings().Invalidate( SID_FONTWORK ); 171 rReq.Done(); 172 } 173 break; 174 175 case SID_ATTR_PARA_LEFT_TO_RIGHT: 176 case SID_ATTR_PARA_RIGHT_TO_LEFT: 177 { 178 SfxItemSet aAttr( pView->GetModel()->GetItemPool(), 179 EE_PARA_WRITINGDIR, EE_PARA_WRITINGDIR, 180 EE_PARA_JUST, EE_PARA_JUST, 181 0 ); 182 sal_Bool bLeft = ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT ); 183 aAttr.Put( SvxFrameDirectionItem( 184 bLeft ? FRMDIR_HORI_LEFT_TOP : FRMDIR_HORI_RIGHT_TOP, 185 EE_PARA_WRITINGDIR ) ); 186 aAttr.Put( SvxAdjustItem( 187 bLeft ? SVX_ADJUST_LEFT : SVX_ADJUST_RIGHT, 188 EE_PARA_JUST ) ); 189 pView->SetAttributes( aAttr ); 190 pViewData->GetScDrawView()->InvalidateDrawTextAttrs(); 191 rReq.Done(); //! Done(aAttr) ? 192 193 } 194 break; 195 } 196 } 197 198 void ScDrawTextObjectBar::ExecFormText(SfxRequest& rReq) 199 { 200 ScTabView* pTabView = pViewData->GetView(); 201 ScDrawView* pDrView = pTabView->GetScDrawView(); 202 const SdrMarkList& rMarkList = pDrView->GetMarkedObjectList(); 203 204 if ( rMarkList.GetMarkCount() == 1 && rReq.GetArgs() ) 205 { 206 const SfxItemSet& rSet = *rReq.GetArgs(); 207 const SfxPoolItem* pItem; 208 209 if ( pDrView->IsTextEdit() ) 210 pDrView->ScEndTextEdit(); 211 212 if ( SFX_ITEM_SET == 213 rSet.GetItemState(XATTR_FORMTXTSTDFORM, sal_True, &pItem) 214 && XFTFORM_NONE != 215 ((const XFormTextStdFormItem*) pItem)->GetValue() ) 216 { 217 218 sal_uInt16 nId = SvxFontWorkChildWindow::GetChildWindowId(); 219 SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame(); 220 SvxFontWorkDialog* pDlg = (SvxFontWorkDialog*) 221 (pViewFrm-> 222 GetChildWindow(nId)->GetWindow()); 223 224 pDlg->CreateStdFormObj(*pDrView, *pDrView->GetSdrPageView(), 225 rSet, *rMarkList.GetMark(0)->GetMarkedSdrObj(), 226 ((const XFormTextStdFormItem*) pItem)-> 227 GetValue()); 228 } 229 else 230 pDrView->SetAttributes(rSet); 231 } 232 } 233 234 void ScDrawTextObjectBar::GetFormTextState(SfxItemSet& rSet) 235 { 236 const SdrObject* pObj = NULL; 237 SvxFontWorkDialog* pDlg = NULL; 238 ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 239 const SdrMarkList& rMarkList = pDrView->GetMarkedObjectList(); 240 sal_uInt16 nId = SvxFontWorkChildWindow::GetChildWindowId(); 241 242 SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame(); 243 if ( pViewFrm->HasChildWindow(nId) ) 244 pDlg = (SvxFontWorkDialog*)(pViewFrm->GetChildWindow(nId)->GetWindow()); 245 246 if ( rMarkList.GetMarkCount() == 1 ) 247 pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 248 249 if ( pObj == NULL || !pObj->ISA(SdrTextObj) || 250 !((SdrTextObj*) pObj)->HasText() ) 251 { 252 if ( pDlg ) 253 pDlg->SetActive(sal_False); 254 255 rSet.DisableItem(XATTR_FORMTXTSTYLE); 256 rSet.DisableItem(XATTR_FORMTXTADJUST); 257 rSet.DisableItem(XATTR_FORMTXTDISTANCE); 258 rSet.DisableItem(XATTR_FORMTXTSTART); 259 rSet.DisableItem(XATTR_FORMTXTMIRROR); 260 rSet.DisableItem(XATTR_FORMTXTSTDFORM); 261 rSet.DisableItem(XATTR_FORMTXTHIDEFORM); 262 rSet.DisableItem(XATTR_FORMTXTOUTLINE); 263 rSet.DisableItem(XATTR_FORMTXTSHADOW); 264 rSet.DisableItem(XATTR_FORMTXTSHDWCOLOR); 265 rSet.DisableItem(XATTR_FORMTXTSHDWXVAL); 266 rSet.DisableItem(XATTR_FORMTXTSHDWYVAL); 267 } 268 else 269 { 270 if ( pDlg ) 271 { 272 SfxObjectShell* pDocSh = SfxObjectShell::Current(); 273 274 if ( pDocSh ) 275 { 276 const SfxPoolItem* pItem = pDocSh->GetItem( SID_COLOR_TABLE ); 277 XColorTable* pColorTable = NULL; 278 279 if ( pItem ) 280 pColorTable = ((SvxColorTableItem*)pItem)->GetColorTable(); 281 282 pDlg->SetActive(); 283 284 if ( pColorTable ) 285 pDlg->SetColorTable( pColorTable ); 286 else 287 { DBG_ERROR( "ColorList not found :-/" ); } 288 } 289 } 290 SfxItemSet aViewAttr(pDrView->GetModel()->GetItemPool()); 291 pDrView->GetAttributes(aViewAttr); 292 rSet.Set(aViewAttr); 293 } 294 } 295 296 297 298 299