xref: /aoo42x/main/sw/source/ui/uiview/viewstat.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_sw.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include <hintids.hxx>
32*cdf0e10cSrcweir #include <com/sun/star/linguistic2/XThesaurus.hpp>
33*cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx>
34*cdf0e10cSrcweir #include <svl/aeitem.hxx>
35*cdf0e10cSrcweir #include <svl/whiter.hxx>
36*cdf0e10cSrcweir #include <svl/cjkoptions.hxx>
37*cdf0e10cSrcweir 
38*cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
39*cdf0e10cSrcweir #include <sfx2/objitem.hxx>
40*cdf0e10cSrcweir #include <svl/imageitm.hxx>
41*cdf0e10cSrcweir #include <svl/languageoptions.hxx>
42*cdf0e10cSrcweir #include <editeng/protitem.hxx>
43*cdf0e10cSrcweir #include <sfx2/linkmgr.hxx>
44*cdf0e10cSrcweir #include <editeng/langitem.hxx>
45*cdf0e10cSrcweir #include <editeng/brshitem.hxx>
46*cdf0e10cSrcweir #include <svx/htmlmode.hxx>
47*cdf0e10cSrcweir #include <editeng/unolingu.hxx>
48*cdf0e10cSrcweir #include <sfx2/msgpool.hxx>
49*cdf0e10cSrcweir #include <swmodule.hxx>
50*cdf0e10cSrcweir #include <tox.hxx>
51*cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
52*cdf0e10cSrcweir #include <sfx2/app.hxx>
53*cdf0e10cSrcweir #include <view.hxx>
54*cdf0e10cSrcweir #include <wrtsh.hxx>
55*cdf0e10cSrcweir #include <basesh.hxx>
56*cdf0e10cSrcweir #include <uitool.hxx>
57*cdf0e10cSrcweir #include <viewopt.hxx>
58*cdf0e10cSrcweir #include <tablemgr.hxx>
59*cdf0e10cSrcweir #include <pagedesc.hxx>
60*cdf0e10cSrcweir #include <wview.hxx>
61*cdf0e10cSrcweir #include <globdoc.hxx>
62*cdf0e10cSrcweir #include <svl/stritem.hxx>
63*cdf0e10cSrcweir #include <unotools/moduleoptions.hxx>
64*cdf0e10cSrcweir #include <svl/visitem.hxx>
65*cdf0e10cSrcweir 
66*cdf0e10cSrcweir #include <cmdid.h>
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir #include <IDocumentRedlineAccess.hxx>
69*cdf0e10cSrcweir 
70*cdf0e10cSrcweir using namespace ::com::sun::star;
71*cdf0e10cSrcweir 
72*cdf0e10cSrcweir /*--------------------------------------------------------------------
73*cdf0e10cSrcweir 	Beschreibung:
74*cdf0e10cSrcweir  --------------------------------------------------------------------*/
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir void SwView::GetState(SfxItemSet &rSet)
77*cdf0e10cSrcweir {
78*cdf0e10cSrcweir 	SfxWhichIter aIter(rSet);
79*cdf0e10cSrcweir 	sal_uInt16 nWhich = aIter.FirstWhich();
80*cdf0e10cSrcweir 	sal_uInt16 eFrmType = FRMTYPE_NONE;
81*cdf0e10cSrcweir 	int bGetFrmType = sal_False;
82*cdf0e10cSrcweir 	sal_Bool bWeb = 0 != PTR_CAST(SwWebView, this);
83*cdf0e10cSrcweir 
84*cdf0e10cSrcweir 	while(nWhich)
85*cdf0e10cSrcweir 	{
86*cdf0e10cSrcweir 		switch(nWhich)
87*cdf0e10cSrcweir 		{
88*cdf0e10cSrcweir 			case FN_EDIT_LINK_DLG:
89*cdf0e10cSrcweir 				if( !pWrtShell->GetLinkManager().GetLinks().Count()	)
90*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
91*cdf0e10cSrcweir 				else if( pWrtShell->IsSelFrmMode() &&
92*cdf0e10cSrcweir 							pWrtShell->IsSelObjProtected(FLYPROTECT_CONTENT))
93*cdf0e10cSrcweir 						rSet.DisableItem(nWhich);
94*cdf0e10cSrcweir 				break;
95*cdf0e10cSrcweir 
96*cdf0e10cSrcweir 			case FN_INSERT_CAPTION:
97*cdf0e10cSrcweir 			{
98*cdf0e10cSrcweir 				// Captions gibt's fuer Grafiken, OLE-Objekte, Rahmen und Tabellen
99*cdf0e10cSrcweir 				if( !bGetFrmType )
100*cdf0e10cSrcweir 					eFrmType = pWrtShell->GetFrmType(0,sal_True), bGetFrmType = sal_True;
101*cdf0e10cSrcweir 				if (! ( ((eFrmType & FRMTYPE_FLY_ANY) && nSelectionType != nsSelectionType::SEL_DRW_TXT)||
102*cdf0e10cSrcweir 						nSelectionType & nsSelectionType::SEL_TBL ||
103*cdf0e10cSrcweir 						nSelectionType & nsSelectionType::SEL_DRW) )
104*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
105*cdf0e10cSrcweir                 else if((pWrtShell->IsObjSelected()||pWrtShell->IsFrmSelected()) &&
106*cdf0e10cSrcweir                         (pWrtShell->IsSelObjProtected( FLYPROTECT_PARENT)||
107*cdf0e10cSrcweir                             pWrtShell->IsSelObjProtected( FLYPROTECT_CONTENT )))
108*cdf0e10cSrcweir                     rSet.DisableItem(nWhich);
109*cdf0e10cSrcweir                 else if( pWrtShell->IsTableMode() )
110*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
111*cdf0e10cSrcweir 			}
112*cdf0e10cSrcweir 			break;
113*cdf0e10cSrcweir 
114*cdf0e10cSrcweir 			case FN_EDIT_FOOTNOTE:
115*cdf0e10cSrcweir 			{
116*cdf0e10cSrcweir 				if( !pWrtShell->GetCurFtn() )
117*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
118*cdf0e10cSrcweir 			}
119*cdf0e10cSrcweir 			break;
120*cdf0e10cSrcweir 
121*cdf0e10cSrcweir 			case FN_CHANGE_PAGENUM:
122*cdf0e10cSrcweir 			{
123*cdf0e10cSrcweir 				sal_uInt16 nType = pWrtShell->GetFrmType(0,sal_True);
124*cdf0e10cSrcweir 				if( ( FRMTYPE_FLY_ANY | FRMTYPE_HEADER | FRMTYPE_FOOTER |
125*cdf0e10cSrcweir 					  FRMTYPE_FOOTNOTE | FRMTYPE_DRAWOBJ ) & nType )
126*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
127*cdf0e10cSrcweir 				else
128*cdf0e10cSrcweir 					rSet.Put(SfxUInt16Item(nWhich, pWrtShell->GetPageOffset()));
129*cdf0e10cSrcweir 			}
130*cdf0e10cSrcweir 			break;
131*cdf0e10cSrcweir 			case SID_PRINTDOC:
132*cdf0e10cSrcweir 			case SID_PRINTDOCDIRECT:
133*cdf0e10cSrcweir 				GetSlotState( nWhich, SfxViewShell::GetInterface(),	&rSet );
134*cdf0e10cSrcweir 			break;
135*cdf0e10cSrcweir 			case SID_ATTR_PAGE:
136*cdf0e10cSrcweir 			case SID_ATTR_PAGE_SIZE:
137*cdf0e10cSrcweir 			case SID_ATTR_PAGE_PAPERBIN:
138*cdf0e10cSrcweir 			case RES_PAPER_BIN:
139*cdf0e10cSrcweir 			case FN_PARAM_FTN_INFO:
140*cdf0e10cSrcweir 			{
141*cdf0e10cSrcweir 				const sal_uInt16 nCurIdx = pWrtShell->GetCurPageDesc();
142*cdf0e10cSrcweir 				const SwPageDesc& rDesc = pWrtShell->GetPageDesc( nCurIdx );
143*cdf0e10cSrcweir 				::PageDescToItemSet( rDesc, rSet);
144*cdf0e10cSrcweir 			}
145*cdf0e10cSrcweir 			break;
146*cdf0e10cSrcweir 			case RES_BACKGROUND:
147*cdf0e10cSrcweir 			case SID_ATTR_BRUSH:
148*cdf0e10cSrcweir 			{
149*cdf0e10cSrcweir 				const sal_uInt16 nCurIdx = pWrtShell->GetCurPageDesc();
150*cdf0e10cSrcweir 				const SwPageDesc& rDesc = pWrtShell->GetPageDesc( nCurIdx );
151*cdf0e10cSrcweir 				const SwFrmFmt& rMaster = rDesc.GetMaster();
152*cdf0e10cSrcweir 				const SvxBrushItem& rBrush = (const SvxBrushItem&)
153*cdf0e10cSrcweir                                     rMaster.GetFmtAttr(RES_BACKGROUND, sal_True);
154*cdf0e10cSrcweir 				rSet.Put(rBrush);
155*cdf0e10cSrcweir 			}
156*cdf0e10cSrcweir 			break;
157*cdf0e10cSrcweir 			case SID_CLEARHISTORY:
158*cdf0e10cSrcweir 			{
159*cdf0e10cSrcweir                 rSet.Put(SfxBoolItem(nWhich, pWrtShell->GetLastUndoInfo(0, 0)));
160*cdf0e10cSrcweir 			}
161*cdf0e10cSrcweir 			break;
162*cdf0e10cSrcweir 			case SID_UNDO:
163*cdf0e10cSrcweir 			{
164*cdf0e10cSrcweir 				//JP 21.07.98: Bug 53429 - die muss noch nicht vorhanden sein
165*cdf0e10cSrcweir 				// 				also lasse sie mal anlegen:
166*cdf0e10cSrcweir 				if( !pShell )
167*cdf0e10cSrcweir 					SelectShell();
168*cdf0e10cSrcweir 
169*cdf0e10cSrcweir 				const SfxPoolItem* pState = pShell->GetSlotState(SID_UNDO);
170*cdf0e10cSrcweir 				if(pState)
171*cdf0e10cSrcweir 					rSet.Put(*pState);
172*cdf0e10cSrcweir 				else
173*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
174*cdf0e10cSrcweir 			}
175*cdf0e10cSrcweir 			break;
176*cdf0e10cSrcweir 			case FN_INSERT_CTRL:
177*cdf0e10cSrcweir             {
178*cdf0e10cSrcweir                 SfxImageItem aImgItem(nWhich, bWeb ? SwView::nWebInsertCtrlState : SwView::nInsertCtrlState);
179*cdf0e10cSrcweir                 SfxSlotPool& rPool = SfxSlotPool::GetSlotPool( GetViewFrame() );
180*cdf0e10cSrcweir                 const SfxSlot* pSlot = rPool.GetSlot( aImgItem.GetValue() );
181*cdf0e10cSrcweir                 if(pSlot && pSlot->IsMode( SFX_SLOT_IMAGEROTATION ))
182*cdf0e10cSrcweir                 {
183*cdf0e10cSrcweir                     if(pWrtShell->IsInVerticalText())
184*cdf0e10cSrcweir                         aImgItem.SetRotation(2700);
185*cdf0e10cSrcweir                     if(pWrtShell->IsInRightToLeftText())
186*cdf0e10cSrcweir                         aImgItem.SetMirrored(sal_True);
187*cdf0e10cSrcweir                 }
188*cdf0e10cSrcweir                 rSet.Put(aImgItem);
189*cdf0e10cSrcweir             }
190*cdf0e10cSrcweir             break;
191*cdf0e10cSrcweir 			case FN_INSERT_OBJ_CTRL:
192*cdf0e10cSrcweir 			if(bWeb)
193*cdf0e10cSrcweir 				rSet.DisableItem(nWhich);
194*cdf0e10cSrcweir 			else
195*cdf0e10cSrcweir             {
196*cdf0e10cSrcweir                 SfxImageItem aImgItem(nWhich, SwView::nInsertObjectCtrlState);
197*cdf0e10cSrcweir                 SfxSlotPool& rPool = SfxSlotPool::GetSlotPool( GetViewFrame() );
198*cdf0e10cSrcweir                 const SfxSlot* pSlot = rPool.GetSlot( aImgItem.GetValue() );
199*cdf0e10cSrcweir                 if(pSlot && pSlot->IsMode( SFX_SLOT_IMAGEROTATION ))
200*cdf0e10cSrcweir                 {
201*cdf0e10cSrcweir                     if(pWrtShell->IsInVerticalText())
202*cdf0e10cSrcweir                         aImgItem.SetRotation(2700);
203*cdf0e10cSrcweir                     if(pWrtShell->IsInRightToLeftText())
204*cdf0e10cSrcweir                         aImgItem.SetMirrored(sal_True);
205*cdf0e10cSrcweir                 }
206*cdf0e10cSrcweir                 rSet.Put(aImgItem);
207*cdf0e10cSrcweir             }
208*cdf0e10cSrcweir 			break;
209*cdf0e10cSrcweir 			case FN_UPDATE_TOX:
210*cdf0e10cSrcweir 				if(!pWrtShell->GetTOXCount())
211*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
212*cdf0e10cSrcweir 			break;
213*cdf0e10cSrcweir 			case FN_EDIT_CURRENT_TOX:
214*cdf0e10cSrcweir 			case FN_UPDATE_CUR_TOX:
215*cdf0e10cSrcweir             {
216*cdf0e10cSrcweir                 const SwTOXBase* pBase = 0;
217*cdf0e10cSrcweir                 if(0 == (pBase = pWrtShell->GetCurTOX()) ||
218*cdf0e10cSrcweir                     (FN_EDIT_CURRENT_TOX == nWhich && pBase->IsTOXBaseInReadonly()))
219*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
220*cdf0e10cSrcweir             }
221*cdf0e10cSrcweir             break;
222*cdf0e10cSrcweir 			case SID_TWAIN_SELECT:
223*cdf0e10cSrcweir 			case SID_TWAIN_TRANSFER:
224*cdf0e10cSrcweir #if defined WNT || defined UNX
225*cdf0e10cSrcweir 			{
226*cdf0e10cSrcweir 				if(!SW_MOD()->GetScannerManager().is())
227*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
228*cdf0e10cSrcweir 			}
229*cdf0e10cSrcweir #endif
230*cdf0e10cSrcweir 			break;
231*cdf0e10cSrcweir 			case RES_PARATR_TABSTOP:
232*cdf0e10cSrcweir 			case SID_ATTR_DEFTABSTOP:
233*cdf0e10cSrcweir 			{
234*cdf0e10cSrcweir 				const SvxTabStopItem& rDefTabs =
235*cdf0e10cSrcweir 					(const SvxTabStopItem&)pWrtShell->
236*cdf0e10cSrcweir 										GetDefault(RES_PARATR_TABSTOP);
237*cdf0e10cSrcweir 				rSet.Put( SfxUInt16Item( nWhich,
238*cdf0e10cSrcweir 												(sal_uInt16)::GetTabDist(rDefTabs)));
239*cdf0e10cSrcweir 			}
240*cdf0e10cSrcweir 			break;
241*cdf0e10cSrcweir 			case SID_ATTR_LANGUAGE:
242*cdf0e10cSrcweir 			{
243*cdf0e10cSrcweir 				rSet.Put((const SvxLanguageItem&)
244*cdf0e10cSrcweir 					pWrtShell->GetDefault(RES_CHRATR_LANGUAGE), SID_ATTR_LANGUAGE);
245*cdf0e10cSrcweir 			}
246*cdf0e10cSrcweir 			break;
247*cdf0e10cSrcweir 			case RES_CHRATR_CJK_LANGUAGE:
248*cdf0e10cSrcweir 				rSet.Put((const SvxLanguageItem&)
249*cdf0e10cSrcweir 					pWrtShell->GetDefault(RES_CHRATR_CJK_LANGUAGE), RES_CHRATR_CJK_LANGUAGE);
250*cdf0e10cSrcweir 			break;
251*cdf0e10cSrcweir 			case RES_CHRATR_CTL_LANGUAGE:
252*cdf0e10cSrcweir 				rSet.Put((const SvxLanguageItem&)
253*cdf0e10cSrcweir 					pWrtShell->GetDefault(RES_CHRATR_CTL_LANGUAGE), RES_CHRATR_CTL_LANGUAGE);
254*cdf0e10cSrcweir 			break;
255*cdf0e10cSrcweir             case FN_HYPHENATE_OPT_DLG:
256*cdf0e10cSrcweir 			{
257*cdf0e10cSrcweir 				sal_Bool bCheck = sal_False;
258*cdf0e10cSrcweir 
259*cdf0e10cSrcweir 				if (pWrtShell->GetSelectionType() & (nsSelectionType::SEL_DRW_TXT|nsSelectionType::SEL_DRW))
260*cdf0e10cSrcweir 					bCheck = IsDrawTextHyphenate();
261*cdf0e10cSrcweir 				rSet.Put(SfxBoolItem(nWhich, bCheck));
262*cdf0e10cSrcweir 			}
263*cdf0e10cSrcweir 			break;
264*cdf0e10cSrcweir             case FN_REDLINE_ON:
265*cdf0e10cSrcweir                 rSet.Put( SfxBoolItem( nWhich, GetDocShell()->IsChangeRecording() ) );
266*cdf0e10cSrcweir             break;
267*cdf0e10cSrcweir             case FN_REDLINE_PROTECT :
268*cdf0e10cSrcweir                 rSet.Put( SfxBoolItem( nWhich, GetDocShell()->HasChangeRecordProtection() ) );
269*cdf0e10cSrcweir             break;
270*cdf0e10cSrcweir             case FN_REDLINE_SHOW:
271*cdf0e10cSrcweir 			{
272*cdf0e10cSrcweir 				sal_uInt16 nMask = nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE;
273*cdf0e10cSrcweir 				rSet.Put( SfxBoolItem( nWhich,
274*cdf0e10cSrcweir 					(pWrtShell->GetRedlineMode() & nMask) == nMask ));
275*cdf0e10cSrcweir 			}
276*cdf0e10cSrcweir 			break;
277*cdf0e10cSrcweir             case SID_GALLERY :
278*cdf0e10cSrcweir             case SID_AVMEDIA_PLAYER :
279*cdf0e10cSrcweir             case FN_REDLINE_ACCEPT :
280*cdf0e10cSrcweir 			{
281*cdf0e10cSrcweir 				SfxViewFrame* pVFrame = GetViewFrame();
282*cdf0e10cSrcweir 				if (pVFrame->KnowsChildWindow(nWhich))
283*cdf0e10cSrcweir 					rSet.Put(SfxBoolItem( nWhich, pVFrame->HasChildWindow(nWhich)));
284*cdf0e10cSrcweir 				else
285*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
286*cdf0e10cSrcweir 			}
287*cdf0e10cSrcweir 			break;
288*cdf0e10cSrcweir             case FN_REDLINE_ACCEPT_DIRECT:
289*cdf0e10cSrcweir             case FN_REDLINE_REJECT_DIRECT:
290*cdf0e10cSrcweir             {
291*cdf0e10cSrcweir                 SwContentAtPos aCntntAtPos( SwContentAtPos::SW_REDLINE );
292*cdf0e10cSrcweir                 Point aCrsrPos = pWrtShell->GetCrsrDocPos( sal_True );
293*cdf0e10cSrcweir                 if( !pWrtShell->GetContentAtPos( aCrsrPos, aCntntAtPos ) )
294*cdf0e10cSrcweir                     rSet.DisableItem( nWhich );
295*cdf0e10cSrcweir             }
296*cdf0e10cSrcweir             break;
297*cdf0e10cSrcweir             case SID_THESAURUS:
298*cdf0e10cSrcweir 			{
299*cdf0e10cSrcweir 				SwWrtShell  &rSh = GetWrtShell();
300*cdf0e10cSrcweir 				if (2 <= rSh.GetCrsrCnt())	// multi selection?
301*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
302*cdf0e10cSrcweir 				else
303*cdf0e10cSrcweir 				{
304*cdf0e10cSrcweir 					LanguageType nLang = rSh.GetCurLang();
305*cdf0e10cSrcweir 
306*cdf0e10cSrcweir 					// disable "Thesaurus" (menu entry and key shortcut) if the
307*cdf0e10cSrcweir 					// language is not supported (by default it is enabled)
308*cdf0e10cSrcweir 					uno::Reference< linguistic2::XThesaurus >  xThes( ::GetThesaurus() );
309*cdf0e10cSrcweir 					if (!xThes.is() || nLang == LANGUAGE_NONE ||
310*cdf0e10cSrcweir 						!xThes->hasLocale( SvxCreateLocale( nLang ) ))
311*cdf0e10cSrcweir 						rSet.DisableItem(nWhich);
312*cdf0e10cSrcweir 				}
313*cdf0e10cSrcweir 			}
314*cdf0e10cSrcweir 			break;
315*cdf0e10cSrcweir             case SID_HANGUL_HANJA_CONVERSION:
316*cdf0e10cSrcweir             case SID_CHINESE_CONVERSION:
317*cdf0e10cSrcweir             {
318*cdf0e10cSrcweir                 if (!SvtCJKOptions().IsAnyEnabled())
319*cdf0e10cSrcweir                 {
320*cdf0e10cSrcweir                     GetViewFrame()->GetBindings().SetVisibleState( nWhich, sal_False );
321*cdf0e10cSrcweir                     rSet.DisableItem(nWhich);
322*cdf0e10cSrcweir                 }
323*cdf0e10cSrcweir                 else
324*cdf0e10cSrcweir                     GetViewFrame()->GetBindings().SetVisibleState( nWhich, sal_True );
325*cdf0e10cSrcweir             }
326*cdf0e10cSrcweir             break;
327*cdf0e10cSrcweir 			case SID_MAIL_SCROLLBODY_PAGEDOWN:
328*cdf0e10cSrcweir 				{
329*cdf0e10cSrcweir                     const long nBottom = pWrtShell->GetDocSize().Height() + DOCUMENTBORDER;
330*cdf0e10cSrcweir                     const long nAct = GetVisArea().Bottom();
331*cdf0e10cSrcweir 					rSet.Put(SfxBoolItem(SID_MAIL_SCROLLBODY_PAGEDOWN, nAct < nBottom ));
332*cdf0e10cSrcweir 				}
333*cdf0e10cSrcweir 				break;
334*cdf0e10cSrcweir 
335*cdf0e10cSrcweir 			case SID_DOCUMENT_COMPARE:
336*cdf0e10cSrcweir 			case SID_DOCUMENT_MERGE:
337*cdf0e10cSrcweir 				if( GetDocShell()->IsA( SwGlobalDocShell::StaticType() ) ||
338*cdf0e10cSrcweir //					pWrtShell->IsAnySectionInDoc( sal_True, sal_True, sal_True )||
339*cdf0e10cSrcweir                     (SID_DOCUMENT_MERGE == nWhich && pWrtShell->getIDocumentRedlineAccess()->GetRedlinePassword().getLength()))
340*cdf0e10cSrcweir 					rSet.DisableItem(nWhich);
341*cdf0e10cSrcweir 			break;
342*cdf0e10cSrcweir             case  SID_VIEW_DATA_SOURCE_BROWSER:
343*cdf0e10cSrcweir                 if ( !SvtModuleOptions().IsModuleInstalled( SvtModuleOptions::E_SDATABASE ) )
344*cdf0e10cSrcweir                     rSet.Put( SfxVisibilityItem( nWhich, sal_False ) );
345*cdf0e10cSrcweir                 else
346*cdf0e10cSrcweir                     rSet.Put( SfxBoolItem( nWhich, GetViewFrame()->HasChildWindow( SID_BROWSER ) ) );
347*cdf0e10cSrcweir             break;
348*cdf0e10cSrcweir             case SID_READONLY_MODE:
349*cdf0e10cSrcweir                 rSet.Put(SfxBoolItem(nWhich,
350*cdf0e10cSrcweir                     pWrtShell->HasReadonlySel()||GetDocShell()->IsReadOnly()));
351*cdf0e10cSrcweir             break;
352*cdf0e10cSrcweir             case SID_IMAGE_ORIENTATION:
353*cdf0e10cSrcweir             {
354*cdf0e10cSrcweir                 SfxImageItem aImageItem(nWhich);
355*cdf0e10cSrcweir                 if(pWrtShell->IsInVerticalText())
356*cdf0e10cSrcweir                     aImageItem.SetRotation( 2700 );
357*cdf0e10cSrcweir                 if(pWrtShell->IsInRightToLeftText())
358*cdf0e10cSrcweir                     aImageItem.SetMirrored( sal_True );
359*cdf0e10cSrcweir                 rSet.Put(aImageItem);
360*cdf0e10cSrcweir             }
361*cdf0e10cSrcweir             break;
362*cdf0e10cSrcweir             case FN_INSERT_FIELD_DATA_ONLY :
363*cdf0e10cSrcweir                 if(!bInMailMerge && !GetViewFrame()->HasChildWindow(nWhich))
364*cdf0e10cSrcweir                     rSet.DisableItem(nWhich);
365*cdf0e10cSrcweir             break;
366*cdf0e10cSrcweir             case FN_MAILMERGE_SENDMAIL_CHILDWINDOW:
367*cdf0e10cSrcweir             break;
368*cdf0e10cSrcweir             case FN_MAILMERGE_CHILDWINDOW:
369*cdf0e10cSrcweir             {
370*cdf0e10cSrcweir                 if(!GetMailMergeConfigItem())
371*cdf0e10cSrcweir                     rSet.DisableItem(nWhich);
372*cdf0e10cSrcweir             }
373*cdf0e10cSrcweir             break;
374*cdf0e10cSrcweir             case SID_ALIGN_ANY_LEFT :
375*cdf0e10cSrcweir             case SID_ALIGN_ANY_HCENTER  :
376*cdf0e10cSrcweir             case SID_ALIGN_ANY_RIGHT    :
377*cdf0e10cSrcweir             case SID_ALIGN_ANY_JUSTIFIED:
378*cdf0e10cSrcweir             case SID_ALIGN_ANY_TOP      :
379*cdf0e10cSrcweir             case SID_ALIGN_ANY_VCENTER  :
380*cdf0e10cSrcweir             case SID_ALIGN_ANY_BOTTOM   :
381*cdf0e10cSrcweir             case SID_ALIGN_ANY_HDEFAULT :
382*cdf0e10cSrcweir             case SID_ALIGN_ANY_VDEFAULT :
383*cdf0e10cSrcweir             {
384*cdf0e10cSrcweir                 if( !pShell )
385*cdf0e10cSrcweir                     SelectShell();
386*cdf0e10cSrcweir                 sal_uInt16 nAlias = 0;
387*cdf0e10cSrcweir                 bool bDraw = false;
388*cdf0e10cSrcweir                 if( nSelectionType & (nsSelectionType::SEL_DRW_TXT|nsSelectionType::SEL_TXT) )
389*cdf0e10cSrcweir                 {
390*cdf0e10cSrcweir                     switch( nWhich )
391*cdf0e10cSrcweir                     {
392*cdf0e10cSrcweir                         case SID_ALIGN_ANY_LEFT :       nAlias = SID_ATTR_PARA_ADJUST_LEFT; break;
393*cdf0e10cSrcweir                         case SID_ALIGN_ANY_HCENTER  :   nAlias = SID_ATTR_PARA_ADJUST_CENTER; break;
394*cdf0e10cSrcweir                         case SID_ALIGN_ANY_RIGHT    :   nAlias = SID_ATTR_PARA_ADJUST_RIGHT; break;
395*cdf0e10cSrcweir                         case SID_ALIGN_ANY_JUSTIFIED:   nAlias = SID_ATTR_PARA_ADJUST_BLOCK; break;
396*cdf0e10cSrcweir                         case SID_ALIGN_ANY_TOP      :   nAlias = FN_TABLE_VERT_NONE; break;
397*cdf0e10cSrcweir                         case SID_ALIGN_ANY_VCENTER  :   nAlias = FN_TABLE_VERT_CENTER; break;
398*cdf0e10cSrcweir                         case SID_ALIGN_ANY_BOTTOM   :   nAlias = FN_TABLE_VERT_BOTTOM; break;
399*cdf0e10cSrcweir                     }
400*cdf0e10cSrcweir                 }
401*cdf0e10cSrcweir                 else if(nSelectionType & (nsSelectionType::SEL_DRW))
402*cdf0e10cSrcweir                 {
403*cdf0e10cSrcweir                     //the draw shell cannot provide a status per item - only one for SID_OBJECT_ALIGN
404*cdf0e10cSrcweir                     if(nWhich != SID_ALIGN_ANY_JUSTIFIED)
405*cdf0e10cSrcweir                     {
406*cdf0e10cSrcweir                         const SfxPoolItem* pItem = 0;
407*cdf0e10cSrcweir                         GetViewFrame()->GetDispatcher()->QueryState( SID_OBJECT_ALIGN, pItem );
408*cdf0e10cSrcweir                         if(pItem)
409*cdf0e10cSrcweir                             bDraw = true;
410*cdf0e10cSrcweir                     }
411*cdf0e10cSrcweir                 }
412*cdf0e10cSrcweir                 else
413*cdf0e10cSrcweir                 {
414*cdf0e10cSrcweir                     switch( nWhich )
415*cdf0e10cSrcweir                     {
416*cdf0e10cSrcweir                         case SID_ALIGN_ANY_LEFT :       nAlias = SID_OBJECT_ALIGN_LEFT    ; break;
417*cdf0e10cSrcweir                         case SID_ALIGN_ANY_HCENTER  :   nAlias = SID_OBJECT_ALIGN_CENTER ; break;
418*cdf0e10cSrcweir                         case SID_ALIGN_ANY_RIGHT    :   nAlias = SID_OBJECT_ALIGN_RIGHT  ; break;
419*cdf0e10cSrcweir                         case SID_ALIGN_ANY_TOP      :   nAlias = SID_OBJECT_ALIGN_UP     ;  break;
420*cdf0e10cSrcweir                         case SID_ALIGN_ANY_VCENTER  :   nAlias = SID_OBJECT_ALIGN_MIDDLE ;  break;
421*cdf0e10cSrcweir                         case SID_ALIGN_ANY_BOTTOM   :   nAlias = SID_OBJECT_ALIGN_DOWN    ; break;
422*cdf0e10cSrcweir                     }
423*cdf0e10cSrcweir                 }
424*cdf0e10cSrcweir                 //these slots are either re-mapped to text or object alignment
425*cdf0e10cSrcweir                 const SfxPoolItem* pState = 0;
426*cdf0e10cSrcweir                 if(nAlias)
427*cdf0e10cSrcweir                     GetViewFrame()->GetDispatcher()->QueryState( nAlias, pState );
428*cdf0e10cSrcweir                 if(pState)
429*cdf0e10cSrcweir                     rSet.Put(*pState, nWhich);
430*cdf0e10cSrcweir                 else if(!bDraw)
431*cdf0e10cSrcweir                     rSet.DisableItem(nWhich);
432*cdf0e10cSrcweir             }
433*cdf0e10cSrcweir             break;
434*cdf0e10cSrcweir         }
435*cdf0e10cSrcweir         nWhich = aIter.NextWhich();
436*cdf0e10cSrcweir 	}
437*cdf0e10cSrcweir }
438*cdf0e10cSrcweir 
439*cdf0e10cSrcweir 
440*cdf0e10cSrcweir /*--------------------------------------------------------------------
441*cdf0e10cSrcweir 	Beschreibung:
442*cdf0e10cSrcweir  --------------------------------------------------------------------*/
443*cdf0e10cSrcweir 
444*cdf0e10cSrcweir void SwView::GetDrawState(SfxItemSet &rSet)
445*cdf0e10cSrcweir {
446*cdf0e10cSrcweir 	SfxWhichIter aIter(rSet);
447*cdf0e10cSrcweir 	sal_Bool bWeb = 0 != PTR_CAST(SwWebView, this);
448*cdf0e10cSrcweir 
449*cdf0e10cSrcweir 	for( sal_uInt16 nWhich = aIter.FirstWhich(); nWhich;
450*cdf0e10cSrcweir 											nWhich = aIter.NextWhich() )
451*cdf0e10cSrcweir 		switch(nWhich)
452*cdf0e10cSrcweir 		{
453*cdf0e10cSrcweir 		case SID_INSERT_DRAW:
454*cdf0e10cSrcweir             if ( bWeb )
455*cdf0e10cSrcweir                 rSet.DisableItem( nWhich );
456*cdf0e10cSrcweir 			else
457*cdf0e10cSrcweir 			{
458*cdf0e10cSrcweir                 SfxAllEnumItem aEnum(SID_INSERT_DRAW, nDrawSfxId);
459*cdf0e10cSrcweir 				if ( !SvtLanguageOptions().IsVerticalTextEnabled() )
460*cdf0e10cSrcweir 				{
461*cdf0e10cSrcweir 					aEnum.DisableValue( SID_DRAW_CAPTION_VERTICAL );
462*cdf0e10cSrcweir 					aEnum.DisableValue( SID_DRAW_TEXT_VERTICAL );
463*cdf0e10cSrcweir 				}
464*cdf0e10cSrcweir 				rSet.Put(aEnum);
465*cdf0e10cSrcweir 			}
466*cdf0e10cSrcweir 			break;
467*cdf0e10cSrcweir 
468*cdf0e10cSrcweir 		case SID_SHOW_HIDDEN:
469*cdf0e10cSrcweir 		case SID_SHOW_FORMS:
470*cdf0e10cSrcweir 			rSet.DisableItem( nWhich );
471*cdf0e10cSrcweir 			// rSet.Put( SfxBoolItem(nWhich,sal_True ));
472*cdf0e10cSrcweir 			break;
473*cdf0e10cSrcweir 
474*cdf0e10cSrcweir 		case SID_DRAW_TEXT_MARQUEE:
475*cdf0e10cSrcweir 			if (::GetHtmlMode(GetDocShell()) & HTMLMODE_SOME_STYLES)
476*cdf0e10cSrcweir 				rSet.Put( SfxBoolItem(nWhich, nDrawSfxId == nWhich));
477*cdf0e10cSrcweir 			else
478*cdf0e10cSrcweir 				rSet.DisableItem(nWhich);
479*cdf0e10cSrcweir 			break;
480*cdf0e10cSrcweir 		case SID_OBJECT_SELECT:
481*cdf0e10cSrcweir 			rSet.Put( SfxBoolItem(nWhich, nDrawSfxId == nWhich ||
482*cdf0e10cSrcweir 										  nFormSfxId == nWhich));
483*cdf0e10cSrcweir 			break;
484*cdf0e10cSrcweir 
485*cdf0e10cSrcweir 		case SID_FONTWORK_GALLERY_FLOATER :
486*cdf0e10cSrcweir 		{
487*cdf0e10cSrcweir 			if ( bWeb )
488*cdf0e10cSrcweir 				rSet.DisableItem( nWhich );
489*cdf0e10cSrcweir 		}
490*cdf0e10cSrcweir 		break;
491*cdf0e10cSrcweir 
492*cdf0e10cSrcweir 		case SID_DRAWTBX_CS_BASIC :
493*cdf0e10cSrcweir 		case SID_DRAWTBX_CS_SYMBOL :
494*cdf0e10cSrcweir 		case SID_DRAWTBX_CS_ARROW :
495*cdf0e10cSrcweir 		case SID_DRAWTBX_CS_FLOWCHART :
496*cdf0e10cSrcweir 		case SID_DRAWTBX_CS_CALLOUT :
497*cdf0e10cSrcweir 		case SID_DRAWTBX_CS_STAR :
498*cdf0e10cSrcweir 		{
499*cdf0e10cSrcweir 			if ( bWeb )
500*cdf0e10cSrcweir 				rSet.DisableItem( nWhich );
501*cdf0e10cSrcweir 			else
502*cdf0e10cSrcweir 				rSet.Put(SfxStringItem(nWhich, aCurrShapeEnumCommand[ nWhich - SID_DRAWTBX_CS_BASIC ] ));
503*cdf0e10cSrcweir 		}
504*cdf0e10cSrcweir 		break;
505*cdf0e10cSrcweir 
506*cdf0e10cSrcweir 		}
507*cdf0e10cSrcweir }
508*cdf0e10cSrcweir 
509*cdf0e10cSrcweir /*--------------------------------------------------------------------
510*cdf0e10cSrcweir 	Beschreibung:
511*cdf0e10cSrcweir  --------------------------------------------------------------------*/
512*cdf0e10cSrcweir 
513*cdf0e10cSrcweir sal_Bool SwView::HasUIFeature( sal_uInt32 nFeature )
514*cdf0e10cSrcweir {
515*cdf0e10cSrcweir     sal_Bool bRet = sal_False;
516*cdf0e10cSrcweir     switch(nFeature)
517*cdf0e10cSrcweir     {
518*cdf0e10cSrcweir         case CHILDWIN_LABEL     : bRet = pWrtShell->IsLabelDoc(); break;
519*cdf0e10cSrcweir         case CHILDWIN_MAILMERGE : bRet = 0 != GetMailMergeConfigItem(); break;
520*cdf0e10cSrcweir     }
521*cdf0e10cSrcweir     return bRet;
522*cdf0e10cSrcweir }
523*cdf0e10cSrcweir 
524