Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <rangelst.hxx>
30 : : #include <sfx2/app.hxx>
31 : : #include <sfx2/bindings.hxx>
32 : : #include <sfx2/dispatch.hxx>
33 : : #include <sfx2/event.hxx>
34 : : #include <sfx2/imgmgr.hxx>
35 : : #include <sfx2/navigat.hxx>
36 : : #include <svl/stritem.hxx>
37 : : #include <svl/urlbmk.hxx>
38 : : #include <unotools/charclass.hxx>
39 : : #include <stdlib.h>
40 : :
41 : : #include "viewdata.hxx"
42 : : #include "tabvwsh.hxx"
43 : : #include "docsh.hxx"
44 : : #include "document.hxx"
45 : : #include "dbdata.hxx"
46 : : #include "rangenam.hxx"
47 : : #include "rangeutl.hxx"
48 : : #include "popmenu.hxx"
49 : : #include "scresid.hxx"
50 : : #include "scmod.hxx"
51 : : #include "navicfg.hxx"
52 : : #include "navcitem.hxx"
53 : : #include "navipi.hrc"
54 : : #include "navipi.hxx"
55 : : #include "navsett.hxx"
56 : : #include "markdata.hxx"
57 : :
58 : : // Timeout, um Notizen zu suchen
59 : : #define SC_CONTENT_TIMEOUT 1000
60 : :
61 : : // Toleranz, wieviel ueber der eingeklappten Groesse noch klein ist
62 : : #define SCNAV_MINTOL 5
63 : :
64 : : // maximum values for UI
65 : : #define SCNAV_MAXCOL (MAXCOLCOUNT)
66 : : // macro is sufficient since only used in ctor
67 : : #define SCNAV_COLDIGITS (static_cast<xub_StrLen>( floor( log10( static_cast<double>(SCNAV_MAXCOL)))) + 1) // 1...256...18278
68 : : // precomputed constant because it is used in every change of spin button field
69 : 51 : static const xub_StrLen SCNAV_COLLETTERS = ::ScColToAlpha(SCNAV_MAXCOL).Len(); // A...IV...ZZZ
70 : :
71 : : #define SCNAV_MAXROW (MAXROWCOUNT)
72 : :
73 : : //------------------------------------------------------------------------
74 : :
75 : 0 : void ScNavigatorDlg::ReleaseFocus()
76 : : {
77 : 0 : SfxViewShell* pCurSh = SfxViewShell::Current();
78 : :
79 [ # # ]: 0 : if ( pCurSh )
80 : : {
81 : 0 : Window* pShellWnd = pCurSh->GetWindow();
82 [ # # ]: 0 : if ( pShellWnd )
83 : 0 : pShellWnd->GrabFocus();
84 : : }
85 : 0 : }
86 : :
87 : : //==================================================================
88 : : // class ColumnEdit
89 : : //==================================================================
90 : :
91 : 0 : ColumnEdit::ColumnEdit( ScNavigatorDlg* pParent, const ResId& rResId )
92 : : : SpinField ( pParent, rResId ),
93 : : rDlg ( *pParent ),
94 : : nCol ( 0 ),
95 : 0 : nKeyGroup ( KEYGROUP_ALPHA )
96 : : {
97 [ # # ]: 0 : SetMaxTextLen( SCNAV_COLDIGITS ); // 1...256...18278 or A...IV...ZZZ
98 : 0 : }
99 : :
100 : : //------------------------------------------------------------------------
101 : :
102 : 0 : ColumnEdit::~ColumnEdit()
103 : : {
104 [ # # ]: 0 : }
105 : :
106 : : //------------------------------------------------------------------------
107 : :
108 : 0 : long ColumnEdit::Notify( NotifyEvent& rNEvt )
109 : : {
110 : 0 : long nHandled = SpinField::Notify( rNEvt );
111 : :
112 : 0 : sal_uInt16 nType = rNEvt.GetType();
113 [ # # ]: 0 : if ( nType == EVENT_KEYINPUT )
114 : : {
115 [ # # ]: 0 : const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
116 : 0 : KeyCode aCode = pKEvt->GetKeyCode();
117 : :
118 [ # # ][ # # ]: 0 : if ( !aCode.IsMod1() && !aCode.IsMod2() )
[ # # ]
119 : : {
120 : : //! Eingabeueberpruefung (nur Zahlen oder nur Buchstaben, max 2 bzw 3 Stellen)
121 : : //! war vor VCL per nicht weitergeleitetem KeyInput
122 : : //! dafuer was neues ausdenken!!!
123 : :
124 [ # # ]: 0 : if ( aCode.GetCode() == KEY_RETURN )
125 : : {
126 [ # # ]: 0 : ScNavigatorDlg::ReleaseFocus();
127 [ # # ]: 0 : ExecuteCol();
128 : 0 : nHandled = 1;
129 : : }
130 : : }
131 : : }
132 [ # # ]: 0 : else if ( nType == EVENT_LOSEFOCUS ) // LoseFocus wird bei VCL nicht gerufen
133 : 0 : EvalText(); // nCol setzen
134 : :
135 : 0 : return nHandled;
136 : : }
137 : :
138 : : //------------------------------------------------------------------------
139 : :
140 : 0 : void ColumnEdit::LoseFocus()
141 : : {
142 : 0 : EvalText();
143 : 0 : }
144 : :
145 : :
146 : : //------------------------------------------------------------------------
147 : :
148 : 0 : void ColumnEdit::Up()
149 : : {
150 : 0 : nCol++;
151 : :
152 [ # # ]: 0 : if ( nCol <= SCNAV_MAXCOL )
153 : 0 : SetCol( nCol );
154 : : else
155 : 0 : nCol--;
156 : 0 : }
157 : :
158 : : //------------------------------------------------------------------------
159 : :
160 : 0 : void ColumnEdit::Down()
161 : : {
162 [ # # ]: 0 : if ( nCol>1 )
163 : 0 : SetCol( nCol-1 );
164 : 0 : }
165 : :
166 : : //------------------------------------------------------------------------
167 : :
168 : 0 : void ColumnEdit::First()
169 : : {
170 : 0 : nCol = 1;
171 [ # # ][ # # ]: 0 : SetText(rtl::OUString('A'));
[ # # ]
172 : 0 : }
173 : :
174 : : //------------------------------------------------------------------------
175 : :
176 : 0 : void ColumnEdit::Last()
177 : : {
178 [ # # ]: 0 : String aStr;
179 [ # # ]: 0 : nCol = NumToAlpha( SCNAV_MAXCOL, aStr );
180 [ # # ][ # # ]: 0 : SetText( aStr );
181 : 0 : }
182 : :
183 : :
184 : : //------------------------------------------------------------------------
185 : :
186 : 0 : void ColumnEdit::EvalText()
187 : : {
188 [ # # ]: 0 : String aStrCol = GetText();
189 : :
190 [ # # ]: 0 : if ( aStrCol.Len() > 0 )
191 : : {
192 : : // nKeyGroup wird bei VCL mangels KeyInput nicht mehr gesetzt
193 : :
194 [ # # ][ # # ]: 0 : if ( CharClass::isAsciiNumeric(aStrCol) )
195 [ # # ]: 0 : nCol = NumStrToAlpha( aStrCol );
196 : : else
197 [ # # ]: 0 : nCol = AlphaToNum( aStrCol );
198 : : }
199 : : else
200 : 0 : nCol = 0;
201 : :
202 [ # # ]: 0 : SetText( aStrCol );
203 [ # # ]: 0 : nKeyGroup = KEYGROUP_ALPHA;
204 : 0 : }
205 : :
206 : : //------------------------------------------------------------------------
207 : :
208 : 0 : void ColumnEdit::ExecuteCol()
209 : : {
210 : 0 : SCROW nRow = rDlg.aEdRow.GetRow();
211 : :
212 : 0 : EvalText(); // setzt nCol
213 : :
214 [ # # ][ # # ]: 0 : if ( (nCol > 0) && (nRow > 0) )
215 : 0 : rDlg.SetCurrentCell( nCol-1, nRow-1 );
216 : 0 : }
217 : :
218 : : //------------------------------------------------------------------------
219 : :
220 : 0 : void ColumnEdit::SetCol( SCCOL nColNo )
221 : : {
222 [ # # ]: 0 : String aStr;
223 : :
224 [ # # ]: 0 : if ( nColNo == 0 )
225 : : {
226 : 0 : nCol = 0;
227 [ # # ]: 0 : SetText( aStr );
228 : : }
229 : : else
230 : : {
231 [ # # ]: 0 : nColNo = NumToAlpha( nColNo, aStr );
232 : 0 : nCol = nColNo;
233 [ # # ]: 0 : SetText( aStr );
234 [ # # ]: 0 : }
235 : 0 : }
236 : :
237 : : //------------------------------------------------------------------------
238 : :
239 : 0 : SCCOL ColumnEdit::AlphaToNum( String& rStr )
240 : : {
241 : 0 : SCCOL nColumn = 0;
242 : :
243 [ # # ][ # # ]: 0 : if ( CharClass::isAsciiAlpha( rStr) )
244 : : {
245 [ # # ]: 0 : rStr.ToUpperAscii();
246 : :
247 [ # # ][ # # ]: 0 : if (::AlphaToCol( nColumn, rStr))
248 : 0 : ++nColumn;
249 : :
250 [ # # ][ # # ]: 0 : if ( (rStr.Len() > SCNAV_COLLETTERS) || (nColumn > SCNAV_MAXCOL) )
[ # # ]
251 : : {
252 : 0 : nColumn = SCNAV_MAXCOL;
253 [ # # ]: 0 : NumToAlpha( nColumn, rStr );
254 : : }
255 : : }
256 : : else
257 [ # # ]: 0 : rStr.Erase();
258 : :
259 : 0 : return nColumn;
260 : : }
261 : :
262 : : //------------------------------------------------------------------------
263 : :
264 : 0 : SCCOL ColumnEdit::NumStrToAlpha( String& rStr )
265 : : {
266 : 0 : SCCOL nColumn = 0;
267 : :
268 [ # # ]: 0 : if ( CharClass::isAsciiNumeric(rStr) )
269 : 0 : nColumn = NumToAlpha( (SCCOL)rStr.ToInt32(), rStr );
270 : : else
271 : 0 : rStr.Erase();
272 : :
273 : 0 : return nColumn;
274 : : }
275 : :
276 : : //------------------------------------------------------------------------
277 : :
278 : 0 : SCCOL ColumnEdit::NumToAlpha( SCCOL nColNo, String& rStr )
279 : : {
280 [ # # ]: 0 : if ( nColNo > SCNAV_MAXCOL )
281 : 0 : nColNo = SCNAV_MAXCOL;
282 [ # # ]: 0 : else if ( nColNo < 1 )
283 : 0 : nColNo = 1;
284 : :
285 : 0 : ::ScColToAlpha( rStr, nColNo - 1);
286 : :
287 : 0 : return nColNo;
288 : : }
289 : :
290 : : //==================================================================
291 : : // class RowEdit
292 : : //==================================================================
293 : :
294 : 0 : RowEdit::RowEdit( ScNavigatorDlg* pParent, const ResId& rResId )
295 : : : NumericField( pParent, rResId ),
296 : 0 : rDlg ( *pParent )
297 : : {
298 [ # # ]: 0 : SetMax( SCNAV_MAXROW);
299 : 0 : SetLast( SCNAV_MAXROW);
300 : 0 : }
301 : :
302 : : //------------------------------------------------------------------------
303 : :
304 : 0 : RowEdit::~RowEdit()
305 : : {
306 [ # # ]: 0 : }
307 : :
308 : : //------------------------------------------------------------------------
309 : :
310 : 0 : long RowEdit::Notify( NotifyEvent& rNEvt )
311 : : {
312 : 0 : long nHandled = NumericField::Notify( rNEvt );
313 : :
314 [ # # ]: 0 : if ( rNEvt.GetType() == EVENT_KEYINPUT )
315 : : {
316 [ # # ]: 0 : const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
317 : 0 : KeyCode aCode = pKEvt->GetKeyCode();
318 [ # # ][ # # ]: 0 : if ( aCode.GetCode() == KEY_RETURN && !aCode.IsMod1() && !aCode.IsMod2() )
[ # # ][ # # ]
319 : : {
320 [ # # ]: 0 : ScNavigatorDlg::ReleaseFocus();
321 [ # # ]: 0 : ExecuteRow();
322 : 0 : nHandled = 1;
323 : : }
324 : : }
325 : :
326 : 0 : return nHandled;
327 : : }
328 : :
329 : : //------------------------------------------------------------------------
330 : :
331 : 0 : void RowEdit::LoseFocus()
332 : : {
333 : 0 : }
334 : :
335 : : //------------------------------------------------------------------------
336 : :
337 : 0 : void RowEdit::ExecuteRow()
338 : : {
339 : 0 : SCCOL nCol = rDlg.aEdCol.GetCol();
340 : 0 : SCROW nRow = (SCROW)GetValue();
341 : :
342 [ # # ][ # # ]: 0 : if ( (nCol > 0) && (nRow > 0) )
343 : 0 : rDlg.SetCurrentCell( nCol-1, nRow-1 );
344 : 0 : }
345 : :
346 : : //==================================================================
347 : : // class ScDocListBox
348 : : //==================================================================
349 : :
350 : 0 : ScDocListBox::ScDocListBox( ScNavigatorDlg* pParent, const ResId& rResId )
351 : : : ListBox ( pParent, rResId ),
352 : 0 : rDlg ( *pParent )
353 : : {
354 : 0 : }
355 : :
356 : : //------------------------------------------------------------------------
357 : :
358 : 0 : ScDocListBox::~ScDocListBox()
359 : : {
360 [ # # ]: 0 : }
361 : :
362 : : //------------------------------------------------------------------------
363 : :
364 : 0 : void ScDocListBox::Select()
365 : : {
366 [ # # ]: 0 : ScNavigatorDlg::ReleaseFocus();
367 : :
368 [ # # ]: 0 : String aDocName = GetSelectEntry();
369 [ # # ][ # # ]: 0 : rDlg.aLbEntries.SelectDoc( aDocName );
370 : 0 : }
371 : :
372 : : //==================================================================
373 : : // class CommandToolBox
374 : : //==================================================================
375 : :
376 : 0 : CommandToolBox::CommandToolBox( ScNavigatorDlg* pParent, const ResId& rResId )
377 : : : ToolBox ( pParent, rResId ),
378 : 0 : rDlg ( *pParent )
379 : : {
380 [ # # ]: 0 : InitImageList(); // ImageList members of ScNavigatorDlg must be initialized before!
381 : :
382 [ # # ][ # # ]: 0 : SetSizePixel( CalcWindowSizePixel() );
383 [ # # ][ # # ]: 0 : SetDropdownClickHdl( LINK(this, CommandToolBox, ToolBoxDropdownClickHdl) );
384 [ # # ][ # # ]: 0 : SetItemBits( IID_DROPMODE, GetItemBits( IID_DROPMODE ) | TIB_DROPDOWNONLY );
385 : 0 : }
386 : :
387 : : //------------------------------------------------------------------------
388 : :
389 : 0 : CommandToolBox::~CommandToolBox()
390 : : {
391 [ # # ]: 0 : }
392 : :
393 : : //------------------------------------------------------------------------
394 : :
395 : 0 : void CommandToolBox::Select( sal_uInt16 nSelId )
396 : : {
397 : : // Modus umschalten ?
398 : :
399 [ # # ][ # # ]: 0 : if ( nSelId == IID_ZOOMOUT || nSelId == IID_SCENARIOS )
400 : : {
401 : 0 : NavListMode eOldMode = rDlg.eListMode;
402 : 0 : NavListMode eNewMode = eOldMode;
403 : :
404 [ # # ]: 0 : if ( nSelId == IID_SCENARIOS ) // auf Szenario
405 : : {
406 [ # # ]: 0 : if ( eOldMode == NAV_LMODE_SCENARIOS )
407 : 0 : eNewMode = NAV_LMODE_AREAS;
408 : : else
409 : 0 : eNewMode = NAV_LMODE_SCENARIOS;
410 : : }
411 : : else // ein/aus
412 : : {
413 [ # # ]: 0 : if ( eOldMode == NAV_LMODE_NONE )
414 : 0 : eNewMode = NAV_LMODE_AREAS;
415 : : else
416 : 0 : eNewMode = NAV_LMODE_NONE;
417 : : }
418 : 0 : rDlg.SetListMode( eNewMode );
419 : 0 : UpdateButtons();
420 : : }
421 : : else
422 [ # # # # : 0 : switch ( nSelId )
# ]
423 : : {
424 : : case IID_DATA:
425 : 0 : rDlg.MarkDataArea();
426 : 0 : break;
427 : : case IID_UP:
428 : 0 : rDlg.StartOfDataArea();
429 : 0 : break;
430 : : case IID_DOWN:
431 : 0 : rDlg.EndOfDataArea();
432 : 0 : break;
433 : : case IID_CHANGEROOT:
434 : 0 : rDlg.aLbEntries.ToggleRoot();
435 : 0 : UpdateButtons();
436 : 0 : break;
437 : : }
438 : 0 : }
439 : :
440 : 0 : void CommandToolBox::Select()
441 : : {
442 : 0 : Select( GetCurItemId() );
443 : 0 : }
444 : :
445 : : //------------------------------------------------------------------------
446 : :
447 : 0 : void CommandToolBox::Click()
448 : : {
449 : 0 : }
450 : :
451 : : //------------------------------------------------------------------------
452 : :
453 : 0 : IMPL_LINK_NOARG(CommandToolBox, ToolBoxDropdownClickHdl)
454 : : {
455 : : // Das Popupmenue fuer den Dropmodus muss im Click (Button Down)
456 : : // statt im Select (Button Up) aufgerufen werden.
457 : :
458 [ # # ]: 0 : if ( GetCurItemId() == IID_DROPMODE )
459 : : {
460 [ # # ][ # # ]: 0 : ScPopupMenu aPop( ScResId( RID_POPUP_DROPMODE ) );
461 [ # # ]: 0 : aPop.CheckItem( RID_DROPMODE_URL + rDlg.GetDropMode() );
462 [ # # ][ # # ]: 0 : aPop.Execute( this, GetItemRect(IID_DROPMODE), POPUPMENU_EXECUTE_DOWN );
463 : 0 : sal_uInt16 nId = aPop.GetSelected();
464 : :
465 [ # # ]: 0 : EndSelection(); // vor SetDropMode (SetDropMode ruft SetItemImage)
466 : :
467 [ # # ][ # # ]: 0 : if ( nId >= RID_DROPMODE_URL && nId <= RID_DROPMODE_COPY )
468 [ # # ]: 0 : rDlg.SetDropMode( nId - RID_DROPMODE_URL );
469 : :
470 : : // den gehighlighteten Button aufheben
471 : 0 : Point aPoint;
472 [ # # ]: 0 : MouseEvent aLeave( aPoint, 0, MOUSE_LEAVEWINDOW | MOUSE_SYNTHETIC );
473 [ # # ][ # # ]: 0 : MouseMove( aLeave );
474 : : }
475 : :
476 : 0 : return 1;
477 : : }
478 : :
479 : : //------------------------------------------------------------------------
480 : :
481 : 0 : void CommandToolBox::UpdateButtons()
482 : : {
483 : 0 : NavListMode eMode = rDlg.eListMode;
484 : 0 : CheckItem( IID_SCENARIOS, eMode == NAV_LMODE_SCENARIOS );
485 : 0 : CheckItem( IID_ZOOMOUT, eMode != NAV_LMODE_NONE );
486 : :
487 : : // Umschalten-Button:
488 [ # # ][ # # ]: 0 : if ( eMode == NAV_LMODE_SCENARIOS || eMode == NAV_LMODE_NONE )
489 : : {
490 : 0 : EnableItem( IID_CHANGEROOT, false );
491 : 0 : CheckItem( IID_CHANGEROOT, false );
492 : : }
493 : : else
494 : : {
495 : 0 : EnableItem( IID_CHANGEROOT, sal_True );
496 : 0 : sal_Bool bRootSet = rDlg.aLbEntries.GetRootType() != SC_CONTENT_ROOT;
497 : 0 : CheckItem( IID_CHANGEROOT, bRootSet );
498 : : }
499 : :
500 : 0 : sal_uInt16 nImageId = 0;
501 [ # # # # ]: 0 : switch ( rDlg.nDropMode )
502 : : {
503 : 0 : case SC_DROPMODE_URL: nImageId = RID_IMG_DROP_URL; break;
504 : 0 : case SC_DROPMODE_LINK: nImageId = RID_IMG_DROP_LINK; break;
505 : 0 : case SC_DROPMODE_COPY: nImageId = RID_IMG_DROP_COPY; break;
506 : : }
507 [ # # ][ # # ]: 0 : SetItemImage( IID_DROPMODE, Image(ScResId(nImageId)) );
[ # # ]
508 : 0 : }
509 : :
510 : 0 : void CommandToolBox::InitImageList()
511 : : {
512 : 0 : ImageList& rImgLst = rDlg.aCmdImageList;
513 : :
514 : 0 : sal_uInt16 nCount = GetItemCount();
515 [ # # ]: 0 : for (sal_uInt16 i = 0; i < nCount; i++)
516 : : {
517 : 0 : sal_uInt16 nId = GetItemId(i);
518 [ # # ]: 0 : SetItemImage( nId, rImgLst.GetImage( nId ) );
519 : : }
520 : 0 : }
521 : :
522 : 0 : void CommandToolBox::DataChanged( const DataChangedEvent& rDCEvt )
523 : : {
524 [ # # ][ # # ]: 0 : if ( rDCEvt.GetType() == DATACHANGED_SETTINGS && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
[ # # ]
525 : : {
526 : : // update item images
527 : :
528 : 0 : InitImageList();
529 : 0 : UpdateButtons(); // drop mode
530 : : }
531 : :
532 : 0 : ToolBox::DataChanged( rDCEvt );
533 : 0 : }
534 : :
535 : : //==================================================================
536 : : // class ScNavigatorSettings
537 : : //==================================================================
538 : :
539 : 0 : ScNavigatorSettings::ScNavigatorSettings() :
540 : : maExpandedVec( SC_CONTENT_COUNT, false ),
541 : : mnRootSelected( SC_CONTENT_ROOT ),
542 [ # # ]: 0 : mnChildSelected( SC_CONTENT_NOCHILD )
543 : : {
544 : 0 : }
545 : :
546 : : //==================================================================
547 : : // class ScNavigatorDlgWrapper
548 : : //==================================================================
549 : :
550 [ + - ][ # # ]: 51 : SFX_IMPL_CHILDWINDOWCONTEXT( ScNavigatorDialogWrapper, SID_NAVIGATOR )
551 : :
552 : 0 : ScNavigatorDialogWrapper::ScNavigatorDialogWrapper(
553 : : Window* pParent,
554 : : sal_uInt16 nId,
555 : : SfxBindings* pBind,
556 : : SfxChildWinInfo* /* pInfo */ ) :
557 : 0 : SfxChildWindowContext( nId )
558 : : {
559 [ # # ][ # # ]: 0 : pNavigator = new ScNavigatorDlg( pBind, this, pParent );
560 : 0 : SetWindow( pNavigator );
561 : :
562 : : // Einstellungen muessen anderswo gemerkt werden,
563 : : // pInfo geht uns (ausser der Groesse) nichts mehr an
564 : :
565 : 0 : Size aInfoSize = pParent->GetOutputSizePixel(); // von aussen vorgegebene Groesse
566 : 0 : Size aNavSize = pNavigator->GetOutputSizePixel(); // Default-Groesse
567 : :
568 : 0 : aNavSize.Width() = Max( aInfoSize.Width(), aNavSize.Width() );
569 : 0 : aNavSize.Height() = Max( aInfoSize.Height(), aNavSize.Height() );
570 : 0 : pNavigator->nListModeHeight = Max( aNavSize.Height(), pNavigator->nListModeHeight );
571 : :
572 : : // Die Groesse kann in einem anderen Modul geaendert worden sein,
573 : : // deshalb muessen in Abhaengigkeit von der momentanen Groesse die
574 : : // Inhalte eingeblendet werden oder nicht
575 : :
576 : 0 : sal_Bool bSmall = ( aInfoSize.Height() <= pNavigator->aInitSize.Height() + SCNAV_MINTOL );
577 : 0 : NavListMode eNavMode = NAV_LMODE_NONE;
578 [ # # ]: 0 : if (!bSmall)
579 : : {
580 : : // wenn Szenario aktiv war, wieder einschalten
581 : :
582 [ # # ][ # # ]: 0 : ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg();
583 : 0 : NavListMode eLastMode = (NavListMode) rCfg.GetListMode();
584 [ # # ]: 0 : if ( eLastMode == NAV_LMODE_SCENARIOS )
585 : 0 : eNavMode = NAV_LMODE_SCENARIOS;
586 : : else
587 : 0 : eNavMode = NAV_LMODE_AREAS;
588 : : }
589 : :
590 : : // Die Groesse des Floats nicht neu setzen (sal_False bei SetListMode), damit der
591 : : // Navigator nicht aufgeklappt wird, wenn er minimiert war (#38872#).
592 : :
593 [ # # ]: 0 : pNavigator->SetListMode( eNavMode, false ); // FALSE: Groesse des Float nicht setzen
594 : :
595 : : sal_uInt16 nCmdId;
596 [ # # # # : 0 : switch (eNavMode)
# ]
597 : : {
598 : 0 : case NAV_LMODE_DOCS: nCmdId = IID_DOCS; break;
599 : 0 : case NAV_LMODE_AREAS: nCmdId = IID_AREAS; break;
600 : 0 : case NAV_LMODE_DBAREAS: nCmdId = IID_DBAREAS; break;
601 : 0 : case NAV_LMODE_SCENARIOS: nCmdId = IID_SCENARIOS; break;
602 : 0 : default: nCmdId = 0;
603 : : }
604 [ # # ]: 0 : if (nCmdId)
605 : : {
606 [ # # ]: 0 : pNavigator->aTbxCmd.CheckItem( nCmdId );
607 [ # # ]: 0 : pNavigator->DoResize();
608 : : }
609 : :
610 : 0 : pNavigator->bFirstBig = ( nCmdId == 0 ); // dann spaeter
611 : 0 : }
612 : :
613 : 0 : void ScNavigatorDialogWrapper::Resizing( Size& rSize )
614 : : {
615 : 0 : ((ScNavigatorDlg*)GetWindow())->Resizing(rSize);
616 : 0 : }
617 : :
618 : : //========================================================================
619 : : // class ScNavigatorPI
620 : : //========================================================================
621 : :
622 : : #define CTRL_ITEMS 4
623 : :
624 : : #define REGISTER_SLOT(i,id) \
625 : : ppBoundItems[i]=new ScNavigatorControllerItem(id,*this,rBindings);
626 : :
627 : 0 : ScNavigatorDlg::ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, Window* pParent ) :
628 : : Window( pParent, ScResId(RID_SCDLG_NAVIGATOR) ),
629 : : rBindings ( *pB ), // is used in CommandToolBox ctor
630 : : aCmdImageList( ScResId( IL_CMD ) ),
631 : : aFtCol ( this, ScResId( FT_COL ) ),
632 : : aEdCol ( this, ScResId( ED_COL ) ),
633 : : aFtRow ( this, ScResId( FT_ROW ) ),
634 : : aEdRow ( this, ScResId( ED_ROW ) ),
635 : : aTbxCmd ( this, ScResId( TBX_CMD ) ),
636 : : aLbEntries ( this, ScResId( LB_ENTRIES ) ),
637 : : aWndScenarios( this,ScResId( STR_QHLP_SCEN_LISTBOX), ScResId(STR_QHLP_SCEN_COMMENT)),
638 : : aLbDocuments( this, ScResId( LB_DOCUMENTS ) ),
639 : : aStrDragMode ( ScResId( STR_DRAGMODE ) ),
640 : : aStrDisplay ( ScResId( STR_DISPLAY ) ),
641 : : aStrActiveWin( ScResId( STR_ACTIVEWIN ) ),
642 : : pContextWin ( pCW ),
643 : : pMarkArea ( NULL ),
644 : : pViewData ( NULL ),
645 : : nListModeHeight( 0 ),
646 : : nInitListHeight( 0 ),
647 : : eListMode ( NAV_LMODE_NONE ),
648 : : nDropMode ( SC_DROPMODE_URL ),
649 : : nCurCol ( 0 ),
650 : : nCurRow ( 0 ),
651 : : nCurTab ( 0 ),
652 [ # # ][ # # ]: 0 : bFirstBig ( false )
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
653 : : {
654 [ # # ][ # # ]: 0 : ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg();
655 : 0 : nDropMode = rCfg.GetDragMode();
656 : : // eListMode wird von aussen gesetzt, Root weiter unten
657 : :
658 [ # # ]: 0 : aLbDocuments.SetDropDownLineCount(9);
659 : 0 : rtl::OUString aOpen(" (");
660 [ # # ]: 0 : aStrActive = aOpen;
661 [ # # ][ # # ]: 0 : aStrActive += String( ScResId( STR_ACTIVE ) );
[ # # ][ # # ]
662 [ # # ]: 0 : aStrActive += ')'; // " (aktiv)"
663 [ # # ]: 0 : aStrNotActive = aOpen;
664 [ # # ][ # # ]: 0 : aStrNotActive += String( ScResId( STR_NOTACTIVE ) );
[ # # ][ # # ]
665 [ # # ]: 0 : aStrNotActive += ')'; // " (inaktiv)"
666 [ # # ]: 0 : aStrHidden = aOpen;
667 [ # # ][ # # ]: 0 : aStrHidden += String( ScResId( STR_HIDDEN ) );
[ # # ][ # # ]
668 [ # # ]: 0 : aStrHidden += ')'; // " (versteckt)"
669 : :
670 [ # # ][ # # ]: 0 : aTitleBase = GetText();
[ # # ]
671 : :
672 : : long nListboxYPos =
673 [ # # ][ # # ]: 0 : Max( aTbxCmd.GetPosPixel().Y() + aTbxCmd.GetSizePixel().Height(),
674 [ # # ][ # # ]: 0 : aEdRow.GetPosPixel().Y() + aEdRow.GetSizePixel().Height() ) + 4;
675 [ # # ]: 0 : aLbEntries.SetPosSizePixel( 0, nListboxYPos, 0, 0, WINDOW_POSSIZE_Y);
676 : :
677 [ # # ]: 0 : nBorderOffset = aLbEntries.GetPosPixel().X();
678 : :
679 [ # # ]: 0 : aInitSize.Width() = aTbxCmd.GetPosPixel().X()
680 [ # # ]: 0 : + aTbxCmd.GetSizePixel().Width()
681 : 0 : + nBorderOffset;
682 [ # # ]: 0 : aInitSize.Height() = aLbEntries.GetPosPixel().Y();
683 : :
684 [ # # ]: 0 : nInitListHeight = aLbEntries.GetSizePixel().Height();
685 : 0 : nListModeHeight = aInitSize.Height()
686 : 0 : + nInitListHeight;
687 : :
688 [ # # ]: 0 : ppBoundItems = new ScNavigatorControllerItem* [CTRL_ITEMS];
689 : :
690 [ # # ]: 0 : rBindings.ENTERREGISTRATIONS();
691 : : //-----------------------------
692 [ # # ][ # # ]: 0 : REGISTER_SLOT( 0, SID_CURRENTCELL );
693 [ # # ][ # # ]: 0 : REGISTER_SLOT( 1, SID_CURRENTTAB );
694 [ # # ][ # # ]: 0 : REGISTER_SLOT( 2, SID_CURRENTDOC );
695 [ # # ][ # # ]: 0 : REGISTER_SLOT( 3, SID_SELECT_SCENARIO );
696 : : //-----------------------------
697 [ # # ]: 0 : rBindings.LEAVEREGISTRATIONS();
698 : :
699 [ # # ][ # # ]: 0 : StartListening( *(SFX_APP()) );
700 [ # # ]: 0 : StartListening( rBindings );
701 : :
702 [ # # ]: 0 : aLbDocuments.Hide(); // bei NAV_LMODE_NONE gibts die nicht
703 : :
704 [ # # ]: 0 : aLbEntries.InitWindowBits(sal_True);
705 : :
706 [ # # ]: 0 : aLbEntries.SetSpaceBetweenEntries(0);
707 [ # # ]: 0 : aLbEntries.SetSelectionMode( SINGLE_SELECTION );
708 : : aLbEntries.SetDragDropMode( SV_DRAGDROP_CTRL_MOVE |
709 : : SV_DRAGDROP_CTRL_COPY |
710 [ # # ]: 0 : SV_DRAGDROP_ENABLE_TOP );
711 : :
712 : : // war eine Kategorie als Root ausgewaehlt?
713 : 0 : sal_uInt16 nLastRoot = rCfg.GetRootType();
714 [ # # ]: 0 : if ( nLastRoot )
715 [ # # ]: 0 : aLbEntries.SetRootType( nLastRoot );
716 : :
717 [ # # ]: 0 : aLbEntries.Refresh();
718 [ # # ]: 0 : GetDocNames();
719 : :
720 [ # # ]: 0 : aTbxCmd.UpdateButtons();
721 : :
722 [ # # ]: 0 : UpdateColumn();
723 [ # # ]: 0 : UpdateRow();
724 [ # # ]: 0 : UpdateTable();
725 [ # # ]: 0 : aLbEntries.Hide();
726 [ # # ]: 0 : aWndScenarios.Hide();
727 [ # # ][ # # ]: 0 : aWndScenarios.SetPosPixel( aLbEntries.GetPosPixel() );
728 : :
729 [ # # ]: 0 : aContentTimer.SetTimeoutHdl( LINK( this, ScNavigatorDlg, TimeHdl ) );
730 [ # # ]: 0 : aContentTimer.SetTimeout( SC_CONTENT_TIMEOUT );
731 : :
732 [ # # ]: 0 : FreeResource();
733 : :
734 [ # # ]: 0 : aLbEntries.SetAccessibleRelationLabeledBy(&aLbEntries);
735 [ # # ]: 0 : aTbxCmd.SetAccessibleRelationLabeledBy(&aTbxCmd);
736 [ # # ]: 0 : aLbDocuments.SetAccessibleName(aStrActiveWin);
737 : 0 : }
738 : :
739 : : //------------------------------------------------------------------------
740 : :
741 [ # # ][ # # ]: 0 : ScNavigatorDlg::~ScNavigatorDlg()
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
742 : : {
743 [ # # ]: 0 : aContentTimer.Stop();
744 : :
745 : : sal_uInt16 i;
746 [ # # ]: 0 : for ( i=0; i<CTRL_ITEMS; i++ )
747 [ # # ][ # # ]: 0 : delete ppBoundItems[i];
748 : :
749 [ # # ]: 0 : delete [] ppBoundItems;
750 : 0 : delete pMarkArea;
751 : :
752 [ # # ][ # # ]: 0 : EndListening( *(SFX_APP()) );
753 [ # # ]: 0 : EndListening( rBindings );
754 [ # # ]: 0 : }
755 : :
756 : : //------------------------------------------------------------------------
757 : :
758 : 0 : void ScNavigatorDlg::Resizing( Size& rNewSize ) // Size = Outputsize?
759 : : {
760 : 0 : FloatingWindow* pFloat = pContextWin->GetFloatingWindow();
761 [ # # ]: 0 : if ( pFloat )
762 : : {
763 : 0 : Size aMinOut = pFloat->GetMinOutputSizePixel();
764 : :
765 [ # # ]: 0 : if ( rNewSize.Width() < aMinOut.Width() )
766 : 0 : rNewSize.Width() = aMinOut.Width();
767 : :
768 [ # # ]: 0 : if ( eListMode == NAV_LMODE_NONE )
769 : 0 : rNewSize.Height() = aInitSize.Height();
770 : : else
771 : : {
772 [ # # ]: 0 : if ( rNewSize.Height() < aMinOut.Height() )
773 : 0 : rNewSize.Height() = aMinOut.Height();
774 : : }
775 : : }
776 : 0 : }
777 : :
778 : :
779 : :
780 : 0 : void ScNavigatorDlg::Paint( const Rectangle& rRec )
781 : : {
782 [ # # ]: 0 : const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
783 : 0 : Color aBgColor = rStyleSettings.GetFaceColor();
784 [ # # ]: 0 : Wallpaper aBack( aBgColor );
785 : :
786 [ # # ]: 0 : SetBackground( aBack );
787 [ # # ]: 0 : aFtCol.SetBackground( aBack );
788 [ # # ]: 0 : aFtRow.SetBackground( aBack );
789 : :
790 [ # # ][ # # ]: 0 : Window::Paint( rRec );
791 : 0 : }
792 : :
793 : 0 : void ScNavigatorDlg::DataChanged( const DataChangedEvent& rDCEvt )
794 : : {
795 [ # # ][ # # ]: 0 : if ( rDCEvt.GetType() == DATACHANGED_SETTINGS && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
[ # # ]
796 : : {
797 : : // toolbox images are exchanged in CommandToolBox::DataChanged
798 : 0 : Invalidate();
799 : : }
800 : :
801 : 0 : Window::DataChanged( rDCEvt );
802 : 0 : }
803 : :
804 : : //------------------------------------------------------------------------
805 : :
806 : 0 : void ScNavigatorDlg::Resize()
807 : : {
808 : 0 : DoResize();
809 : 0 : }
810 : :
811 : : //------------------------------------------------------------------------
812 : :
813 : 0 : void ScNavigatorDlg::DoResize()
814 : : {
815 : 0 : Size aNewSize = GetOutputSizePixel();
816 : 0 : long nTotalHeight = aNewSize.Height();
817 : :
818 : : // bei angedocktem Navigator wird das Fenster evtl. erst klein erzeugt,
819 : : // dann kommt ein Resize auf die wirkliche Groesse -> dann Inhalte einschalten
820 : :
821 : 0 : sal_Bool bSmall = ( nTotalHeight <= aInitSize.Height() + SCNAV_MINTOL );
822 [ # # ][ # # ]: 0 : if ( !bSmall && bFirstBig )
823 : : {
824 : : // Inhalte laut Config wieder einschalten
825 : :
826 : 0 : bFirstBig = false;
827 : 0 : NavListMode eNavMode = NAV_LMODE_AREAS;
828 [ # # ][ # # ]: 0 : ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg();
829 : 0 : NavListMode eLastMode = (NavListMode) rCfg.GetListMode();
830 [ # # ]: 0 : if ( eLastMode == NAV_LMODE_SCENARIOS )
831 : 0 : eNavMode = NAV_LMODE_SCENARIOS;
832 [ # # ]: 0 : SetListMode( eNavMode, false ); // FALSE: Groesse des Float nicht setzen
833 : : }
834 : :
835 : : // auch wenn die Inhalte nicht sichtbar sind, die Groessen anpassen,
836 : : // damit die Breite stimmt
837 : :
838 [ # # ]: 0 : Point aEntryPos = aLbEntries.GetPosPixel();
839 [ # # ]: 0 : Point aListPos = aLbDocuments.GetPosPixel();
840 : 0 : aNewSize.Width() -= 2*nBorderOffset;
841 [ # # ]: 0 : Size aDocSize = aLbDocuments.GetSizePixel();
842 : 0 : aDocSize.Width() = aNewSize.Width();
843 : :
844 [ # # ]: 0 : if(!bSmall)
845 : : {
846 : :
847 [ # # ]: 0 : long nListHeight = aLbDocuments.GetSizePixel().Height();
848 : 0 : aNewSize.Height() -= ( aEntryPos.Y() + nListHeight + 2*nBorderOffset );
849 [ # # ]: 0 : if(aNewSize.Height()<0) aNewSize.Height()=0;
850 : :
851 : 0 : aListPos.Y() = aEntryPos.Y() + aNewSize.Height() + nBorderOffset;
852 : :
853 [ # # ][ # # ]: 0 : if(aListPos.Y() > aLbEntries.GetPosPixel().Y())
854 [ # # ]: 0 : aLbDocuments.SetPosPixel( aListPos );
855 : :
856 : : }
857 [ # # ]: 0 : aLbEntries.SetSizePixel( aNewSize );
858 [ # # ]: 0 : aWndScenarios.SetSizePixel( aNewSize );
859 [ # # ]: 0 : aLbDocuments.SetSizePixel( aDocSize );
860 : :
861 : 0 : sal_Bool bListMode = (eListMode != NAV_LMODE_NONE);
862 [ # # ]: 0 : FloatingWindow* pFloat = pContextWin->GetFloatingWindow();
863 [ # # ][ # # ]: 0 : if ( pFloat && bListMode )
864 : 0 : nListModeHeight = nTotalHeight;
865 : 0 : }
866 : :
867 : : //------------------------------------------------------------------------
868 : :
869 : 0 : void ScNavigatorDlg::Notify( SfxBroadcaster&, const SfxHint& rHint )
870 : : {
871 [ # # ]: 0 : if ( rHint.ISA(SfxSimpleHint) )
872 : : {
873 : 0 : sal_uLong nHintId = ((SfxSimpleHint&)rHint).GetId();
874 : :
875 [ # # ]: 0 : if ( nHintId == SC_HINT_DOCNAME_CHANGED )
876 : : {
877 : 0 : aLbEntries.ActiveDocChanged();
878 : : }
879 [ # # ]: 0 : else if ( NAV_LMODE_NONE == eListMode )
880 : : {
881 : : // Tabellen hier nicht mehr
882 : : }
883 : : else
884 : : {
885 [ # # # # : 0 : switch ( nHintId )
# # # # ]
886 : : {
887 : : case SC_HINT_TABLES_CHANGED:
888 : 0 : aLbEntries.Refresh( SC_CONTENT_TABLE );
889 : 0 : break;
890 : :
891 : : case SC_HINT_DBAREAS_CHANGED:
892 : 0 : aLbEntries.Refresh( SC_CONTENT_DBAREA );
893 : 0 : break;
894 : :
895 : : case SC_HINT_AREAS_CHANGED:
896 : 0 : aLbEntries.Refresh( SC_CONTENT_RANGENAME );
897 : 0 : break;
898 : :
899 : : case SC_HINT_DRAW_CHANGED:
900 : 0 : aLbEntries.Refresh( SC_CONTENT_GRAPHIC );
901 : 0 : aLbEntries.Refresh( SC_CONTENT_OLEOBJECT );
902 : 0 : aLbEntries.Refresh( SC_CONTENT_DRAWING );
903 : 0 : break;
904 : :
905 : : case SC_HINT_AREALINKS_CHANGED:
906 : 0 : aLbEntries.Refresh( SC_CONTENT_AREALINK );
907 : 0 : break;
908 : :
909 : : // SFX_HINT_DOCCHANGED kommt nicht nur bei Dokument-Wechsel
910 : :
911 : : case SC_HINT_NAVIGATOR_UPDATEALL:
912 : 0 : UpdateAll();
913 : 0 : break;
914 : :
915 : : case FID_DATACHANGED:
916 : : case FID_ANYDATACHANGED:
917 : 0 : aContentTimer.Start(); // Notizen nicht sofort suchen
918 : 0 : break;
919 : :
920 : : default:
921 : 0 : break;
922 : : }
923 : : }
924 : : }
925 [ # # ]: 0 : else if ( rHint.ISA(SfxEventHint) )
926 : : {
927 : 0 : sal_uLong nEventId = ((SfxEventHint&)rHint).GetEventId();
928 [ # # ]: 0 : if ( nEventId == SFX_EVENT_ACTIVATEDOC )
929 : : {
930 : 0 : aLbEntries.ActiveDocChanged();
931 : 0 : UpdateAll();
932 : : }
933 : : }
934 : 0 : }
935 : :
936 : : //------------------------------------------------------------------------
937 : :
938 : 0 : IMPL_LINK( ScNavigatorDlg, TimeHdl, Timer*, pTimer )
939 : : {
940 [ # # ]: 0 : if ( pTimer != &aContentTimer )
941 : 0 : return 0;
942 : :
943 : 0 : aLbEntries.Refresh( SC_CONTENT_NOTE );
944 : 0 : return 0;
945 : : }
946 : :
947 : : //------------------------------------------------------------------------
948 : :
949 : 0 : void ScNavigatorDlg::SetDropMode(sal_uInt16 nNew)
950 : : {
951 : 0 : nDropMode = nNew;
952 : 0 : aTbxCmd.UpdateButtons();
953 : :
954 : 0 : ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg();
955 : 0 : rCfg.SetDragMode(nDropMode);
956 : 0 : }
957 : :
958 : : //------------------------------------------------------------------------
959 : :
960 : 0 : void ScNavigatorDlg::CursorPosChanged()
961 : : {
962 : : //! Eintraege selektieren ???
963 : :
964 : : // if ( GetDBAtCursor( aStrDbName ) )
965 : : // if ( GetAreaAtCursor( aStrAreaName ) )
966 : 0 : }
967 : :
968 : : //------------------------------------------------------------------------
969 : :
970 : 0 : void ScNavigatorDlg::SetCurrentCell( SCCOL nColNo, SCROW nRowNo )
971 : : {
972 [ # # ][ # # ]: 0 : if ( (nColNo+1 != nCurCol) || (nRowNo+1 != nCurRow) )
973 : : {
974 : : // SID_CURRENTCELL == Item #0 Cache leeren, damit das Setzen der
975 : : // aktuellen Zelle auch in zusammengefassten Bereichen funktioniert.
976 [ # # ]: 0 : ppBoundItems[0]->ClearCache();
977 : :
978 : 0 : ScAddress aScAddress( nColNo, nRowNo, 0 );
979 [ # # ]: 0 : String aAddr;
980 [ # # ]: 0 : aScAddress.Format( aAddr, SCA_ABS );
981 : :
982 : 0 : sal_Bool bUnmark = false;
983 [ # # ][ # # ]: 0 : if ( GetViewData() )
984 [ # # ][ # # ]: 0 : bUnmark = !pViewData->GetMarkData().IsCellMarked( nColNo, nRowNo );
985 : :
986 [ # # ]: 0 : SfxStringItem aPosItem( SID_CURRENTCELL, aAddr );
987 [ # # ]: 0 : SfxBoolItem aUnmarkItem( FN_PARAM_1, bUnmark ); // ggf. Selektion aufheben
988 : :
989 : : rBindings.GetDispatcher()->Execute( SID_CURRENTCELL,
990 : : SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD,
991 [ # # ][ # # ]: 0 : &aPosItem, &aUnmarkItem, 0L );
[ # # ][ # # ]
992 : : }
993 : 0 : }
994 : :
995 : 0 : void ScNavigatorDlg::SetCurrentCellStr( const String rName )
996 : : {
997 [ # # ]: 0 : ppBoundItems[0]->ClearCache();
998 [ # # ]: 0 : SfxStringItem aNameItem( SID_CURRENTCELL, rName );
999 : :
1000 : : rBindings.GetDispatcher()->Execute( SID_CURRENTCELL,
1001 : : SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD,
1002 [ # # ][ # # ]: 0 : &aNameItem, 0L );
1003 : 0 : }
1004 : :
1005 : : //------------------------------------------------------------------------
1006 : :
1007 : 0 : void ScNavigatorDlg::SetCurrentTable( SCTAB nTabNo )
1008 : : {
1009 [ # # ]: 0 : if ( nTabNo != nCurTab )
1010 : : {
1011 : : // Tabelle fuer Basic ist 1-basiert
1012 [ # # ]: 0 : SfxUInt16Item aTabItem( SID_CURRENTTAB, static_cast<sal_uInt16>(nTabNo) + 1 );
1013 : : rBindings.GetDispatcher()->Execute( SID_CURRENTTAB,
1014 : : SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD,
1015 [ # # ][ # # ]: 0 : &aTabItem, 0L );
1016 : : }
1017 : 0 : }
1018 : :
1019 : 0 : void ScNavigatorDlg::SetCurrentTableStr( const rtl::OUString& rName )
1020 : : {
1021 [ # # ][ # # ]: 0 : if (!GetViewData()) return;
1022 : :
1023 [ # # ]: 0 : ScDocument* pDoc = pViewData->GetDocument();
1024 [ # # ]: 0 : SCTAB nCount = pDoc->GetTableCount();
1025 : 0 : rtl::OUString aTabName;
1026 : :
1027 [ # # ]: 0 : for ( SCTAB i=0; i<nCount; i++ )
1028 : : {
1029 [ # # ]: 0 : pDoc->GetName( i, aTabName );
1030 [ # # ]: 0 : if ( aTabName.equals(rName) )
1031 : : {
1032 [ # # ]: 0 : SetCurrentTable( i );
1033 : : return;
1034 : : }
1035 [ # # ]: 0 : }
1036 : : }
1037 : :
1038 : : //------------------------------------------------------------------------
1039 : :
1040 : 0 : void ScNavigatorDlg::SetCurrentObject( const String rName )
1041 : : {
1042 [ # # ]: 0 : SfxStringItem aNameItem( SID_CURRENTOBJECT, rName );
1043 : : rBindings.GetDispatcher()->Execute( SID_CURRENTOBJECT,
1044 : : SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD,
1045 [ # # ][ # # ]: 0 : &aNameItem, 0L );
1046 : 0 : }
1047 : :
1048 : : //------------------------------------------------------------------------
1049 : :
1050 : 0 : void ScNavigatorDlg::SetCurrentDoc( const String& rDocName ) // aktivieren
1051 : : {
1052 [ # # ]: 0 : SfxStringItem aDocItem( SID_CURRENTDOC, rDocName );
1053 : : rBindings.GetDispatcher()->Execute( SID_CURRENTDOC,
1054 : : SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD,
1055 [ # # ][ # # ]: 0 : &aDocItem, 0L );
1056 : 0 : }
1057 : :
1058 : : //------------------------------------------------------------------------
1059 : :
1060 : 0 : ScTabViewShell* ScNavigatorDlg::GetTabViewShell() const
1061 : : {
1062 [ # # ][ # # ]: 0 : return PTR_CAST( ScTabViewShell, SfxViewShell::Current() );
1063 : : }
1064 : :
1065 : : //------------------------------------------------------------------------
1066 : :
1067 : 0 : ScNavigatorSettings* ScNavigatorDlg::GetNavigatorSettings()
1068 : : {
1069 : : // Don't store the settings pointer here, because the settings belong to
1070 : : // the view, and the view may be closed while the navigator is open (reload).
1071 : : // If the pointer is cached here again later for performance reasons, it has to
1072 : : // be forgotten when the view is closed.
1073 : :
1074 : 0 : ScTabViewShell* pViewSh = GetTabViewShell();
1075 [ # # ]: 0 : return pViewSh ? pViewSh->GetNavigatorSettings() : NULL;
1076 : : }
1077 : :
1078 : : //------------------------------------------------------------------------
1079 : :
1080 : 0 : sal_Bool ScNavigatorDlg::GetViewData()
1081 : : {
1082 : 0 : ScTabViewShell* pViewSh = GetTabViewShell();
1083 [ # # ]: 0 : pViewData = pViewSh ? pViewSh->GetViewData() : NULL;
1084 : :
1085 : 0 : return ( pViewData != NULL );
1086 : : }
1087 : :
1088 : : //------------------------------------------------------------------------
1089 : :
1090 : 0 : void ScNavigatorDlg::UpdateColumn( const SCCOL* pCol )
1091 : : {
1092 [ # # ]: 0 : if ( pCol )
1093 : 0 : nCurCol = *pCol;
1094 [ # # ]: 0 : else if ( GetViewData() )
1095 : 0 : nCurCol = pViewData->GetCurX() + 1;
1096 : :
1097 : 0 : aEdCol.SetCol( nCurCol );
1098 : 0 : CheckDataArea();
1099 : 0 : }
1100 : :
1101 : : //------------------------------------------------------------------------
1102 : :
1103 : 0 : void ScNavigatorDlg::UpdateRow( const SCROW* pRow )
1104 : : {
1105 [ # # ]: 0 : if ( pRow )
1106 : 0 : nCurRow = *pRow;
1107 [ # # ]: 0 : else if ( GetViewData() )
1108 : 0 : nCurRow = pViewData->GetCurY() + 1;
1109 : :
1110 : 0 : aEdRow.SetRow( nCurRow );
1111 : 0 : CheckDataArea();
1112 : 0 : }
1113 : :
1114 : : //------------------------------------------------------------------------
1115 : :
1116 : 0 : void ScNavigatorDlg::UpdateTable( const SCTAB* pTab )
1117 : : {
1118 [ # # ]: 0 : if ( pTab )
1119 : 0 : nCurTab = *pTab;
1120 [ # # ]: 0 : else if ( GetViewData() )
1121 : 0 : nCurTab = pViewData->GetTabNo();
1122 : :
1123 : 0 : CheckDataArea();
1124 : 0 : }
1125 : :
1126 : : //------------------------------------------------------------------------
1127 : :
1128 : 0 : void ScNavigatorDlg::UpdateAll()
1129 : : {
1130 [ # # # ]: 0 : switch ( eListMode )
1131 : : {
1132 : : case NAV_LMODE_DOCS:
1133 : : case NAV_LMODE_DBAREAS:
1134 : : case NAV_LMODE_AREAS:
1135 : 0 : aLbEntries.Refresh();
1136 : 0 : break;
1137 : :
1138 : : case NAV_LMODE_NONE:
1139 : : //! ???
1140 : 0 : break;
1141 : :
1142 : : default:
1143 : 0 : break;
1144 : : }
1145 : :
1146 : 0 : aContentTimer.Stop(); // dann nicht nochmal
1147 : 0 : }
1148 : :
1149 : : //------------------------------------------------------------------------
1150 : :
1151 : 0 : void ScNavigatorDlg::SetListMode( NavListMode eMode, sal_Bool bSetSize )
1152 : : {
1153 [ # # ]: 0 : if ( eMode != eListMode )
1154 : : {
1155 [ # # ]: 0 : if ( eMode != NAV_LMODE_NONE )
1156 : 0 : bFirstBig = false; // nicht mehr automatisch umschalten
1157 : :
1158 : 0 : eListMode = eMode;
1159 : :
1160 [ # # # # ]: 0 : switch ( eMode )
1161 : : {
1162 : : case NAV_LMODE_NONE:
1163 : 0 : ShowList( false, bSetSize );
1164 : 0 : break;
1165 : :
1166 : : case NAV_LMODE_AREAS:
1167 : : case NAV_LMODE_DBAREAS:
1168 : : case NAV_LMODE_DOCS:
1169 : 0 : aLbEntries.Refresh();
1170 : 0 : ShowList( sal_True, bSetSize );
1171 : 0 : break;
1172 : :
1173 : : case NAV_LMODE_SCENARIOS:
1174 : 0 : ShowScenarios( sal_True, bSetSize );
1175 : 0 : break;
1176 : : }
1177 : :
1178 : 0 : aTbxCmd.UpdateButtons();
1179 : :
1180 [ # # ]: 0 : if ( eMode != NAV_LMODE_NONE )
1181 : : {
1182 : 0 : ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg();
1183 : 0 : rCfg.SetListMode( (sal_uInt16) eMode );
1184 : : }
1185 : : }
1186 : :
1187 [ # # ]: 0 : if ( pMarkArea )
1188 : 0 : UnmarkDataArea();
1189 : 0 : }
1190 : :
1191 : : //------------------------------------------------------------------------
1192 : :
1193 : 0 : void ScNavigatorDlg::ShowList( sal_Bool bShow, sal_Bool bSetSize )
1194 : : {
1195 [ # # ]: 0 : FloatingWindow* pFloat = pContextWin->GetFloatingWindow();
1196 [ # # ]: 0 : Size aSize = GetParent()->GetOutputSizePixel();
1197 : :
1198 [ # # ]: 0 : if ( bShow )
1199 : : {
1200 : 0 : Size aMinSize = aInitSize;
1201 : :
1202 : 0 : aMinSize.Height() += nInitListHeight;
1203 [ # # ]: 0 : if ( pFloat )
1204 [ # # ]: 0 : pFloat->SetMinOutputSizePixel( aMinSize );
1205 : 0 : aSize.Height() = nListModeHeight;
1206 [ # # ]: 0 : aLbEntries.Show();
1207 [ # # ]: 0 : aLbDocuments.Show();
1208 : : }
1209 : : else
1210 : : {
1211 [ # # ]: 0 : if ( pFloat )
1212 : : {
1213 [ # # ]: 0 : pFloat->SetMinOutputSizePixel( aInitSize );
1214 : 0 : nListModeHeight = aSize.Height();
1215 : : }
1216 : 0 : aSize.Height() = aInitSize.Height();
1217 [ # # ]: 0 : aLbEntries.Hide();
1218 [ # # ]: 0 : aLbDocuments.Hide();
1219 : : }
1220 [ # # ]: 0 : aWndScenarios.Hide();
1221 : :
1222 [ # # ]: 0 : if ( pFloat )
1223 : : {
1224 [ # # ]: 0 : if ( bSetSize )
1225 [ # # ]: 0 : pFloat->SetOutputSizePixel( aSize );
1226 : : }
1227 : : else
1228 : : {
1229 [ # # ]: 0 : SfxNavigator* pNav = (SfxNavigator*)GetParent();
1230 : 0 : Size aFloating = pNav->GetFloatingSize();
1231 : 0 : aFloating.Height() = aSize.Height();
1232 : 0 : pNav->SetFloatingSize( aFloating );
1233 : : }
1234 : 0 : }
1235 : :
1236 : : //------------------------------------------------------------------------
1237 : :
1238 : 0 : void ScNavigatorDlg::ShowScenarios( sal_Bool bShow, sal_Bool bSetSize )
1239 : : {
1240 [ # # ]: 0 : FloatingWindow* pFloat = pContextWin->GetFloatingWindow();
1241 [ # # ]: 0 : Size aSize = GetParent()->GetOutputSizePixel();
1242 : :
1243 [ # # ]: 0 : if ( bShow )
1244 : : {
1245 : 0 : Size aMinSize = aInitSize;
1246 : 0 : aMinSize.Height() += nInitListHeight;
1247 [ # # ]: 0 : if ( pFloat )
1248 [ # # ]: 0 : pFloat->SetMinOutputSizePixel( aMinSize );
1249 : 0 : aSize.Height() = nListModeHeight;
1250 : :
1251 [ # # ]: 0 : rBindings.Invalidate( SID_SELECT_SCENARIO );
1252 [ # # ]: 0 : rBindings.Update( SID_SELECT_SCENARIO );
1253 : :
1254 [ # # ]: 0 : aWndScenarios.Show();
1255 [ # # ]: 0 : aLbDocuments.Show();
1256 : : }
1257 : : else
1258 : : {
1259 [ # # ]: 0 : if ( pFloat )
1260 : : {
1261 [ # # ]: 0 : pFloat->SetMinOutputSizePixel( aInitSize );
1262 : 0 : nListModeHeight = aSize.Height();
1263 : : }
1264 : 0 : aSize.Height() = aInitSize.Height();
1265 [ # # ]: 0 : aWndScenarios.Hide();
1266 [ # # ]: 0 : aLbDocuments.Hide();
1267 : : }
1268 [ # # ]: 0 : aLbEntries.Hide();
1269 : :
1270 [ # # ]: 0 : if ( pFloat )
1271 : : {
1272 [ # # ]: 0 : if ( bSetSize )
1273 [ # # ]: 0 : pFloat->SetOutputSizePixel( aSize );
1274 : : }
1275 : : else
1276 : : {
1277 [ # # ]: 0 : SfxNavigator* pNav = (SfxNavigator*)GetParent();
1278 : 0 : Size aFloating = pNav->GetFloatingSize();
1279 : 0 : aFloating.Height() = aSize.Height();
1280 : 0 : pNav->SetFloatingSize( aFloating );
1281 : : }
1282 : 0 : }
1283 : :
1284 : :
1285 : : //------------------------------------------------------------------------
1286 : : //
1287 : : // Dokumente fuer Dropdown-Listbox
1288 : : //
1289 : : //------------------------------------------------------------------------
1290 : :
1291 : 0 : void ScNavigatorDlg::GetDocNames( const String* pManualSel )
1292 : : {
1293 [ # # ]: 0 : aLbDocuments.Clear();
1294 [ # # ]: 0 : aLbDocuments.SetUpdateMode( false );
1295 : :
1296 [ # # ][ # # ]: 0 : ScDocShell* pCurrentSh = PTR_CAST( ScDocShell, SfxObjectShell::Current() );
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
1297 : :
1298 [ # # ]: 0 : String aSelEntry;
1299 [ # # ]: 0 : SfxObjectShell* pSh = SfxObjectShell::GetFirst();
1300 [ # # ]: 0 : while ( pSh )
1301 : : {
1302 [ # # ][ # # ]: 0 : if ( pSh->ISA(ScDocShell) )
[ # # ]
1303 : : {
1304 [ # # ]: 0 : String aName = pSh->GetTitle();
1305 [ # # ]: 0 : String aEntry = aName;
1306 [ # # ]: 0 : if (pSh == pCurrentSh)
1307 [ # # ]: 0 : aEntry += aStrActive;
1308 : : else
1309 [ # # ]: 0 : aEntry += aStrNotActive;
1310 [ # # ]: 0 : aLbDocuments.InsertEntry( aEntry );
1311 : :
1312 [ # # ][ # # ]: 0 : if ( pManualSel ? ( aName == *pManualSel )
1313 [ # # ]: 0 : : ( pSh == pCurrentSh ) )
1314 [ # # ][ # # ]: 0 : aSelEntry = aEntry; // kompletter Eintrag zum Selektieren
[ # # ]
1315 : : }
1316 : :
1317 [ # # ]: 0 : pSh = SfxObjectShell::GetNext( *pSh );
1318 : : }
1319 : :
1320 [ # # ]: 0 : aLbDocuments.InsertEntry( aStrActiveWin );
1321 : :
1322 [ # # ]: 0 : String aHidden = aLbEntries.GetHiddenTitle();
1323 [ # # ]: 0 : if (aHidden.Len())
1324 : : {
1325 [ # # ]: 0 : String aEntry = aHidden;
1326 [ # # ]: 0 : aEntry += aStrHidden;
1327 [ # # ]: 0 : aLbDocuments.InsertEntry( aEntry );
1328 : :
1329 [ # # ][ # # ]: 0 : if ( pManualSel && aHidden == *pManualSel )
[ # # ][ # # ]
1330 [ # # ][ # # ]: 0 : aSelEntry = aEntry;
1331 : : }
1332 : :
1333 [ # # ]: 0 : aLbDocuments.SetUpdateMode( sal_True );
1334 : :
1335 [ # # ][ # # ]: 0 : aLbDocuments.SelectEntry( aSelEntry );
[ # # ]
1336 : 0 : }
1337 : :
1338 : : //------------------------------------------------------------------------
1339 : :
1340 : 0 : void ScNavigatorDlg::MarkDataArea()
1341 : : {
1342 : 0 : ScTabViewShell* pViewSh = GetTabViewShell();
1343 : :
1344 [ # # ]: 0 : if ( pViewSh )
1345 : : {
1346 [ # # ]: 0 : if ( !pMarkArea )
1347 [ # # ][ # # ]: 0 : pMarkArea = new ScArea;
1348 : :
1349 [ # # ]: 0 : pViewSh->MarkDataArea();
1350 : 0 : ScRange aMarkRange;
1351 [ # # ][ # # ]: 0 : pViewSh->GetViewData()->GetMarkData().GetMarkArea(aMarkRange);
1352 : 0 : pMarkArea->nColStart = aMarkRange.aStart.Col();
1353 : 0 : pMarkArea->nRowStart = aMarkRange.aStart.Row();
1354 : 0 : pMarkArea->nColEnd = aMarkRange.aEnd.Col();
1355 : 0 : pMarkArea->nRowEnd = aMarkRange.aEnd.Row();
1356 : 0 : pMarkArea->nTab = aMarkRange.aStart.Tab();
1357 : : }
1358 : 0 : }
1359 : :
1360 : : //------------------------------------------------------------------------
1361 : :
1362 : 0 : void ScNavigatorDlg::UnmarkDataArea()
1363 : : {
1364 : 0 : ScTabViewShell* pViewSh = GetTabViewShell();
1365 : :
1366 [ # # ]: 0 : if ( pViewSh )
1367 : : {
1368 : 0 : pViewSh->Unmark();
1369 : 0 : DELETEZ( pMarkArea );
1370 : : }
1371 : 0 : }
1372 : :
1373 : : //------------------------------------------------------------------------
1374 : :
1375 : 0 : void ScNavigatorDlg::CheckDataArea()
1376 : : {
1377 [ # # ][ # # ]: 0 : if ( aTbxCmd.IsItemChecked( IID_DATA ) && pMarkArea )
[ # # ]
1378 : : {
1379 [ # # ][ # # ]: 0 : if ( nCurTab != pMarkArea->nTab
[ # # ][ # # ]
[ # # ]
1380 : : || nCurCol < pMarkArea->nColStart+1
1381 : : || nCurCol > pMarkArea->nColEnd+1
1382 : : || nCurRow < pMarkArea->nRowStart+1
1383 : : || nCurRow > pMarkArea->nRowEnd+1 )
1384 : : {
1385 : 0 : aTbxCmd.SetItemState( IID_DATA, TriState(STATE_CHECK) );
1386 : 0 : aTbxCmd.Select( IID_DATA );
1387 : : }
1388 : : }
1389 : 0 : }
1390 : :
1391 : : //------------------------------------------------------------------------
1392 : :
1393 : 0 : void ScNavigatorDlg::StartOfDataArea()
1394 : : {
1395 : : // pMarkArea auswerten ???
1396 : :
1397 [ # # ]: 0 : if ( GetViewData() )
1398 : : {
1399 [ # # ]: 0 : ScMarkData& rMark = pViewData->GetMarkData();
1400 : 0 : ScRange aMarkRange;
1401 [ # # ]: 0 : rMark.GetMarkArea( aMarkRange );
1402 : :
1403 : 0 : SCCOL nCol = aMarkRange.aStart.Col();
1404 : 0 : SCROW nRow = aMarkRange.aStart.Row();
1405 : :
1406 [ # # ][ # # ]: 0 : if ( (nCol+1 != aEdCol.GetCol()) || (nRow+1 != aEdRow.GetRow()) )
[ # # ][ # # ]
1407 [ # # ]: 0 : SetCurrentCell( nCol, nRow );
1408 : : }
1409 : 0 : }
1410 : :
1411 : : //------------------------------------------------------------------------
1412 : :
1413 : 0 : void ScNavigatorDlg::EndOfDataArea()
1414 : : {
1415 : : // pMarkArea auswerten ???
1416 : :
1417 [ # # ]: 0 : if ( GetViewData() )
1418 : : {
1419 [ # # ]: 0 : ScMarkData& rMark = pViewData->GetMarkData();
1420 : 0 : ScRange aMarkRange;
1421 [ # # ]: 0 : rMark.GetMarkArea( aMarkRange );
1422 : :
1423 : 0 : SCCOL nCol = aMarkRange.aEnd.Col();
1424 : 0 : SCROW nRow = aMarkRange.aEnd.Row();
1425 : :
1426 [ # # ][ # # ]: 0 : if ( (nCol+1 != aEdCol.GetCol()) || (nRow+1 != aEdRow.GetRow()) )
[ # # ][ # # ]
1427 [ # # ]: 0 : SetCurrentCell( nCol, nRow );
1428 : : }
1429 : 0 : }
1430 : :
1431 : : //------------------------------------------------------------------------
1432 : :
1433 : 0 : SfxChildAlignment ScNavigatorDlg::CheckAlignment(
1434 : : SfxChildAlignment eActAlign, SfxChildAlignment eAlign )
1435 : : {
1436 : : SfxChildAlignment eRetAlign;
1437 : :
1438 : : //! kein Andocken, wenn Listbox nicht da ???
1439 : :
1440 [ # # # ]: 0 : switch (eAlign)
1441 : : {
1442 : : case SFX_ALIGN_TOP:
1443 : : case SFX_ALIGN_HIGHESTTOP:
1444 : : case SFX_ALIGN_LOWESTTOP:
1445 : : case SFX_ALIGN_BOTTOM:
1446 : : case SFX_ALIGN_LOWESTBOTTOM:
1447 : : case SFX_ALIGN_HIGHESTBOTTOM:
1448 : 0 : eRetAlign = eActAlign; // nicht erlaubt
1449 : 0 : break;
1450 : :
1451 : : case SFX_ALIGN_LEFT:
1452 : : case SFX_ALIGN_RIGHT:
1453 : : case SFX_ALIGN_FIRSTLEFT:
1454 : : case SFX_ALIGN_LASTLEFT:
1455 : : case SFX_ALIGN_FIRSTRIGHT:
1456 : : case SFX_ALIGN_LASTRIGHT:
1457 : 0 : eRetAlign = eAlign; // erlaubt
1458 : 0 : break;
1459 : :
1460 : : default:
1461 : 0 : eRetAlign = eAlign;
1462 : 0 : break;
1463 : : }
1464 : 0 : return eRetAlign;
1465 [ + - ][ + - ]: 153 : }
1466 : :
1467 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|