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