1*b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*b3f79822SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*b3f79822SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*b3f79822SAndrew Rist * distributed with this work for additional information
6*b3f79822SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*b3f79822SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*b3f79822SAndrew Rist * "License"); you may not use this file except in compliance
9*b3f79822SAndrew Rist * with the License. You may obtain a copy of the License at
10*b3f79822SAndrew Rist *
11*b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*b3f79822SAndrew Rist *
13*b3f79822SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*b3f79822SAndrew Rist * software distributed under the License is distributed on an
15*b3f79822SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b3f79822SAndrew Rist * KIND, either express or implied. See the License for the
17*b3f79822SAndrew Rist * specific language governing permissions and limitations
18*b3f79822SAndrew Rist * under the License.
19*b3f79822SAndrew Rist *
20*b3f79822SAndrew Rist *************************************************************/
21*b3f79822SAndrew Rist
22*b3f79822SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir
28cdf0e10cSrcweir
29cdf0e10cSrcweir // INCLUDE ---------------------------------------------------------------
30cdf0e10cSrcweir
31cdf0e10cSrcweir #define _ZFORLIST_DECLARE_TABLE
32cdf0e10cSrcweir #include "scitems.hxx"
33cdf0e10cSrcweir #include <svl/stritem.hxx>
34cdf0e10cSrcweir #include <svl/whiter.hxx>
35cdf0e10cSrcweir #include <svl/zformat.hxx>
36cdf0e10cSrcweir #include <editeng/boxitem.hxx>
37cdf0e10cSrcweir #include <svx/numinf.hxx>
38cdf0e10cSrcweir #include <svl/srchitem.hxx>
39cdf0e10cSrcweir #include <svx/zoomslideritem.hxx>
40cdf0e10cSrcweir #include <sfx2/bindings.hxx>
41cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
42cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
43cdf0e10cSrcweir #include <sfx2/request.hxx>
44cdf0e10cSrcweir #include <vcl/msgbox.hxx>
45cdf0e10cSrcweir
46cdf0e10cSrcweir #include "global.hxx"
47cdf0e10cSrcweir #include "attrib.hxx"
48cdf0e10cSrcweir #include "patattr.hxx"
49cdf0e10cSrcweir #include "document.hxx"
50cdf0e10cSrcweir #include "cell.hxx" // Input Status Edit-Zellen
51cdf0e10cSrcweir #include "globstr.hrc"
52cdf0e10cSrcweir #include "scmod.hxx"
53cdf0e10cSrcweir #include "inputhdl.hxx"
54cdf0e10cSrcweir #include "inputwin.hxx"
55cdf0e10cSrcweir #include "docsh.hxx"
56cdf0e10cSrcweir #include "viewdata.hxx"
57cdf0e10cSrcweir //CHINA001 #include "attrdlg.hxx"
58cdf0e10cSrcweir #include "appoptio.hxx"
59cdf0e10cSrcweir #include "sc.hrc"
60cdf0e10cSrcweir #include "stlpool.hxx"
61cdf0e10cSrcweir #include "tabvwsh.hxx"
62cdf0e10cSrcweir #include "dwfunctr.hxx"
63cdf0e10cSrcweir #include "scabstdlg.hxx" //CHINA001
64cdf0e10cSrcweir #include "compiler.hxx"
65cdf0e10cSrcweir
66cdf0e10cSrcweir
GetFunction(String & rFuncStr,sal_uInt16 nErrCode)67cdf0e10cSrcweir sal_Bool ScTabViewShell::GetFunction( String& rFuncStr, sal_uInt16 nErrCode )
68cdf0e10cSrcweir {
69cdf0e10cSrcweir String aStr;
70cdf0e10cSrcweir
71cdf0e10cSrcweir ScSubTotalFunc eFunc = (ScSubTotalFunc) SC_MOD()->GetAppOptions().GetStatusFunc();
72cdf0e10cSrcweir ScViewData* pViewData = GetViewData();
73cdf0e10cSrcweir ScMarkData& rMark = pViewData->GetMarkData();
74cdf0e10cSrcweir bool bIgnoreError = (rMark.IsMarked() || rMark.IsMultiMarked());
75cdf0e10cSrcweir
76cdf0e10cSrcweir if (bIgnoreError && (eFunc == SUBTOTAL_FUNC_CNT || eFunc == SUBTOTAL_FUNC_CNT2))
77cdf0e10cSrcweir nErrCode = 0;
78cdf0e10cSrcweir
79cdf0e10cSrcweir if (nErrCode)
80cdf0e10cSrcweir {
81cdf0e10cSrcweir rFuncStr = ScGlobal::GetLongErrorString(nErrCode);
82cdf0e10cSrcweir return true;
83cdf0e10cSrcweir }
84cdf0e10cSrcweir
85cdf0e10cSrcweir sal_uInt16 nGlobStrId = 0;
86cdf0e10cSrcweir switch (eFunc)
87cdf0e10cSrcweir {
88cdf0e10cSrcweir case SUBTOTAL_FUNC_AVE: nGlobStrId = STR_FUN_TEXT_AVG; break;
89cdf0e10cSrcweir case SUBTOTAL_FUNC_CNT: nGlobStrId = STR_FUN_TEXT_COUNT; break;
90cdf0e10cSrcweir case SUBTOTAL_FUNC_CNT2: nGlobStrId = STR_FUN_TEXT_COUNT2; break;
91cdf0e10cSrcweir case SUBTOTAL_FUNC_MAX: nGlobStrId = STR_FUN_TEXT_MAX; break;
92cdf0e10cSrcweir case SUBTOTAL_FUNC_MIN: nGlobStrId = STR_FUN_TEXT_MIN; break;
93cdf0e10cSrcweir case SUBTOTAL_FUNC_SUM: nGlobStrId = STR_FUN_TEXT_SUM; break;
94cdf0e10cSrcweir default:
95cdf0e10cSrcweir {
96cdf0e10cSrcweir // added to avoid warnings
97cdf0e10cSrcweir }
98cdf0e10cSrcweir }
99cdf0e10cSrcweir if (nGlobStrId)
100cdf0e10cSrcweir {
101cdf0e10cSrcweir ScDocument* pDoc = pViewData->GetDocument();
102cdf0e10cSrcweir SCCOL nPosX = pViewData->GetCurX();
103cdf0e10cSrcweir SCROW nPosY = pViewData->GetCurY();
104cdf0e10cSrcweir SCTAB nTab = pViewData->GetTabNo();
105cdf0e10cSrcweir
106cdf0e10cSrcweir aStr = ScGlobal::GetRscString(nGlobStrId);
107cdf0e10cSrcweir aStr += '=';
108cdf0e10cSrcweir
109cdf0e10cSrcweir ScAddress aCursor( nPosX, nPosY, nTab );
110cdf0e10cSrcweir double nVal;
111cdf0e10cSrcweir if ( pDoc->GetSelectionFunction( eFunc, aCursor, rMark, nVal ) )
112cdf0e10cSrcweir {
113cdf0e10cSrcweir if ( nVal == 0.0 )
114cdf0e10cSrcweir aStr += '0';
115cdf0e10cSrcweir else
116cdf0e10cSrcweir {
117cdf0e10cSrcweir // Anzahl im Standardformat, die anderen nach Cursorposition
118cdf0e10cSrcweir SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
119cdf0e10cSrcweir sal_uInt32 nNumFmt = 0;
120cdf0e10cSrcweir if ( eFunc != SUBTOTAL_FUNC_CNT && eFunc != SUBTOTAL_FUNC_CNT2 )
121cdf0e10cSrcweir {
122cdf0e10cSrcweir // Zahlformat aus Attributen oder Formel
123cdf0e10cSrcweir pDoc->GetNumberFormat( nPosX, nPosY, nTab, nNumFmt );
124cdf0e10cSrcweir if ( (nNumFmt % SV_COUNTRY_LANGUAGE_OFFSET) == 0 )
125cdf0e10cSrcweir {
126cdf0e10cSrcweir ScBaseCell* pCell;
127cdf0e10cSrcweir pDoc->GetCell( nPosX, nPosY, nTab, pCell );
128cdf0e10cSrcweir if (pCell && pCell->GetCellType() == CELLTYPE_FORMULA)
129cdf0e10cSrcweir {
130cdf0e10cSrcweir
131cdf0e10cSrcweir nNumFmt = ((ScFormulaCell*)pCell)->GetStandardFormat(*pFormatter, nNumFmt );
132cdf0e10cSrcweir }
133cdf0e10cSrcweir }
134cdf0e10cSrcweir }
135cdf0e10cSrcweir
136cdf0e10cSrcweir String aValStr;
137cdf0e10cSrcweir Color* pDummy;
138cdf0e10cSrcweir pFormatter->GetOutputString( nVal, nNumFmt, aValStr, &pDummy );
139cdf0e10cSrcweir aStr += aValStr;
140cdf0e10cSrcweir }
141cdf0e10cSrcweir }
142cdf0e10cSrcweir
143cdf0e10cSrcweir rFuncStr = aStr;
144cdf0e10cSrcweir return sal_True;
145cdf0e10cSrcweir }
146cdf0e10cSrcweir
147cdf0e10cSrcweir return sal_False;
148cdf0e10cSrcweir }
149cdf0e10cSrcweir
150cdf0e10cSrcweir
151cdf0e10cSrcweir
152cdf0e10cSrcweir // Funktionen, die je nach Selektion disabled sind
153cdf0e10cSrcweir // Default:
154cdf0e10cSrcweir // SID_DELETE,
155cdf0e10cSrcweir // SID_DELETE_CONTENTS,
156cdf0e10cSrcweir // FID_DELETE_CELL
157cdf0e10cSrcweir // FID_VALIDATION
158cdf0e10cSrcweir
159cdf0e10cSrcweir
GetState(SfxItemSet & rSet)160cdf0e10cSrcweir void __EXPORT ScTabViewShell::GetState( SfxItemSet& rSet )
161cdf0e10cSrcweir {
162cdf0e10cSrcweir ScViewData* pViewData = GetViewData();
163cdf0e10cSrcweir ScDocument* pDoc = pViewData->GetDocument();
164cdf0e10cSrcweir ScDocShell* pDocShell = pViewData->GetDocShell();
165cdf0e10cSrcweir ScMarkData& rMark = pViewData->GetMarkData();
166cdf0e10cSrcweir SCCOL nPosX = pViewData->GetCurX();
167cdf0e10cSrcweir SCROW nPosY = pViewData->GetCurY();
168cdf0e10cSrcweir SCTAB nTab = pViewData->GetTabNo();
169cdf0e10cSrcweir sal_uInt16 nMyId = 0;
170cdf0e10cSrcweir
171cdf0e10cSrcweir SfxViewFrame* pThisFrame = GetViewFrame();
172cdf0e10cSrcweir sal_Bool bOle = GetViewFrame()->GetFrame().IsInPlace();
173cdf0e10cSrcweir
174cdf0e10cSrcweir SCTAB nTabCount = pDoc->GetTableCount();
175cdf0e10cSrcweir SCTAB nTabSelCount = rMark.GetSelectCount();
176cdf0e10cSrcweir
177cdf0e10cSrcweir SfxWhichIter aIter(rSet);
178cdf0e10cSrcweir sal_uInt16 nWhich = aIter.FirstWhich();
179cdf0e10cSrcweir
180cdf0e10cSrcweir while ( nWhich )
181cdf0e10cSrcweir {
182cdf0e10cSrcweir switch ( nWhich )
183cdf0e10cSrcweir {
184cdf0e10cSrcweir case FID_CHG_COMMENT:
185cdf0e10cSrcweir {
186cdf0e10cSrcweir ScDocShell* pDocSh = GetViewData()->GetDocShell();
187cdf0e10cSrcweir ScAddress aPos( nPosX, nPosY, nTab );
188cdf0e10cSrcweir if ( pDocSh->IsReadOnly() || !pDocSh->GetChangeAction(aPos) || pDocSh->IsDocShared() )
189cdf0e10cSrcweir rSet.DisableItem( nWhich );
190cdf0e10cSrcweir }
191cdf0e10cSrcweir break;
192cdf0e10cSrcweir
193cdf0e10cSrcweir case SID_OPENDLG_EDIT_PRINTAREA:
194cdf0e10cSrcweir case SID_ADD_PRINTAREA:
195cdf0e10cSrcweir case SID_DEFINE_PRINTAREA:
196cdf0e10cSrcweir {
197cdf0e10cSrcweir if ( pDocShell && pDocShell->IsDocShared() )
198cdf0e10cSrcweir {
199cdf0e10cSrcweir rSet.DisableItem( nWhich );
200cdf0e10cSrcweir }
201cdf0e10cSrcweir }
202cdf0e10cSrcweir break;
203cdf0e10cSrcweir
204cdf0e10cSrcweir case SID_DELETE_PRINTAREA:
205cdf0e10cSrcweir if ( nTabSelCount > 1 )
206cdf0e10cSrcweir {
207cdf0e10cSrcweir // #i22589# also take "Print Entire Sheet" into account here
208cdf0e10cSrcweir sal_Bool bHas = sal_False;
209cdf0e10cSrcweir for (SCTAB i=0; !bHas && i<nTabCount; i++)
210cdf0e10cSrcweir bHas = rMark.GetTableSelect(i) && (pDoc->GetPrintRangeCount(i) || pDoc->IsPrintEntireSheet(i));
211cdf0e10cSrcweir if (!bHas)
212cdf0e10cSrcweir rSet.DisableItem( nWhich );
213cdf0e10cSrcweir }
214cdf0e10cSrcweir else if ( !pDoc->GetPrintRangeCount( nTab ) && !pDoc->IsPrintEntireSheet( nTab ) )
215cdf0e10cSrcweir rSet.DisableItem( nWhich );
216cdf0e10cSrcweir if ( pDocShell && pDocShell->IsDocShared() )
217cdf0e10cSrcweir {
218cdf0e10cSrcweir rSet.DisableItem( nWhich );
219cdf0e10cSrcweir }
220cdf0e10cSrcweir break;
221cdf0e10cSrcweir
222cdf0e10cSrcweir case SID_STATUS_PAGESTYLE:
223cdf0e10cSrcweir case SID_HFEDIT:
224cdf0e10cSrcweir GetViewData()->GetDocShell()->GetStatePageStyle( *this, rSet, nTab );
225cdf0e10cSrcweir break;
226cdf0e10cSrcweir
227cdf0e10cSrcweir case SID_SEARCH_ITEM:
228cdf0e10cSrcweir rSet.Put( ScGlobal::GetSearchItem() );
229cdf0e10cSrcweir break;
230cdf0e10cSrcweir
231cdf0e10cSrcweir case SID_SEARCH_OPTIONS:
232cdf0e10cSrcweir {
233cdf0e10cSrcweir sal_uInt16 nOptions = 0xffff; // alles erlaubt
234cdf0e10cSrcweir // wenn ReadOnly, kein Ersetzen:
235cdf0e10cSrcweir if (GetViewData()->GetDocShell()->IsReadOnly())
236cdf0e10cSrcweir nOptions &= ~( SEARCH_OPTIONS_REPLACE | SEARCH_OPTIONS_REPLACE_ALL );
237cdf0e10cSrcweir rSet.Put( SfxUInt16Item( nWhich, nOptions ) );
238cdf0e10cSrcweir }
239cdf0e10cSrcweir break;
240cdf0e10cSrcweir
241cdf0e10cSrcweir case SID_CURRENTCELL:
242cdf0e10cSrcweir {
243cdf0e10cSrcweir ScAddress aScAddress( GetViewData()->GetCurX(), GetViewData()->GetCurY(), 0 );
244cdf0e10cSrcweir String aAddr;
245cdf0e10cSrcweir aScAddress.Format( aAddr, SCA_ABS, NULL, pDoc->GetAddressConvention() );
246cdf0e10cSrcweir SfxStringItem aPosItem( SID_CURRENTCELL, aAddr );
247cdf0e10cSrcweir
248cdf0e10cSrcweir rSet.Put( aPosItem );
249cdf0e10cSrcweir }
250cdf0e10cSrcweir break;
251cdf0e10cSrcweir
252cdf0e10cSrcweir case SID_CURRENTTAB:
253cdf0e10cSrcweir // Tabelle fuer Basic ist 1-basiert
254cdf0e10cSrcweir rSet.Put( SfxUInt16Item( nWhich, static_cast<sal_uInt16>(GetViewData()->GetTabNo()) + 1 ) );
255cdf0e10cSrcweir break;
256cdf0e10cSrcweir
257cdf0e10cSrcweir case SID_CURRENTDOC:
258cdf0e10cSrcweir rSet.Put( SfxStringItem( nWhich, GetViewData()->GetDocShell()->GetTitle() ) );
259cdf0e10cSrcweir break;
260cdf0e10cSrcweir
261cdf0e10cSrcweir case FID_TOGGLEINPUTLINE:
262cdf0e10cSrcweir {
263cdf0e10cSrcweir sal_uInt16 nId = ScInputWindowWrapper::GetChildWindowId();
264cdf0e10cSrcweir
265cdf0e10cSrcweir if ( pThisFrame->KnowsChildWindow( nId ) )
266cdf0e10cSrcweir {
267cdf0e10cSrcweir SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
268cdf0e10cSrcweir rSet.Put( SfxBoolItem( nWhich, pWnd ? sal_True : sal_False ) );
269cdf0e10cSrcweir }
270cdf0e10cSrcweir else
271cdf0e10cSrcweir rSet.DisableItem( nWhich );
272cdf0e10cSrcweir }
273cdf0e10cSrcweir break;
274cdf0e10cSrcweir
275cdf0e10cSrcweir case FID_DEL_MANUALBREAKS:
276cdf0e10cSrcweir if (!pDoc->HasManualBreaks(nTab))
277cdf0e10cSrcweir rSet.DisableItem( nWhich );
278cdf0e10cSrcweir break;
279cdf0e10cSrcweir
280cdf0e10cSrcweir case FID_RESET_PRINTZOOM:
281cdf0e10cSrcweir {
282cdf0e10cSrcweir // disablen, wenn schon Default eingestellt
283cdf0e10cSrcweir
284cdf0e10cSrcweir String aStyleName = pDoc->GetPageStyle( nTab );
285cdf0e10cSrcweir ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
286cdf0e10cSrcweir SfxStyleSheetBase* pStyleSheet = pStylePool->Find( aStyleName,
287cdf0e10cSrcweir SFX_STYLE_FAMILY_PAGE );
288cdf0e10cSrcweir DBG_ASSERT( pStyleSheet, "PageStyle not found" );
289cdf0e10cSrcweir if ( pStyleSheet )
290cdf0e10cSrcweir {
291cdf0e10cSrcweir SfxItemSet& rStyleSet = pStyleSheet->GetItemSet();
292cdf0e10cSrcweir sal_uInt16 nScale = ((const SfxUInt16Item&)
293cdf0e10cSrcweir rStyleSet.Get(ATTR_PAGE_SCALE)).GetValue();
294cdf0e10cSrcweir sal_uInt16 nPages = ((const SfxUInt16Item&)
295cdf0e10cSrcweir rStyleSet.Get(ATTR_PAGE_SCALETOPAGES)).GetValue();
296cdf0e10cSrcweir if ( nScale == 100 && nPages == 0 )
297cdf0e10cSrcweir rSet.DisableItem( nWhich );
298cdf0e10cSrcweir }
299cdf0e10cSrcweir }
300cdf0e10cSrcweir break;
301cdf0e10cSrcweir
302cdf0e10cSrcweir case FID_SCALE:
303cdf0e10cSrcweir case SID_ATTR_ZOOM:
304cdf0e10cSrcweir if ( bOle )
305cdf0e10cSrcweir rSet.DisableItem( nWhich );
306cdf0e10cSrcweir else
307cdf0e10cSrcweir {
308cdf0e10cSrcweir const Fraction& rOldY = GetViewData()->GetZoomY();
309cdf0e10cSrcweir sal_uInt16 nZoom = (sal_uInt16)(( rOldY.GetNumerator() * 100 )
310cdf0e10cSrcweir / rOldY.GetDenominator());
311cdf0e10cSrcweir rSet.Put( SvxZoomItem( SVX_ZOOM_PERCENT, nZoom, nWhich ) );
312cdf0e10cSrcweir }
313cdf0e10cSrcweir break;
314cdf0e10cSrcweir
315cdf0e10cSrcweir case SID_ATTR_ZOOMSLIDER:
316cdf0e10cSrcweir {
317cdf0e10cSrcweir if ( bOle )
318cdf0e10cSrcweir rSet.DisableItem( nWhich );
319cdf0e10cSrcweir else
320cdf0e10cSrcweir {
321cdf0e10cSrcweir const Fraction& rOldY = GetViewData()->GetZoomY();
322cdf0e10cSrcweir sal_uInt16 nCurrentZoom = (sal_uInt16)(( rOldY.GetNumerator() * 100 ) / rOldY.GetDenominator());
323cdf0e10cSrcweir
324cdf0e10cSrcweir if( nCurrentZoom )
325cdf0e10cSrcweir {
326cdf0e10cSrcweir SvxZoomSliderItem aZoomSliderItem( nCurrentZoom, MINZOOM, MAXZOOM, SID_ATTR_ZOOMSLIDER );
327cdf0e10cSrcweir aZoomSliderItem.AddSnappingPoint( 100 );
328cdf0e10cSrcweir rSet.Put( aZoomSliderItem );
329cdf0e10cSrcweir }
330cdf0e10cSrcweir }
331cdf0e10cSrcweir }
332cdf0e10cSrcweir break;
333cdf0e10cSrcweir
334cdf0e10cSrcweir case FID_TOGGLESYNTAX:
335cdf0e10cSrcweir rSet.Put(SfxBoolItem(nWhich, GetViewData()->IsSyntaxMode()));
336cdf0e10cSrcweir break;
337cdf0e10cSrcweir
338cdf0e10cSrcweir case FID_TOGGLEHEADERS:
339cdf0e10cSrcweir rSet.Put(SfxBoolItem(nWhich, GetViewData()->IsHeaderMode()));
340cdf0e10cSrcweir break;
341cdf0e10cSrcweir
342cdf0e10cSrcweir case FID_TOGGLEFORMULA:
343cdf0e10cSrcweir {
344cdf0e10cSrcweir const ScViewOptions& rOpts = pViewData->GetOptions();
345cdf0e10cSrcweir sal_Bool bFormulaMode = rOpts.GetOption( VOPT_FORMULAS );
346cdf0e10cSrcweir rSet.Put(SfxBoolItem(nWhich, bFormulaMode ));
347cdf0e10cSrcweir }
348cdf0e10cSrcweir break;
349cdf0e10cSrcweir
350cdf0e10cSrcweir case FID_NORMALVIEWMODE:
351cdf0e10cSrcweir case FID_PAGEBREAKMODE:
352cdf0e10cSrcweir // always handle both slots - they exclude each other
353cdf0e10cSrcweir if ( bOle )
354cdf0e10cSrcweir {
355cdf0e10cSrcweir rSet.DisableItem( FID_NORMALVIEWMODE );
356cdf0e10cSrcweir rSet.DisableItem( FID_PAGEBREAKMODE );
357cdf0e10cSrcweir }
358cdf0e10cSrcweir else
359cdf0e10cSrcweir {
360cdf0e10cSrcweir rSet.Put(SfxBoolItem(FID_NORMALVIEWMODE, !GetViewData()->IsPagebreakMode()));
361cdf0e10cSrcweir rSet.Put(SfxBoolItem(FID_PAGEBREAKMODE, GetViewData()->IsPagebreakMode()));
362cdf0e10cSrcweir }
363cdf0e10cSrcweir break;
364cdf0e10cSrcweir
365cdf0e10cSrcweir case FID_FUNCTION_BOX:
366cdf0e10cSrcweir nMyId = ScFunctionChildWindow::GetChildWindowId();
367cdf0e10cSrcweir rSet.Put(SfxBoolItem(FID_FUNCTION_BOX, pThisFrame->HasChildWindow(nMyId)));
368cdf0e10cSrcweir break;
369cdf0e10cSrcweir
370cdf0e10cSrcweir case FID_PROTECT_DOC:
371cdf0e10cSrcweir {
372cdf0e10cSrcweir if ( pDocShell && pDocShell->IsDocShared() )
373cdf0e10cSrcweir {
374cdf0e10cSrcweir rSet.DisableItem( nWhich );
375cdf0e10cSrcweir }
376cdf0e10cSrcweir else
377cdf0e10cSrcweir {
378cdf0e10cSrcweir rSet.Put( SfxBoolItem( nWhich, pDoc->IsDocProtected() ) );
379cdf0e10cSrcweir }
380cdf0e10cSrcweir }
381cdf0e10cSrcweir break;
382cdf0e10cSrcweir
383cdf0e10cSrcweir case FID_PROTECT_TABLE:
384cdf0e10cSrcweir {
385cdf0e10cSrcweir if ( pDocShell && pDocShell->IsDocShared() )
386cdf0e10cSrcweir {
387cdf0e10cSrcweir rSet.DisableItem( nWhich );
388cdf0e10cSrcweir }
389cdf0e10cSrcweir else
390cdf0e10cSrcweir {
391cdf0e10cSrcweir rSet.Put( SfxBoolItem( nWhich, pDoc->IsTabProtected( nTab ) ) );
392cdf0e10cSrcweir }
393cdf0e10cSrcweir }
394cdf0e10cSrcweir break;
395cdf0e10cSrcweir
396cdf0e10cSrcweir case SID_AUTO_OUTLINE:
397cdf0e10cSrcweir {
398cdf0e10cSrcweir if (pDoc->GetChangeTrack()!=NULL || GetViewData()->IsMultiMarked())
399cdf0e10cSrcweir {
400cdf0e10cSrcweir rSet.DisableItem( nWhich );
401cdf0e10cSrcweir }
402cdf0e10cSrcweir }
403cdf0e10cSrcweir break;
404cdf0e10cSrcweir
405cdf0e10cSrcweir case SID_OUTLINE_DELETEALL:
406cdf0e10cSrcweir {
407cdf0e10cSrcweir SCTAB nOlTab = GetViewData()->GetTabNo();
408cdf0e10cSrcweir ScOutlineTable* pOlTable = pDoc->GetOutlineTable( nOlTab );
409cdf0e10cSrcweir if (pOlTable == NULL)
410cdf0e10cSrcweir rSet.DisableItem( nWhich );
411cdf0e10cSrcweir }
412cdf0e10cSrcweir break;
413cdf0e10cSrcweir
414cdf0e10cSrcweir case SID_WINDOW_SPLIT:
415cdf0e10cSrcweir rSet.Put(SfxBoolItem(nWhich,
416cdf0e10cSrcweir pViewData->GetHSplitMode() == SC_SPLIT_NORMAL ||
417cdf0e10cSrcweir pViewData->GetVSplitMode() == SC_SPLIT_NORMAL ));
418cdf0e10cSrcweir break;
419cdf0e10cSrcweir
420cdf0e10cSrcweir case SID_WINDOW_FIX:
421cdf0e10cSrcweir rSet.Put(SfxBoolItem(nWhich,
422cdf0e10cSrcweir pViewData->GetHSplitMode() == SC_SPLIT_FIX ||
423cdf0e10cSrcweir pViewData->GetVSplitMode() == SC_SPLIT_FIX ));
424cdf0e10cSrcweir break;
425cdf0e10cSrcweir
426cdf0e10cSrcweir case FID_CHG_SHOW:
427cdf0e10cSrcweir {
428cdf0e10cSrcweir if ( pDoc->GetChangeTrack() == NULL || ( pDocShell && pDocShell->IsDocShared() ) )
429cdf0e10cSrcweir rSet.DisableItem( nWhich );
430cdf0e10cSrcweir }
431cdf0e10cSrcweir break;
432cdf0e10cSrcweir case FID_CHG_ACCEPT:
433cdf0e10cSrcweir {
434cdf0e10cSrcweir rSet.Put(SfxBoolItem(FID_CHG_ACCEPT,
435cdf0e10cSrcweir pThisFrame->HasChildWindow(FID_CHG_ACCEPT)));
436cdf0e10cSrcweir if(pDoc->GetChangeTrack()==NULL)
437cdf0e10cSrcweir {
438cdf0e10cSrcweir if ( !pThisFrame->HasChildWindow(FID_CHG_ACCEPT) )
439cdf0e10cSrcweir {
440cdf0e10cSrcweir rSet.DisableItem( nWhich);
441cdf0e10cSrcweir }
442cdf0e10cSrcweir }
443cdf0e10cSrcweir if ( pDocShell && pDocShell->IsDocShared() )
444cdf0e10cSrcweir {
445cdf0e10cSrcweir rSet.DisableItem( nWhich );
446cdf0e10cSrcweir }
447cdf0e10cSrcweir }
448cdf0e10cSrcweir break;
449cdf0e10cSrcweir
450cdf0e10cSrcweir case SID_FORMATPAGE:
451cdf0e10cSrcweir //! bei geschuetzten Tabellen ???
452cdf0e10cSrcweir if ( pDocShell && ( pDocShell->IsReadOnly() || pDocShell->IsDocShared() ) )
453cdf0e10cSrcweir rSet.DisableItem( nWhich );
454cdf0e10cSrcweir break;
455cdf0e10cSrcweir
456cdf0e10cSrcweir case SID_PRINTPREVIEW:
457cdf0e10cSrcweir // #58924# Toggle-Slot braucht einen State
458cdf0e10cSrcweir rSet.Put( SfxBoolItem( nWhich, sal_False ) );
459cdf0e10cSrcweir break;
460cdf0e10cSrcweir
461cdf0e10cSrcweir case SID_READONLY_MODE:
462cdf0e10cSrcweir rSet.Put( SfxBoolItem( nWhich, GetViewData()->GetDocShell()->IsReadOnly() ) );
463cdf0e10cSrcweir break;
464cdf0e10cSrcweir
465cdf0e10cSrcweir case FID_TAB_DESELECTALL:
466cdf0e10cSrcweir if ( nTabSelCount == 1 )
467cdf0e10cSrcweir rSet.DisableItem( nWhich ); // enabled only if several sheets are selected
468cdf0e10cSrcweir break;
469cdf0e10cSrcweir
470cdf0e10cSrcweir } // switch ( nWitch )
471cdf0e10cSrcweir nWhich = aIter.NextWhich();
472cdf0e10cSrcweir } // while ( nWitch )
473cdf0e10cSrcweir }
474cdf0e10cSrcweir
475cdf0e10cSrcweir //------------------------------------------------------------------
ExecuteCellFormatDlg(SfxRequest & rReq,sal_uInt16 nTabPage)476cdf0e10cSrcweir void ScTabViewShell::ExecuteCellFormatDlg( SfxRequest& rReq, sal_uInt16 nTabPage )
477cdf0e10cSrcweir {
478cdf0e10cSrcweir //CHINA001 ScAttrDlg* pDlg = NULL;
479cdf0e10cSrcweir SfxAbstractTabDialog * pDlg = NULL; //CHINA001
480cdf0e10cSrcweir ScDocument* pDoc = GetViewData()->GetDocument();
481cdf0e10cSrcweir
482cdf0e10cSrcweir SvxBoxItem aLineOuter( ATTR_BORDER );
483cdf0e10cSrcweir SvxBoxInfoItem aLineInner( ATTR_BORDER_INNER );
484cdf0e10cSrcweir
485cdf0e10cSrcweir SvxNumberInfoItem* pNumberInfoItem = NULL;
486cdf0e10cSrcweir const ScPatternAttr* pOldAttrs = GetSelectionPattern();
487cdf0e10cSrcweir SfxItemSet* pOldSet = new SfxItemSet(
488cdf0e10cSrcweir pOldAttrs->GetItemSet() );
489cdf0e10cSrcweir
490cdf0e10cSrcweir
491cdf0e10cSrcweir // Umrandungs-Items holen und in den Set packen:
492cdf0e10cSrcweir GetSelectionFrame( aLineOuter, aLineInner );
493cdf0e10cSrcweir pOldSet->Put( aLineOuter );
494cdf0e10cSrcweir pOldSet->Put( aLineInner );
495cdf0e10cSrcweir
496cdf0e10cSrcweir // NumberFormat Value aus Value und Language erzeugen und eintueten
497cdf0e10cSrcweir pOldSet->Put( SfxUInt32Item( ATTR_VALUE_FORMAT,
498cdf0e10cSrcweir pOldAttrs->GetNumberFormat( pDoc->GetFormatTable() ) ) );
499cdf0e10cSrcweir
500cdf0e10cSrcweir MakeNumberInfoItem( pDoc, GetViewData(), &pNumberInfoItem );
501cdf0e10cSrcweir
502cdf0e10cSrcweir pOldSet->MergeRange( SID_ATTR_NUMBERFORMAT_INFO, SID_ATTR_NUMBERFORMAT_INFO );
503cdf0e10cSrcweir pOldSet->Put(*pNumberInfoItem );
504cdf0e10cSrcweir
505cdf0e10cSrcweir bInFormatDialog = sal_True;
506cdf0e10cSrcweir //CHINA001 pDlg = new ScAttrDlg( GetViewFrame(), GetDialogParent(), pOldSet );
507cdf0e10cSrcweir ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
508cdf0e10cSrcweir DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
509cdf0e10cSrcweir
510cdf0e10cSrcweir pDlg = pFact->CreateScAttrDlg( GetViewFrame(), GetDialogParent(), pOldSet, RID_SCDLG_ATTR);
511cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
512cdf0e10cSrcweir if ( nTabPage != 0xffff )
513cdf0e10cSrcweir pDlg->SetCurPageId( nTabPage );
514cdf0e10cSrcweir short nResult = pDlg->Execute();
515cdf0e10cSrcweir bInFormatDialog = sal_False;
516cdf0e10cSrcweir
517cdf0e10cSrcweir if ( nResult == RET_OK )
518cdf0e10cSrcweir {
519cdf0e10cSrcweir const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
520cdf0e10cSrcweir
521cdf0e10cSrcweir const SfxPoolItem* pItem=NULL;
522cdf0e10cSrcweir if(pOutSet->GetItemState(SID_ATTR_NUMBERFORMAT_INFO,sal_True,&pItem)==SFX_ITEM_SET)
523cdf0e10cSrcweir {
524cdf0e10cSrcweir
525cdf0e10cSrcweir UpdateNumberFormatter( pDoc,(const SvxNumberInfoItem&)*pItem);
526cdf0e10cSrcweir }
527cdf0e10cSrcweir
528cdf0e10cSrcweir ApplyAttributes( pOutSet, pOldSet );
529cdf0e10cSrcweir
530cdf0e10cSrcweir rReq.Done( *pOutSet );
531cdf0e10cSrcweir }
532cdf0e10cSrcweir delete pOldSet;
533cdf0e10cSrcweir delete pNumberInfoItem;
534cdf0e10cSrcweir delete pDlg;
535cdf0e10cSrcweir }
536cdf0e10cSrcweir
537cdf0e10cSrcweir //------------------------------------------------------------------
538cdf0e10cSrcweir
IsRefInputMode() const539cdf0e10cSrcweir bool ScTabViewShell::IsRefInputMode() const
540cdf0e10cSrcweir {
541cdf0e10cSrcweir ScModule* pScMod = SC_MOD();
542cdf0e10cSrcweir if ( pScMod )
543cdf0e10cSrcweir {
544cdf0e10cSrcweir if( pScMod->IsRefDialogOpen() )
545cdf0e10cSrcweir return pScMod->IsFormulaMode();
546cdf0e10cSrcweir if( pScMod->IsFormulaMode() )
547cdf0e10cSrcweir {
548cdf0e10cSrcweir ScInputHandler* pHdl = pScMod->GetInputHdl();
549cdf0e10cSrcweir if ( pHdl )
550cdf0e10cSrcweir {
551cdf0e10cSrcweir String aString = pHdl->GetEditString();
552cdf0e10cSrcweir if ( !pHdl->GetSelIsRef() && aString.Len() > 1 &&
553cdf0e10cSrcweir ( aString.GetChar(0) == '+' || aString.GetChar(0) == '-' ) )
554cdf0e10cSrcweir {
555cdf0e10cSrcweir const ScViewData* pViewData = GetViewData();
556cdf0e10cSrcweir if ( pViewData )
557cdf0e10cSrcweir {
558cdf0e10cSrcweir ScDocument* pDoc = pViewData->GetDocument();
559cdf0e10cSrcweir if ( pDoc )
560cdf0e10cSrcweir {
561cdf0e10cSrcweir const ScAddress aPos( pViewData->GetCurPos() );
562cdf0e10cSrcweir ScCompiler aComp( pDoc, aPos );
563cdf0e10cSrcweir aComp.SetGrammar(pDoc->GetGrammar());
564cdf0e10cSrcweir aComp.SetCloseBrackets( false );
565cdf0e10cSrcweir ScTokenArray* pArr = aComp.CompileString( aString );
566cdf0e10cSrcweir if ( pArr && pArr->MayReferenceFollow() )
567cdf0e10cSrcweir {
568cdf0e10cSrcweir return true;
569cdf0e10cSrcweir }
570cdf0e10cSrcweir }
571cdf0e10cSrcweir }
572cdf0e10cSrcweir }
573cdf0e10cSrcweir else
574cdf0e10cSrcweir {
575cdf0e10cSrcweir return true;
576cdf0e10cSrcweir }
577cdf0e10cSrcweir }
578cdf0e10cSrcweir }
579cdf0e10cSrcweir }
580cdf0e10cSrcweir
581cdf0e10cSrcweir return false;
582cdf0e10cSrcweir }
583cdf0e10cSrcweir
584cdf0e10cSrcweir //------------------------------------------------------------------
585cdf0e10cSrcweir
ExecuteInputDirect()586cdf0e10cSrcweir void ScTabViewShell::ExecuteInputDirect()
587cdf0e10cSrcweir {
588cdf0e10cSrcweir if ( !IsRefInputMode() )
589cdf0e10cSrcweir {
590cdf0e10cSrcweir ScModule* pScMod = SC_MOD();
591cdf0e10cSrcweir if ( pScMod )
592cdf0e10cSrcweir {
593cdf0e10cSrcweir pScMod->InputEnterHandler();
594cdf0e10cSrcweir }
595cdf0e10cSrcweir }
596cdf0e10cSrcweir }
597cdf0e10cSrcweir
598cdf0e10cSrcweir //------------------------------------------------------------------
599cdf0e10cSrcweir
UpdateInputHandler(sal_Bool bForce,sal_Bool bStopEditing)600cdf0e10cSrcweir void ScTabViewShell::UpdateInputHandler( sal_Bool bForce /* = sal_False */, sal_Bool bStopEditing /* = sal_True */ )
601cdf0e10cSrcweir {
602cdf0e10cSrcweir ScInputHandler* pHdl = pInputHandler ? pInputHandler : SC_MOD()->GetInputHdl();
603cdf0e10cSrcweir
604cdf0e10cSrcweir if ( pHdl )
605cdf0e10cSrcweir {
606cdf0e10cSrcweir String aString;
607cdf0e10cSrcweir const EditTextObject* pObject = NULL;
608cdf0e10cSrcweir ScViewData* pViewData = GetViewData();
609cdf0e10cSrcweir ScDocument* pDoc = pViewData->GetDocument();
610cdf0e10cSrcweir CellType eType;
611cdf0e10cSrcweir SCCOL nPosX = pViewData->GetCurX();
612cdf0e10cSrcweir SCROW nPosY = pViewData->GetCurY();
613cdf0e10cSrcweir SCTAB nTab = pViewData->GetTabNo();
614cdf0e10cSrcweir SCTAB nStartTab = 0;
615cdf0e10cSrcweir SCTAB nEndTab = 0;
616cdf0e10cSrcweir SCCOL nStartCol = 0;
617cdf0e10cSrcweir SCROW nStartRow = 0;
618cdf0e10cSrcweir SCCOL nEndCol = 0;
619cdf0e10cSrcweir SCROW nEndRow = 0;
620cdf0e10cSrcweir
621cdf0e10cSrcweir pViewData->GetSimpleArea( nStartCol, nStartRow, nStartTab,
622cdf0e10cSrcweir nEndCol, nEndRow, nEndTab );
623cdf0e10cSrcweir
624cdf0e10cSrcweir PutInOrder( nStartCol, nEndCol );
625cdf0e10cSrcweir PutInOrder( nStartRow, nEndRow );
626cdf0e10cSrcweir PutInOrder( nStartTab, nEndTab );
627cdf0e10cSrcweir
628cdf0e10cSrcweir sal_Bool bHideFormula = sal_False;
629cdf0e10cSrcweir sal_Bool bHideAll = sal_False;
630cdf0e10cSrcweir
631cdf0e10cSrcweir if (pDoc->IsTabProtected(nTab))
632cdf0e10cSrcweir {
633cdf0e10cSrcweir const ScProtectionAttr* pProt = (const ScProtectionAttr*)
634cdf0e10cSrcweir pDoc->GetAttr( nPosX,nPosY,nTab,
635cdf0e10cSrcweir ATTR_PROTECTION);
636cdf0e10cSrcweir bHideFormula = pProt->GetHideFormula();
637cdf0e10cSrcweir bHideAll = pProt->GetHideCell();
638cdf0e10cSrcweir }
639cdf0e10cSrcweir
640cdf0e10cSrcweir if (!bHideAll)
641cdf0e10cSrcweir {
642cdf0e10cSrcweir pDoc->GetCellType( nPosX, nPosY, nTab, eType );
643cdf0e10cSrcweir if (eType == CELLTYPE_FORMULA)
644cdf0e10cSrcweir {
645cdf0e10cSrcweir if (!bHideFormula)
646cdf0e10cSrcweir pDoc->GetFormula( nPosX, nPosY, nTab, aString );
647cdf0e10cSrcweir }
648cdf0e10cSrcweir else if (eType == CELLTYPE_EDIT)
649cdf0e10cSrcweir {
650cdf0e10cSrcweir ScBaseCell* pCell;
651cdf0e10cSrcweir pDoc->GetCell( nPosX, nPosY, nTab, pCell );
652cdf0e10cSrcweir ((ScEditCell*)pCell)->GetData( pObject );
653cdf0e10cSrcweir }
654cdf0e10cSrcweir else
655cdf0e10cSrcweir {
656cdf0e10cSrcweir pDoc->GetInputString( nPosX, nPosY, nTab, aString );
657cdf0e10cSrcweir if (eType == CELLTYPE_STRING)
658cdf0e10cSrcweir {
659cdf0e10cSrcweir // Bei Bedarf ein ' vorneweg, damit der String nicht ungewollt
660cdf0e10cSrcweir // als Zahl interpretiert wird, und um dem Benutzer zu zeigen,
661cdf0e10cSrcweir // dass es ein String ist (#35060#).
662cdf0e10cSrcweir //! Auch bei Zahlformat "Text"? -> dann beim Editieren wegnehmen
663cdf0e10cSrcweir
664cdf0e10cSrcweir SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
665cdf0e10cSrcweir sal_uInt32 nNumFmt;
666cdf0e10cSrcweir pDoc->GetNumberFormat( nPosX, nPosY, nTab, nNumFmt );
667cdf0e10cSrcweir double fDummy;
668cdf0e10cSrcweir if ( pFormatter->IsNumberFormat(aString, nNumFmt, fDummy) )
669cdf0e10cSrcweir aString.Insert('\'',0);
670cdf0e10cSrcweir }
671cdf0e10cSrcweir }
672cdf0e10cSrcweir }
673cdf0e10cSrcweir
674cdf0e10cSrcweir ScInputHdlState aState( ScAddress( nPosX, nPosY, nTab ),
675cdf0e10cSrcweir ScAddress( nStartCol, nStartRow, nTab ),
676cdf0e10cSrcweir ScAddress( nEndCol, nEndRow, nTab ),
677cdf0e10cSrcweir aString,
678cdf0e10cSrcweir pObject );
679cdf0e10cSrcweir
680cdf0e10cSrcweir // if using the view's local input handler, this view can always be set
681cdf0e10cSrcweir // as current view inside NotifyChange.
682cdf0e10cSrcweir ScTabViewShell* pSourceSh = pInputHandler ? this : NULL;
683cdf0e10cSrcweir
684cdf0e10cSrcweir pHdl->NotifyChange( &aState, bForce, pSourceSh, bStopEditing );
685cdf0e10cSrcweir }
686cdf0e10cSrcweir
687cdf0e10cSrcweir SfxBindings& rBindings = GetViewFrame()->GetBindings();
688cdf0e10cSrcweir rBindings.Invalidate( SID_STATUS_SUM ); // immer zusammen mit Eingabezeile
689cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_SIZE );
690cdf0e10cSrcweir rBindings.Invalidate( SID_TABLE_CELL );
691cdf0e10cSrcweir }
692cdf0e10cSrcweir
UpdateInputHandlerCellAdjust(SvxCellHorJustify eJust)693cdf0e10cSrcweir void ScTabViewShell::UpdateInputHandlerCellAdjust( SvxCellHorJustify eJust )
694cdf0e10cSrcweir {
695cdf0e10cSrcweir if( ScInputHandler* pHdl = pInputHandler ? pInputHandler : SC_MOD()->GetInputHdl() )
696cdf0e10cSrcweir pHdl->UpdateCellAdjust( eJust );
697cdf0e10cSrcweir }
698cdf0e10cSrcweir
699cdf0e10cSrcweir //------------------------------------------------------------------
700cdf0e10cSrcweir
ExecuteSave(SfxRequest & rReq)701cdf0e10cSrcweir void __EXPORT ScTabViewShell::ExecuteSave( SfxRequest& rReq )
702cdf0e10cSrcweir {
703cdf0e10cSrcweir // nur SID_SAVEDOC / SID_SAVEASDOC
704cdf0e10cSrcweir
705cdf0e10cSrcweir // Eingabe auf jeden Fall abschliessen, auch wenn eine Formel bearbeitet wird
706cdf0e10cSrcweir SC_MOD()->InputEnterHandler();
707cdf0e10cSrcweir
708cdf0e10cSrcweir if ( GetViewData()->GetDocShell()->IsDocShared() )
709cdf0e10cSrcweir {
710cdf0e10cSrcweir GetViewData()->GetDocShell()->SetDocumentModified();
711cdf0e10cSrcweir }
712cdf0e10cSrcweir
713cdf0e10cSrcweir // ansonsten normal weiter
714cdf0e10cSrcweir GetViewData()->GetDocShell()->ExecuteSlot( rReq );
715cdf0e10cSrcweir }
716cdf0e10cSrcweir
GetSaveState(SfxItemSet & rSet)717cdf0e10cSrcweir void __EXPORT ScTabViewShell::GetSaveState( SfxItemSet& rSet )
718cdf0e10cSrcweir {
719cdf0e10cSrcweir SfxShell* pDocSh = GetViewData()->GetDocShell();
720cdf0e10cSrcweir
721cdf0e10cSrcweir SfxWhichIter aIter(rSet);
722cdf0e10cSrcweir sal_uInt16 nWhich = aIter.FirstWhich();
723cdf0e10cSrcweir while( nWhich )
724cdf0e10cSrcweir {
725cdf0e10cSrcweir if ( nWhich != SID_SAVEDOC || !GetViewData()->GetDocShell()->IsDocShared() )
726cdf0e10cSrcweir {
727cdf0e10cSrcweir // get state from DocShell
728cdf0e10cSrcweir pDocSh->GetSlotState( nWhich, NULL, &rSet );
729cdf0e10cSrcweir }
730cdf0e10cSrcweir nWhich = aIter.NextWhich();
731cdf0e10cSrcweir }
732cdf0e10cSrcweir }
733cdf0e10cSrcweir
734cdf0e10cSrcweir //------------------------------------------------------------------
735cdf0e10cSrcweir
ExecDrawOpt(SfxRequest & rReq)736cdf0e10cSrcweir void ScTabViewShell::ExecDrawOpt( SfxRequest& rReq )
737cdf0e10cSrcweir {
738cdf0e10cSrcweir ScViewOptions aViewOptions = GetViewData()->GetOptions();
739cdf0e10cSrcweir ScGridOptions aGridOptions = aViewOptions.GetGridOptions();
740cdf0e10cSrcweir
741cdf0e10cSrcweir SfxBindings& rBindings = GetViewFrame()->GetBindings();
742cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs();
743cdf0e10cSrcweir const SfxPoolItem* pItem;
744cdf0e10cSrcweir sal_uInt16 nSlotId = rReq.GetSlot();
745cdf0e10cSrcweir switch (nSlotId)
746cdf0e10cSrcweir {
747cdf0e10cSrcweir case SID_GRID_VISIBLE:
748cdf0e10cSrcweir if ( pArgs && pArgs->GetItemState(nSlotId,sal_True,&pItem) == SFX_ITEM_SET )
749cdf0e10cSrcweir {
750cdf0e10cSrcweir aGridOptions.SetGridVisible( ((const SfxBoolItem*)pItem)->GetValue() );
751cdf0e10cSrcweir aViewOptions.SetGridOptions(aGridOptions);
752cdf0e10cSrcweir rBindings.Invalidate(SID_GRID_VISIBLE);
753cdf0e10cSrcweir }
754cdf0e10cSrcweir break;
755cdf0e10cSrcweir
756cdf0e10cSrcweir case SID_GRID_USE:
757cdf0e10cSrcweir if ( pArgs && pArgs->GetItemState(nSlotId,sal_True,&pItem) == SFX_ITEM_SET )
758cdf0e10cSrcweir {
759cdf0e10cSrcweir aGridOptions.SetUseGridSnap( ((const SfxBoolItem*)pItem)->GetValue() );
760cdf0e10cSrcweir aViewOptions.SetGridOptions(aGridOptions);
761cdf0e10cSrcweir rBindings.Invalidate(SID_GRID_USE);
762cdf0e10cSrcweir }
763cdf0e10cSrcweir break;
764cdf0e10cSrcweir
765cdf0e10cSrcweir case SID_HELPLINES_MOVE:
766cdf0e10cSrcweir if ( pArgs && pArgs->GetItemState(nSlotId,sal_True,&pItem) == SFX_ITEM_SET )
767cdf0e10cSrcweir {
768cdf0e10cSrcweir aViewOptions.SetOption( VOPT_HELPLINES, ((const SfxBoolItem*)pItem)->GetValue() );
769cdf0e10cSrcweir rBindings.Invalidate(SID_HELPLINES_MOVE);
770cdf0e10cSrcweir }
771cdf0e10cSrcweir break;
772cdf0e10cSrcweir }
773cdf0e10cSrcweir
774cdf0e10cSrcweir GetViewData()->SetOptions(aViewOptions);
775cdf0e10cSrcweir }
776cdf0e10cSrcweir
GetDrawOptState(SfxItemSet & rSet)777cdf0e10cSrcweir void ScTabViewShell::GetDrawOptState( SfxItemSet& rSet )
778cdf0e10cSrcweir {
779cdf0e10cSrcweir SfxBoolItem aBool;
780cdf0e10cSrcweir
781cdf0e10cSrcweir const ScViewOptions& rViewOptions = GetViewData()->GetOptions();
782cdf0e10cSrcweir const ScGridOptions& rGridOptions = rViewOptions.GetGridOptions();
783cdf0e10cSrcweir
784cdf0e10cSrcweir aBool.SetValue(rGridOptions.GetGridVisible());
785cdf0e10cSrcweir aBool.SetWhich( SID_GRID_VISIBLE );
786cdf0e10cSrcweir rSet.Put( aBool );
787cdf0e10cSrcweir
788cdf0e10cSrcweir aBool.SetValue(rGridOptions.GetUseGridSnap());
789cdf0e10cSrcweir aBool.SetWhich( SID_GRID_USE );
790cdf0e10cSrcweir rSet.Put( aBool );
791cdf0e10cSrcweir
792cdf0e10cSrcweir aBool.SetValue(rViewOptions.GetOption( VOPT_HELPLINES ));
793cdf0e10cSrcweir aBool.SetWhich( SID_HELPLINES_MOVE );
794cdf0e10cSrcweir rSet.Put( aBool );
795cdf0e10cSrcweir }
796cdf0e10cSrcweir
797cdf0e10cSrcweir
798cdf0e10cSrcweir
799cdf0e10cSrcweir
800