LCOV - code coverage report
Current view: top level - libreoffice/sw/source/ui/utlui - navipi.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 743 0.1 %
Date: 2012-12-27 Functions: 1 60 1.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #define NAVIPI_CXX
      22             : 
      23             : #include <string>
      24             : #include <comphelper/string.hxx>
      25             : #include <svl/urlbmk.hxx>
      26             : #include <svl/stritem.hxx>
      27             : #include <svtools/filter.hxx>
      28             : #include <svl/urihelper.hxx>
      29             : #include <sot/formats.hxx>
      30             : #include <sot/filelist.hxx>
      31             : #include <sfx2/event.hxx>
      32             : #include <sfx2/imgmgr.hxx>
      33             : #include <sfx2/dispatch.hxx>
      34             : #include <sfx2/dockwin.hxx>
      35             : #include <vcl/toolbox.hxx>
      36             : #include <swtypes.hxx>  // fuer Pathfinder
      37             : #include <swmodule.hxx>
      38             : #include <view.hxx>
      39             : #include <navicfg.hxx>
      40             : #include <wrtsh.hxx>
      41             : #include <docsh.hxx>
      42             : #include <actctrl.hxx>
      43             : #include <IMark.hxx>
      44             : #include <navipi.hxx>
      45             : #include <content.hxx>
      46             : #include <workctrl.hxx>
      47             : #include <section.hxx>
      48             : #include <edtwin.hxx>
      49             : #include <sfx2/app.hxx>
      50             : #include <cmdid.h>
      51             : #include <helpid.h>
      52             : #include <ribbar.hrc>
      53             : #include <navipi.hrc>
      54             : #include <utlui.hrc>
      55             : 
      56             : #include "access.hrc"
      57             : 
      58             : #include <unomid.h>
      59             : 
      60             : #define PAGE_CHANGE_TIMEOUT 1000 //Timeout fuer Seitenwechsel
      61             : 
      62             : using namespace ::com::sun::star::uno;
      63             : using namespace ::com::sun::star::frame;
      64             : 
      65          10 : SFX_IMPL_CHILDWINDOW_CONTEXT( SwNavigationChild, SID_NAVIGATOR, SwView )
      66             : 
      67             : /*------------------------------------------------------------------------
      68             :     Bechreibung: Steuerzeichen aus dem Outline-Entry filtern
      69             : ------------------------------------------------------------------------*/
      70             : 
      71           0 : void SwNavigationPI::CleanEntry( String& rEntry )
      72             : {
      73           0 :     sal_uInt16 i = rEntry.Len();
      74           0 :     if( i )
      75           0 :         for( sal_Unicode* pStr = rEntry.GetBufferAccess(); i; --i, ++pStr )
      76           0 :             if( *pStr == 10 || *pStr == 9 )
      77           0 :                 *pStr = 0x20;
      78           0 : }
      79             : /*------------------------------------------------------------------------
      80             :  Beschreibung:  Ausfuehrung der Drag-Operation
      81             :                 mit und ohne Children
      82             : ------------------------------------------------------------------------*/
      83             : 
      84           0 : void SwNavigationPI::MoveOutline(sal_uInt16 nSource, sal_uInt16 nTarget,
      85             :                                                     sal_Bool bWithChildren)
      86             : {
      87           0 :     SwView *pView = GetCreateView();
      88           0 :     SwWrtShell &rSh = pView->GetWrtShell();
      89           0 :     if(nTarget < nSource || nTarget == USHRT_MAX)
      90           0 :         nTarget ++;
      91           0 :     if ( rSh.IsOutlineMovable( nSource ))
      92             :     {
      93             : 
      94           0 :         short nMove = nTarget-nSource; //( nDir<0 ) ? 1 : 0 ;
      95           0 :         rSh.GotoOutline(nSource);
      96           0 :         if (bWithChildren)
      97           0 :             rSh.MakeOutlineSel(nSource, nSource, sal_True);
      98             :         // Die selektierten Children zaehlen bei der Bewegung vorwaerts nicht mit
      99           0 :         sal_uInt16 nLastOutlinePos = rSh.GetOutlinePos(MAXLEVEL);
     100           0 :         if(bWithChildren && nMove > 1 &&
     101             :                 nLastOutlinePos < nTarget)
     102             :         {
     103           0 :             if(!rSh.IsCrsrPtAtEnd())
     104           0 :                 rSh.SwapPam();
     105           0 :             nMove -= nLastOutlinePos - nSource;
     106             :         }
     107           0 :         if(!bWithChildren || nMove < 1 || nLastOutlinePos < nTarget )
     108           0 :             rSh.MoveOutlinePara( nMove );
     109           0 :         rSh.ClearMark();
     110           0 :         rSh.GotoOutline( nSource + nMove);
     111           0 :         FillBox();
     112             :     }
     113             : 
     114           0 : }
     115             : 
     116             : 
     117             : /*------------------------------------------------------------------------
     118             :  Beschreibung:  Nach Goto einen Status Rahmenselektion aufheben
     119             : ------------------------------------------------------------------------*/
     120             : 
     121             : 
     122           0 : static void lcl_UnSelectFrm(SwWrtShell *pSh)
     123             : {
     124           0 :     if (pSh->IsFrmSelected())
     125             :     {
     126           0 :         pSh->UnSelectFrm();
     127           0 :         pSh->LeaveSelFrmMode();
     128             :     }
     129           0 : }
     130             : 
     131             : /*------------------------------------------------------------------------
     132             :  Beschreibung:  Select der Documentanzeige
     133             : ------------------------------------------------------------------------*/
     134             : 
     135             : 
     136           0 : IMPL_LINK( SwNavigationPI, DocListBoxSelectHdl, ListBox *, pBox )
     137             : {
     138           0 :     int nEntryIdx = pBox->GetSelectEntryPos();
     139             :     SwView *pView ;
     140           0 :     pView = SwModule::GetFirstView();
     141           0 :     while (nEntryIdx-- && pView)
     142             :     {
     143           0 :         pView = SwModule::GetNextView(pView);
     144             :     }
     145           0 :     if(!pView)
     146             :     {
     147             :         nEntryIdx == 0 ?
     148           0 :             aContentTree.ShowHiddenShell():
     149           0 :                 aContentTree.ShowActualView();
     150             : 
     151             : 
     152             :     }
     153             :     else
     154             :     {
     155           0 :         aContentTree.SetConstantShell(pView->GetWrtShellPtr());
     156             :     }
     157           0 :     return 0;
     158             : }
     159             : 
     160             : /*------------------------------------------------------------------------
     161             :  Beschreibung:  Fuellen der ListBox fuer Outline Sicht oder Dokumente
     162             :                 Der PI wird auf volle Groesse gesetzt
     163             : ------------------------------------------------------------------------*/
     164             : 
     165             : 
     166           0 : void SwNavigationPI::FillBox()
     167             : {
     168           0 :     if(pContentWrtShell)
     169             :     {
     170           0 :         aContentTree.SetHiddenShell( pContentWrtShell );
     171           0 :         aContentTree.Display(  sal_False );
     172             :     }
     173             :     else
     174             :     {
     175           0 :         SwView *pView = GetCreateView();
     176           0 :         if(!pView)
     177             :         {
     178           0 :             aContentTree.SetActiveShell(0);
     179             :         }
     180           0 :         else if( pView != pActContView)
     181             :         {
     182           0 :             SwWrtShell* pWrtShell = pView->GetWrtShellPtr();
     183           0 :             aContentTree.SetActiveShell(pWrtShell);
     184             :         }
     185             :         else
     186           0 :             aContentTree.Display( sal_True );
     187           0 :         pActContView = pView;
     188             :     }
     189           0 : }
     190             : 
     191             : 
     192           0 : void SwNavigationPI::UsePage(SwWrtShell *pSh)
     193             : {
     194           0 :     if (!pSh)
     195             :     {
     196           0 :         SwView *pView = GetCreateView();
     197           0 :         pSh = pView ? &pView->GetWrtShell() : 0;
     198           0 :         GetPageEdit().SetValue(1);
     199             :     }
     200           0 :     if (pSh)
     201             :     {
     202           0 :         const sal_uInt16 nPageCnt = pSh->GetPageCnt();
     203             :         sal_uInt16 nPhyPage, nVirPage;
     204           0 :         pSh->GetPageNum(nPhyPage, nVirPage);
     205             : 
     206           0 :         GetPageEdit().SetMax(nPageCnt);
     207           0 :         GetPageEdit().SetLast(nPageCnt);
     208           0 :         GetPageEdit().SetValue(nPhyPage);
     209             :     }
     210           0 : }
     211             : 
     212             : /*------------------------------------------------------------------------
     213             :  Beschreibung:  SelectHandler der Toolboxen
     214             : ------------------------------------------------------------------------*/
     215             : 
     216             : 
     217           0 : IMPL_LINK( SwNavigationPI, ToolBoxSelectHdl, ToolBox *, pBox )
     218             : {
     219           0 :     const sal_uInt16 nCurrItemId = pBox->GetCurItemId();
     220           0 :     SwView *pView = GetCreateView();
     221           0 :     if (!pView)
     222           0 :         return 1;
     223           0 :     SwWrtShell &rSh = pView->GetWrtShell();
     224             :     //MouseModifier fuer Outline-Move besorgen
     225             : 
     226             :     //Standard: Unterebenen werden mitgenommen
     227             :     // mit Ctrl Unterebenen nicht mitnehmen
     228           0 :     sal_Bool bOutlineWithChildren  = ( KEY_MOD1 != pBox->GetModifier());
     229           0 :     int nFuncId = 0;
     230           0 :     sal_Bool bFocusToDoc = sal_False;
     231           0 :     switch (nCurrItemId)
     232             :     {
     233             :         case FN_UP:
     234             :         case FN_DOWN:
     235             :         {
     236             :             // #i75416# move the execution of the search to an asynchronously called static link
     237           0 :             bool* pbNext = new bool( FN_DOWN == nCurrItemId );
     238           0 :             Application::PostUserEvent( STATIC_LINK(pView, SwView, MoveNavigationHdl), pbNext );
     239             :         }
     240           0 :         break;
     241             :         case FN_SHOW_ROOT:
     242             :         {
     243           0 :             aContentTree.ToggleToRoot();
     244             :         }
     245           0 :         break;
     246             :         case FN_SHOW_CONTENT_BOX:
     247             :         case FN_SELECT_CONTENT:
     248           0 :         if(pContextWin->GetFloatingWindow())
     249             :         {
     250           0 :             if(_IsZoomedIn() )
     251             :             {
     252           0 :                 _ZoomOut();
     253             :             }
     254             :             else
     255             :             {
     256           0 :                 _ZoomIn();
     257             :             }
     258             :         }
     259           0 :         return sal_True;
     260             :         // Funktionen, die eine direkte Aktion ausloesen
     261             : 
     262             :         case FN_SELECT_FOOTER:
     263             :         {
     264           0 :             rSh.MoveCrsr();
     265           0 :             const sal_uInt16 eType = rSh.GetFrmType(0,sal_False);
     266           0 :             if (eType & FRMTYPE_FOOTER)
     267             :             {
     268           0 :                 if (rSh.EndPg())
     269           0 :                     nFuncId = FN_END_OF_PAGE;
     270             :             }
     271           0 :             else if (rSh.GotoFooterTxt())
     272           0 :                 nFuncId = FN_TO_FOOTER;
     273           0 :             bFocusToDoc = sal_True;
     274             :         }
     275           0 :         break;
     276             :         case FN_SELECT_HEADER:
     277             :         {
     278           0 :             rSh.MoveCrsr();
     279           0 :             const sal_uInt16 eType = rSh.GetFrmType(0,sal_False);
     280           0 :             if (eType & FRMTYPE_HEADER)
     281             :             {
     282           0 :                 if (rSh.SttPg())
     283           0 :                     nFuncId = FN_START_OF_PAGE;
     284             :             }
     285           0 :             else if (rSh.GotoHeaderTxt())
     286           0 :                 nFuncId = FN_TO_HEADER;
     287           0 :             bFocusToDoc = sal_True;
     288             :         }
     289           0 :         break;
     290             :         case FN_SELECT_FOOTNOTE:
     291             :         {
     292           0 :             rSh.MoveCrsr();
     293           0 :             const sal_uInt16 eFrmType = rSh.GetFrmType(0,sal_False);
     294             :                 // aus Fussnote zum Anker springen
     295           0 :             if (eFrmType & FRMTYPE_FOOTNOTE)
     296             :             {
     297           0 :                 if (rSh.GotoFtnAnchor())
     298           0 :                     nFuncId = FN_FOOTNOTE_TO_ANCHOR;
     299             :             }
     300             :                 // andernfalls zuerst zum Fussnotentext springen; geht
     301             :                 // dies nicht, zur naechten Fussnote; geht auch dies
     302             :                 // nicht, zur vorhergehenden Fussnote
     303             :             else
     304             :             {
     305           0 :                 if (rSh.GotoFtnTxt())
     306           0 :                     nFuncId = FN_FOOTNOTE_TO_ANCHOR;
     307           0 :                 else if (rSh.GotoNextFtnAnchor())
     308           0 :                     nFuncId = FN_NEXT_FOOTNOTE;
     309           0 :                 else if (rSh.GotoPrevFtnAnchor())
     310           0 :                     nFuncId = FN_PREV_FOOTNOTE;
     311             :             }
     312           0 :             bFocusToDoc = sal_True;
     313             :         }
     314           0 :         break;
     315             : 
     316             :         case FN_SELECT_SET_AUTO_BOOKMARK:
     317           0 :             MakeMark();
     318           0 :         break;
     319             :         case FN_ITEM_DOWN:
     320             :         case FN_ITEM_UP:
     321             :         case FN_ITEM_LEFT:
     322             :         case FN_ITEM_RIGHT:
     323             :         case FN_GLOBAL_EDIT:
     324             :         {
     325           0 :             if(IsGlobalMode())
     326           0 :                 aGlobalTree.ExecCommand(nCurrItemId);
     327             :             else
     328           0 :                 aContentTree.ExecCommand(nCurrItemId, bOutlineWithChildren);
     329             :         }
     330           0 :         break;
     331             :         case FN_GLOBAL_SWITCH:
     332             :         {
     333           0 :             ToggleTree();
     334           0 :             pConfig->SetGlobalActive(IsGlobalMode());
     335             :         }
     336           0 :         break;
     337             :         case FN_GLOBAL_SAVE_CONTENT:
     338             :         {
     339           0 :             sal_Bool bSave = rSh.IsGlblDocSaveLinks();
     340           0 :             rSh.SetGlblDocSaveLinks( !bSave );
     341           0 :             pBox->CheckItem(FN_GLOBAL_SAVE_CONTENT, !bSave );
     342             :         }
     343           0 :         break;
     344             :     }
     345             : 
     346           0 :     if (nFuncId)
     347             :     {
     348           0 :         lcl_UnSelectFrm(&rSh);
     349             :     }
     350           0 :     if(bFocusToDoc)
     351           0 :         pView->GetEditWin().GrabFocus();
     352           0 :     return sal_True;
     353             : }
     354             : /*------------------------------------------------------------------------
     355             :  Beschreibung:  ClickHandler der Toolboxen
     356             : ------------------------------------------------------------------------*/
     357             : 
     358             : 
     359           0 : IMPL_LINK( SwNavigationPI, ToolBoxClickHdl, ToolBox *, pBox )
     360             : {
     361           0 :     const sal_uInt16 nCurrItemId = pBox->GetCurItemId();
     362           0 :     switch (nCurrItemId)
     363             :     {
     364             :         case FN_GLOBAL_UPDATE:
     365             :         case FN_GLOBAL_OPEN:
     366             :         {
     367           0 :             aGlobalTree.TbxMenuHdl(nCurrItemId, pBox);
     368             :         }
     369           0 :         break;
     370             :     }
     371             : 
     372           0 :     return sal_True;
     373             : }
     374             : 
     375           0 : IMPL_LINK( SwNavigationPI, ToolBoxDropdownClickHdl, ToolBox*, pBox )
     376             : {
     377           0 :     const sal_uInt16 nCurrItemId = pBox->GetCurItemId();
     378           0 :     switch (nCurrItemId)
     379             :     {
     380             :         case FN_CREATE_NAVIGATION:
     381             :         {
     382           0 :             CreateNavigationTool(pBox->GetItemRect(FN_CREATE_NAVIGATION), sal_True);
     383             :         }
     384           0 :         break;
     385             : 
     386             :         case FN_DROP_REGION:
     387             :         {
     388             :             static const char* aHIDs[] =
     389             :             {
     390             :                 HID_NAVI_DRAG_HYP,
     391             :                 HID_NAVI_DRAG_LINK,
     392             :                 HID_NAVI_DRAG_COPY,
     393             :             };
     394           0 :             PopupMenu *pMenu = new PopupMenu;
     395           0 :             for (sal_uInt16 i = 0; i <= REGION_MODE_EMBEDDED; i++)
     396             :             {
     397           0 :                 pMenu->InsertItem( i + 1, aContextArr[i] );
     398           0 :                 pMenu->SetHelpId(i + 1, aHIDs[i]);
     399             :             }
     400           0 :             pMenu->CheckItem( nRegionMode + 1 );
     401           0 :             pMenu->SetSelectHdl(LINK(this, SwNavigationPI, MenuSelectHdl));
     402           0 :             pBox->SetItemDown( nCurrItemId, sal_True );
     403             :             pMenu->Execute( pBox,
     404             :                     pBox->GetItemRect(FN_DROP_REGION),
     405           0 :                     POPUPMENU_EXECUTE_DOWN );
     406           0 :             pBox->SetItemDown( nCurrItemId, sal_False );
     407           0 :             pBox->EndSelection();
     408           0 :             delete pMenu;
     409           0 :             pBox->Invalidate();
     410             :         }
     411           0 :         break;
     412             :         case FN_OUTLINE_LEVEL:
     413             :         {
     414           0 :             PopupMenu *pMenu = new PopupMenu;
     415           0 :             for (sal_uInt16 i = 101; i <= 100 + MAXLEVEL; i++)
     416             :             {
     417           0 :                 pMenu->InsertItem( i, String::CreateFromInt32(i - 100) );
     418           0 :                 pMenu->SetHelpId( i, HID_NAVI_OUTLINES );
     419             :             }
     420           0 :             pMenu->CheckItem( aContentTree.GetOutlineLevel() + 100 );
     421           0 :             pMenu->SetSelectHdl(LINK(this, SwNavigationPI, MenuSelectHdl));
     422           0 :             pBox->SetItemDown( nCurrItemId, sal_True );
     423             :             pMenu->Execute( pBox,
     424             :                     pBox->GetItemRect(FN_OUTLINE_LEVEL),
     425           0 :                     POPUPMENU_EXECUTE_DOWN );
     426           0 :             pBox->SetItemDown( nCurrItemId, sal_False );
     427           0 :             delete pMenu;
     428           0 :             pBox->EndSelection();
     429           0 :             pBox->Invalidate();
     430             :         }
     431           0 :         break;
     432             :     }
     433           0 :     return sal_True;
     434             : }
     435             : 
     436             : 
     437           0 : SwNavHelpToolBox::SwNavHelpToolBox(SwNavigationPI* pParent, const ResId &rResId) :
     438           0 :             SwHelpToolBox(pParent, rResId)
     439           0 : {}
     440             : 
     441           0 : void SwNavHelpToolBox::MouseButtonDown(const MouseEvent &rEvt)
     442             : {
     443           0 :     if(rEvt.GetButtons() == MOUSE_LEFT &&
     444           0 :             FN_CREATE_NAVIGATION == GetItemId(rEvt.GetPosPixel()))
     445             :     {
     446           0 :         ((SwNavigationPI*)GetParent())->CreateNavigationTool(GetItemRect(FN_CREATE_NAVIGATION), sal_False);
     447             :     }
     448             :     else
     449           0 :         SwHelpToolBox::MouseButtonDown(rEvt);
     450           0 : }
     451             : 
     452           0 : void SwNavigationPI::CreateNavigationTool(const Rectangle& rRect, sal_Bool bSetFocus)
     453             : {
     454           0 :     Reference< XFrame > xFrame = GetCreateView()->GetViewFrame()->GetFrame().GetFrameInterface();
     455             :     SwScrollNaviPopup* pPopup = new
     456             :         SwScrollNaviPopup(FN_SCROLL_NAVIGATION,
     457           0 :                           xFrame );
     458             : 
     459           0 :     Rectangle aRect(rRect);
     460           0 :     Point aT1 = aRect.TopLeft();
     461           0 :     aT1 = pPopup->GetParent()->OutputToScreenPixel(pPopup->GetParent()->AbsoluteScreenToOutputPixel(aContentToolBox.OutputToAbsoluteScreenPixel(aT1)));
     462           0 :     aRect.SetPos(aT1);
     463           0 :     pPopup->StartPopupMode(aRect, FLOATWIN_POPUPMODE_RIGHT|FLOATWIN_POPUPMODE_ALLOWTEAROFF);
     464           0 :     SetPopupWindow( pPopup );
     465           0 :     if(bSetFocus)
     466             :     {
     467           0 :         pPopup->EndPopupMode(FLOATWIN_POPUPMODEEND_TEAROFF);
     468           0 :         pPopup->GrabFocus();
     469           0 :     }
     470           0 : }
     471             : 
     472           0 : void  SwNavHelpToolBox::RequestHelp( const HelpEvent& rHEvt )
     473             : {
     474           0 :     sal_uInt16 nItemId = GetItemId(ScreenToOutputPixel(rHEvt.GetMousePosPixel()));
     475           0 :     if( FN_UP == nItemId || FN_DOWN == nItemId )
     476             :     {
     477           0 :         SetItemText(nItemId, SwScrollNaviPopup::GetQuickHelpText((FN_DOWN == nItemId)));
     478             :     }
     479           0 :     SwHelpToolBox::RequestHelp(rHEvt);
     480           0 : }
     481             : 
     482             : /*------------------------------------------------------------------------
     483             :  Beschreibung:  Action-Handler Edit; wechselt auf die Seite, wenn
     484             :                 nicht Gliederungssicht angeschaltet ist.
     485             : ------------------------------------------------------------------------*/
     486             : 
     487             : 
     488           0 : IMPL_LINK( SwNavigationPI, EditAction, NumEditAction *, pEdit )
     489             : {
     490           0 :     SwView *pView = GetCreateView();
     491           0 :     if (pView)
     492             :     {
     493           0 :         if(aPageChgTimer.IsActive())
     494           0 :             aPageChgTimer.Stop();
     495           0 :         pCreateView->GetWrtShell().GotoPage((sal_uInt16)pEdit->GetValue(), sal_True);
     496           0 :         pCreateView->GetEditWin().GrabFocus();
     497           0 :         pCreateView->GetViewFrame()->GetBindings().Invalidate(FN_STAT_PAGE);
     498             :     }
     499           0 :     return 0;
     500             : }
     501             : 
     502             : /*------------------------------------------------------------------------
     503             :  Beschreibung:  Falls die Seite eingestellt werden kann, wird hier
     504             :                 das Maximum gesetzt.
     505             : ------------------------------------------------------------------------*/
     506             : 
     507             : 
     508           0 : IMPL_LINK( SwNavigationPI, EditGetFocus, NumEditAction *, pEdit )
     509             : {
     510           0 :     SwView *pView = GetCreateView();
     511           0 :     if (!pView)
     512           0 :         return 0;
     513           0 :     SwWrtShell &rSh = pView->GetWrtShell();
     514             : 
     515           0 :     const sal_uInt16 nPageCnt = rSh.GetPageCnt();
     516           0 :     pEdit->SetMax(nPageCnt);
     517           0 :     pEdit->SetLast(nPageCnt);
     518           0 :     return 0;
     519             : }
     520             : 
     521           0 : sal_Bool SwNavigationPI::Close()
     522             : {
     523           0 :     SfxViewFrame* pVFrame = pCreateView->GetViewFrame();
     524           0 :     pVFrame->GetBindings().Invalidate(SID_NAVIGATOR);
     525           0 :     pVFrame->GetDispatcher()->Execute(SID_NAVIGATOR);
     526           0 :     return sal_True;
     527             : }
     528             : 
     529             : /*------------------------------------------------------------------------
     530             :  Beschreibung:  Setzen einer automatischen Marke
     531             : ------------------------------------------------------------------------*/
     532             : 
     533             : 
     534           0 : void SwNavigationPI::MakeMark()
     535             : {
     536           0 :     SwView *pView = GetCreateView();
     537           0 :     if (!pView) return;
     538           0 :     SwWrtShell &rSh = pView->GetWrtShell();
     539           0 :     IDocumentMarkAccess* const pMarkAccess = rSh.getIDocumentMarkAccess();
     540             : 
     541             :     // collect and sort navigator reminder names
     542           0 :     ::std::vector< ::rtl::OUString > vNavMarkNames;
     543           0 :     for(IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getMarksBegin();
     544           0 :         ppMark != pMarkAccess->getMarksEnd();
     545             :         ++ppMark)
     546           0 :         if( IDocumentMarkAccess::GetType(**ppMark) == IDocumentMarkAccess::NAVIGATOR_REMINDER )
     547           0 :             vNavMarkNames.push_back(ppMark->get()->GetName());
     548           0 :     ::std::sort(vNavMarkNames.begin(), vNavMarkNames.end());
     549             : 
     550             :     // we are maxed out and delete one
     551             :     // nAutoMarkIdx rotates through the available MarkNames
     552             :     // this assumes that IDocumentMarkAccess generates Names in ascending order
     553           0 :     if(vNavMarkNames.size() == MAX_MARKS)
     554           0 :         pMarkAccess->deleteMark(pMarkAccess->findMark(vNavMarkNames[nAutoMarkIdx]));
     555             : 
     556           0 :     rSh.SetBookmark(KeyCode(), ::rtl::OUString(), ::rtl::OUString(), IDocumentMarkAccess::NAVIGATOR_REMINDER);
     557           0 :     SwView::SetActMark( nAutoMarkIdx );
     558             : 
     559           0 :     if(++nAutoMarkIdx == MAX_MARKS)
     560           0 :         nAutoMarkIdx = 0;
     561             : }
     562             : 
     563           0 : void SwNavigationPI::GotoPage()
     564             : {
     565           0 :     if ( pContextWin->GetFloatingWindow() && pContextWin->GetFloatingWindow()->IsRollUp())
     566           0 :         _ZoomIn();
     567           0 :     if(IsGlobalMode())
     568           0 :         ToggleTree();
     569           0 :     UsePage(0);
     570           0 :     GetPageEdit().GrabFocus();
     571           0 : }
     572             : 
     573           0 : void SwNavigationPI::_ZoomOut()
     574             : {
     575           0 :     if (_IsZoomedIn())
     576             :     {
     577           0 :         FloatingWindow* pFloat = pContextWin->GetFloatingWindow();
     578           0 :         bIsZoomedIn = sal_False;
     579           0 :         Size aSz(GetOutputSizePixel());
     580           0 :         aSz.Height() = nZoomOut;
     581           0 :         Size aMinOutSizePixel = ((SfxDockingWindow*)GetParent())->GetMinOutputSizePixel();
     582           0 :         ((SfxDockingWindow*)GetParent())->SetMinOutputSizePixel(Size(
     583           0 :                             aMinOutSizePixel.Width(),nZoomOutInit));
     584           0 :         pFloat->SetOutputSizePixel(aSz);
     585           0 :         FillBox();
     586           0 :         if(IsGlobalMode())
     587             :         {
     588           0 :             aGlobalTree.ShowTree();
     589             :         }
     590             :         else
     591             :         {
     592           0 :             aContentTree.ShowTree();
     593           0 :             aDocListBox.Show();
     594             :         }
     595           0 :         SvTreeListEntry* pFirst = aContentTree.FirstSelected();
     596           0 :         if(pFirst)
     597           0 :             aContentTree.Select(pFirst, sal_True); // toolbox enablen
     598           0 :         pConfig->SetSmall( sal_False );
     599           0 :         aContentToolBox.CheckItem(FN_SHOW_CONTENT_BOX);
     600             :     }
     601           0 : }
     602             : 
     603           0 : void SwNavigationPI::_ZoomIn()
     604             : {
     605           0 :     FloatingWindow* pFloat = pContextWin->GetFloatingWindow();
     606           0 :     if (pFloat &&
     607           0 :         (!_IsZoomedIn() || ( pContextWin->GetFloatingWindow()->IsRollUp())))
     608             :     {
     609           0 :         aContentTree.HideTree();
     610           0 :         aDocListBox.Hide();
     611           0 :         aGlobalTree.HideTree();
     612           0 :         bIsZoomedIn = sal_True;
     613           0 :         Size aSz(GetOutputSizePixel());
     614           0 :         if( aSz.Height() > nZoomIn )
     615           0 :             nZoomOut = ( short ) aSz.Height();
     616             : 
     617           0 :         aSz.Height() = nZoomIn;
     618           0 :         Size aMinOutSizePixel = ((SfxDockingWindow*)GetParent())->GetMinOutputSizePixel();
     619           0 :         ((SfxDockingWindow*)GetParent())->SetMinOutputSizePixel(Size(
     620           0 :                             aMinOutSizePixel.Width(), aSz.Height()));
     621           0 :         pFloat->SetOutputSizePixel(aSz);
     622           0 :         SvTreeListEntry* pFirst = aContentTree.FirstSelected();
     623           0 :         if(pFirst)
     624           0 :             aContentTree.Select(pFirst, sal_True); // toolbox enablen
     625           0 :         pConfig->SetSmall( sal_True );
     626           0 :         aContentToolBox.CheckItem(FN_SHOW_CONTENT_BOX, sal_False);
     627             :     }
     628           0 : }
     629             : 
     630           0 : void SwNavigationPI::Resize()
     631             : {
     632           0 :     Window* pParent = GetParent();
     633           0 :     FloatingWindow* pFloat =  ((DockingWindow*)pParent)->GetFloatingWindow();
     634           0 :     Size aNewSize;
     635           0 :     if( !_IsZoomedIn() )
     636             :     {
     637             :         //change the minimum width depending on the dock status
     638           0 :         Size aMinOutSizePixel = ((SfxDockingWindow*)pParent)->GetMinOutputSizePixel();
     639           0 :         if( pFloat)
     640             :         {
     641           0 :             aNewSize = pFloat->GetOutputSizePixel();
     642           0 :             aMinOutSizePixel.Width() = nWishWidth;
     643           0 :             aMinOutSizePixel.Height() = _IsZoomedIn() ? nZoomIn : nZoomOutInit;
     644             :         }
     645             :         else
     646             :         {
     647           0 :             aNewSize = pParent->GetOutputSizePixel();
     648           0 :             aMinOutSizePixel.Width() = 0;
     649           0 :             aMinOutSizePixel.Height() = 0;
     650             :         }
     651           0 :         ((SfxDockingWindow*)GetParent())->SetMinOutputSizePixel(aMinOutSizePixel);
     652             : 
     653           0 :         const Point aPos = aContentTree.GetPosPixel();
     654           0 :         Point aLBPos = aDocListBox.GetPosPixel();
     655           0 :         long nDist = aPos.X();
     656           0 :         aNewSize.Height() -= (aPos.Y() + aPos.X() + nDocLBIniHeight + nDist);
     657           0 :         aNewSize.Width() -= 2 * nDist;
     658           0 :         aLBPos.Y() = aPos.Y() + aNewSize.Height() + nDist;
     659           0 :         aDocListBox.Show(!aGlobalTree.IsVisible() && aLBPos.Y() > aPos.Y() );
     660             : 
     661           0 :         Size aDocLBSz = aDocListBox.GetSizePixel();
     662           0 :         aDocLBSz.Width() = aNewSize.Width();
     663           0 :         if(aNewSize.Height() < 0)
     664           0 :             aDocLBSz.Height() = 0;
     665             :         else
     666           0 :             aDocLBSz.Height() = nDocLBIniHeight;
     667           0 :         aContentTree.SetSizePixel(aNewSize);
     668             :         // GlobalTree faengt weiter oben an und reicht bis ganz unten
     669           0 :         aNewSize.Height() += (nDist + nDocLBIniHeight + aPos.Y() - aGlobalTree.GetPosPixel().Y());
     670           0 :         aGlobalTree.SetSizePixel(aNewSize);
     671           0 :         aDocListBox.setPosSizePixel( aLBPos.X(), aLBPos.Y(),
     672           0 :                                      aDocLBSz.Width(), aDocLBSz.Height(),
     673           0 :                                       WINDOW_POSSIZE_X|WINDOW_POSSIZE_Y|WINDOW_POSSIZE_WIDTH);
     674             : 
     675             :     }
     676           0 : }
     677             : 
     678           0 : SwNavigationPI::SwNavigationPI( SfxBindings* _pBindings,
     679             :                                 SfxChildWindowContext* pCw,
     680             :                                 Window* pParent) :
     681             : 
     682             :     Window( pParent, SW_RES(DLG_NAVIGATION_PI)),
     683             :     SfxControllerItem( SID_DOCFULLNAME, *_pBindings ),
     684             : 
     685             :     aContentToolBox(this, SW_RES(TB_CONTENT)),
     686             :     aGlobalToolBox(this, SW_RES(TB_GLOBAL)),
     687             :     aContentImageList(SW_RES(IL_CONTENT)),
     688             :     aContentTree(this, SW_RES(TL_CONTENT)),
     689             :     aGlobalTree(this, SW_RES(TL_GLOBAL)),
     690             :     aDocListBox(this, SW_RES(LB_DOCS)),
     691             : 
     692             :     pxObjectShell(0),
     693             :     pContentView(0),
     694             :     pContentWrtShell(0),
     695             :     pActContView(0),
     696             :     pCreateView(0),
     697             :     pPopupWindow(0),
     698             :     pFloatingWindow(0),
     699             : 
     700             :     pContextWin(pCw),
     701             : 
     702           0 :     pConfig(SW_MOD()->GetNavigationConfig()),
     703             :     rBindings(*_pBindings),
     704             : 
     705             :     nWishWidth(0),
     706             :     nAutoMarkIdx(1),
     707             :     nRegionMode(REGION_MODE_NONE),
     708             : 
     709             :     bSmallMode(sal_False),
     710             :     bIsZoomedIn(sal_False),
     711             :     bPageCtrlsVisible(sal_False),
     712           0 :     bGlobalMode(sal_False)
     713             : {
     714           0 :     GetCreateView();
     715           0 :     InitImageList();
     716             : 
     717           0 :     aContentToolBox.SetHelpId(HID_NAVIGATOR_TOOLBOX );
     718           0 :     aGlobalToolBox.SetHelpId(HID_NAVIGATOR_GLOBAL_TOOLBOX);
     719           0 :     aDocListBox.SetHelpId(HID_NAVIGATOR_LISTBOX );
     720             : 
     721           0 :     nDocLBIniHeight = aDocListBox.GetSizePixel().Height();
     722           0 :     nZoomOutInit = nZoomOut = Resource::ReadShortRes();
     723             : 
     724             :     //NumericField in die Toolbox einfuegen
     725             :     NumEditAction* pEdit = new NumEditAction(
     726           0 :                     &aContentToolBox, SW_RES(NF_PAGE ));
     727           0 :     pEdit->SetActionHdl(LINK(this, SwNavigationPI, EditAction));
     728           0 :     pEdit->SetGetFocusHdl(LINK(this, SwNavigationPI, EditGetFocus));
     729           0 :     pEdit->SetAccessibleName(pEdit->GetQuickHelpText());
     730           0 :     pEdit->SetUpHdl(LINK(this, SwNavigationPI, PageEditModifyHdl));
     731           0 :     pEdit->SetDownHdl(LINK(this, SwNavigationPI, PageEditModifyHdl));
     732             : 
     733           0 :     bPageCtrlsVisible = sal_True;
     734             : 
     735             :     //doppelte Separatoren sind nicht erlaubt, also muss
     736             :     //die passende Groesse anders ermittelt werden
     737           0 :     Rectangle aFirstRect = aContentToolBox.GetItemRect(FN_SELECT_FOOTNOTE);
     738           0 :     Rectangle aSecondRect = aContentToolBox.GetItemRect(FN_SELECT_HEADER);
     739           0 :     sal_uInt16 nWidth = sal_uInt16(aFirstRect.Left() - aSecondRect.Left());
     740             : 
     741           0 :     Size aItemWinSize( nWidth , aFirstRect.Bottom() - aFirstRect.Top() );
     742           0 :     pEdit->SetSizePixel(aItemWinSize);
     743           0 :     aContentToolBox.InsertSeparator(4);
     744           0 :     aContentToolBox.InsertWindow( FN_PAGENUMBER, pEdit, 0, 4);
     745           0 :     aContentToolBox.InsertSeparator(4);
     746           0 :     aContentToolBox.SetHelpId(FN_PAGENUMBER, HID_NAVI_TBX16);
     747           0 :     aContentToolBox.ShowItem( FN_PAGENUMBER );
     748             : 
     749           0 :     for( sal_uInt16 i = 0; i <= REGION_MODE_EMBEDDED; i++  )
     750             :     {
     751           0 :         aContextArr[i] = SW_RESSTR(ST_HYPERLINK + i);
     752           0 :         aStatusArr[i] = SW_RESSTR(ST_STATUS_FIRST + i);
     753             :     }
     754           0 :     aStatusArr[3] = SW_RESSTR(ST_ACTIVE_VIEW);
     755           0 :     FreeResource();
     756             : 
     757             : 
     758           0 :     const Size& rOutSize =  GetOutputSizePixel();
     759             : 
     760           0 :     nZoomIn = (short)rOutSize.Height();
     761             : 
     762             :     // Make sure the toolbox has a size that fits all its contents
     763           0 :     Size aContentToolboxSize( aContentToolBox.CalcWindowSizePixel() );
     764           0 :     aContentToolBox.SetOutputSizePixel( aContentToolboxSize );
     765             : 
     766             :     // position listbox below toolbar and add some space
     767           0 :     long nListboxYPos = aContentToolBox.GetPosPixel().Y() + aContentToolboxSize.Height() + 4;
     768             : 
     769             :     //Der linke und rechte Rand um die Toolboxen soll gleich sein
     770           0 :     nWishWidth = aContentToolboxSize.Width();
     771           0 :     nWishWidth += 2 * aContentToolBox.GetPosPixel().X();
     772             : 
     773           0 :     FloatingWindow* pFloat =  ((DockingWindow*)pParent)->GetFloatingWindow();
     774           0 :     Size aMinSize(pFloat ? nWishWidth : 0, pFloat ? nZoomOutInit : 0);
     775           0 :     ((SfxDockingWindow*)pParent)->SetMinOutputSizePixel(aMinSize);
     776           0 :     SetOutputSizePixel( Size( nWishWidth, nZoomOutInit));
     777           0 :     Size aTmpParentSize(((SfxDockingWindow*)pParent)->GetSizePixel());
     778           0 :     if(
     779             :         (
     780           0 :            aTmpParentSize.Width() < aMinSize.Width() ||
     781           0 :            aTmpParentSize.Height() < aMinSize.Height()
     782             :         )
     783             :         &&
     784           0 :         ((SfxDockingWindow*)pParent)->GetFloatingWindow() &&
     785           0 :         !((SfxDockingWindow*)pParent)->GetFloatingWindow()->IsRollUp()
     786             :       )
     787           0 :         ((SfxDockingWindow*)pParent)->SetOutputSizePixel(aMinSize);
     788             : 
     789           0 :     aContentTree.setPosSizePixel( 0, nListboxYPos, 0, 0, WINDOW_POSSIZE_Y );
     790           0 :     aContentTree.SetStyle( aContentTree.GetStyle()|WB_HASBUTTONS|WB_HASBUTTONSATROOT|
     791           0 :                             WB_CLIPCHILDREN|WB_HSCROLL|WB_FORCE_MAKEVISIBLE );
     792           0 :     aContentTree.SetSpaceBetweenEntries(3);
     793           0 :     aContentTree.SetSelectionMode( SINGLE_SELECTION );
     794             :     aContentTree.SetDragDropMode(   SV_DRAGDROP_CTRL_MOVE |
     795             :                                     SV_DRAGDROP_CTRL_COPY |
     796           0 :                                     SV_DRAGDROP_ENABLE_TOP );
     797           0 :     aContentTree.EnableAsyncDrag(sal_True);
     798           0 :     aContentTree.ShowTree();
     799           0 :     aContentToolBox.CheckItem(FN_SHOW_CONTENT_BOX, sal_True);
     800             : 
     801             : //  TreeListBox fuer Globaldokument
     802           0 :     aGlobalTree.setPosSizePixel( 0, nListboxYPos, 0, 0, WINDOW_POSSIZE_Y );
     803           0 :     aGlobalTree.SetSelectionMode( MULTIPLE_SELECTION );
     804           0 :     aGlobalTree.SetStyle( aGlobalTree.GetStyle()|WB_HASBUTTONS|WB_HASBUTTONSATROOT|
     805           0 :                                 WB_CLIPCHILDREN|WB_HSCROLL );
     806           0 :     Size aGlblSize(aGlobalToolBox.CalcWindowSizePixel());
     807           0 :     aGlobalToolBox.SetSizePixel(aGlblSize);
     808             : 
     809             : //  Handler
     810             : 
     811           0 :     Link aLk = LINK(this, SwNavigationPI, ToolBoxSelectHdl);
     812           0 :     aContentToolBox.SetSelectHdl( aLk );
     813           0 :     aGlobalToolBox.SetSelectHdl( aLk );
     814             :     aDocListBox.SetSelectHdl(LINK(this, SwNavigationPI,
     815           0 :                                                     DocListBoxSelectHdl));
     816           0 :     aContentToolBox.SetClickHdl( LINK(this, SwNavigationPI, ToolBoxClickHdl) );
     817           0 :     aContentToolBox.SetDropdownClickHdl( LINK(this, SwNavigationPI, ToolBoxDropdownClickHdl) );
     818           0 :     aGlobalToolBox.SetClickHdl( LINK(this, SwNavigationPI, ToolBoxClickHdl) );
     819           0 :     aGlobalToolBox.SetDropdownClickHdl( LINK(this, SwNavigationPI, ToolBoxDropdownClickHdl) );
     820           0 :     aGlobalToolBox.CheckItem(FN_GLOBAL_SWITCH, sal_True);
     821             : 
     822           0 :     Font aFont(GetFont());
     823           0 :     aFont.SetWeight(WEIGHT_NORMAL);
     824           0 :     GetPageEdit().SetFont(aFont);
     825           0 :     aFont = aContentTree.GetFont();
     826           0 :     aFont.SetWeight(WEIGHT_NORMAL);
     827           0 :     aContentTree.SetFont(aFont);
     828           0 :     aGlobalTree.SetFont(aFont);
     829             : 
     830           0 :     StartListening(*SFX_APP());
     831           0 :     if ( pCreateView )
     832           0 :         StartListening(*pCreateView);
     833           0 :     SfxImageManager* pImgMan = SfxImageManager::GetImageManager( SW_MOD() );
     834           0 :     pImgMan->RegisterToolBox(&aContentToolBox, SFX_TOOLBOX_CHANGEOUTSTYLE);
     835           0 :     pImgMan->RegisterToolBox(&aGlobalToolBox, SFX_TOOLBOX_CHANGEOUTSTYLE);
     836             : 
     837           0 :     aContentToolBox.SetItemBits( FN_CREATE_NAVIGATION, aContentToolBox.GetItemBits( FN_CREATE_NAVIGATION ) | TIB_DROPDOWNONLY );
     838           0 :     aContentToolBox.SetItemBits( FN_DROP_REGION, aContentToolBox.GetItemBits( FN_DROP_REGION ) | TIB_DROPDOWNONLY );
     839           0 :     aContentToolBox.SetItemBits( FN_OUTLINE_LEVEL, aContentToolBox.GetItemBits( FN_OUTLINE_LEVEL ) | TIB_DROPDOWNONLY );
     840             : 
     841           0 :     if(IsGlobalDoc())
     842             :     {
     843           0 :         SwView *pActView = GetCreateView();
     844             :         aGlobalToolBox.CheckItem(FN_GLOBAL_SAVE_CONTENT,
     845           0 :                     pActView->GetWrtShellPtr()->IsGlblDocSaveLinks());
     846           0 :         if(pConfig->IsGlobalActive())
     847           0 :             ToggleTree();
     848           0 :         aGlobalTree.GrabFocus();
     849             :     }
     850             :     else
     851           0 :         aContentTree.GrabFocus();
     852           0 :     UsePage(0);
     853           0 :     aPageChgTimer.SetTimeoutHdl(LINK(this, SwNavigationPI, ChangePageHdl));
     854           0 :     aPageChgTimer.SetTimeout(PAGE_CHANGE_TIMEOUT);
     855             : 
     856           0 :     aContentTree.SetAccessibleName(SW_RESSTR(STR_ACCESS_TL_CONTENT));
     857           0 :     aGlobalTree.SetAccessibleName(SW_RESSTR(STR_ACCESS_TL_GLOBAL));
     858           0 :     aDocListBox.SetAccessibleName(aStatusArr[3]);
     859           0 : }
     860             : 
     861           0 : SwNavigationPI::~SwNavigationPI()
     862             : {
     863           0 :     if(IsGlobalDoc() && !IsGlobalMode())
     864             :     {
     865           0 :         SwView *pView = GetCreateView();
     866           0 :         SwWrtShell &rSh = pView->GetWrtShell();
     867           0 :         if( !rSh.IsAllProtect() )
     868           0 :             pView->GetDocShell()->SetReadOnlyUI(sal_False);
     869             :     }
     870             : 
     871           0 :     EndListening(*SFX_APP());
     872             : 
     873           0 :     SfxImageManager* pImgMan = SfxImageManager::GetImageManager( SW_MOD() );
     874           0 :     pImgMan->ReleaseToolBox(&aContentToolBox);
     875           0 :     pImgMan->ReleaseToolBox(&aGlobalToolBox);
     876           0 :     delete aContentToolBox.GetItemWindow(FN_PAGENUMBER);
     877           0 :     aContentToolBox.Clear();
     878           0 :     if(pxObjectShell)
     879             :     {
     880           0 :         if(pxObjectShell->Is())
     881           0 :             (*pxObjectShell)->DoClose();
     882           0 :         delete pxObjectShell;
     883             :     }
     884           0 :     delete pPopupWindow;
     885           0 :     delete pFloatingWindow;
     886             : 
     887           0 :     if ( IsBound() )
     888           0 :         rBindings.Release(*this);
     889           0 : }
     890             : 
     891           0 : void SwNavigationPI::SetPopupWindow( SfxPopupWindow* pWindow )
     892             : {
     893           0 :     pPopupWindow = pWindow;
     894           0 :     pPopupWindow->SetPopupModeEndHdl( LINK( this, SwNavigationPI, PopupModeEndHdl ));
     895           0 :     pPopupWindow->SetDeleteLink_Impl( LINK( this, SwNavigationPI, ClosePopupWindow ));
     896           0 : }
     897             : 
     898           0 : IMPL_LINK_NOARG(SwNavigationPI, PopupModeEndHdl)
     899             : {
     900           0 :     if ( pPopupWindow->IsVisible() )
     901             :     {
     902             :         // Replace floating window with popup window and destroy
     903             :         // floating window instance.
     904           0 :         delete pFloatingWindow;
     905           0 :         pFloatingWindow = pPopupWindow;
     906           0 :         pPopupWindow    = 0;
     907             :     }
     908             :     else
     909             :     {
     910             :         // Popup window has been closed by the user. No replacement, instance
     911             :         // will destroy itself.
     912           0 :         pPopupWindow = 0;
     913             :     }
     914             : 
     915           0 :     return 1;
     916             : }
     917             : 
     918           0 : IMPL_LINK( SwNavigationPI, ClosePopupWindow, SfxPopupWindow *, pWindow )
     919             : {
     920           0 :     if ( pWindow == pFloatingWindow )
     921           0 :         pFloatingWindow = 0;
     922             :     else
     923           0 :         pPopupWindow = 0;
     924             : 
     925           0 :     return 1;
     926             : }
     927             : 
     928           0 : void SwNavigationPI::StateChanged( sal_uInt16 nSID, SfxItemState /*eState*/,
     929             :                                             const SfxPoolItem* /*pState*/ )
     930             : {
     931           0 :     if(nSID == SID_DOCFULLNAME)
     932             :     {
     933           0 :         SwView *pActView = GetCreateView();
     934           0 :         if(pActView)
     935             :         {
     936           0 :             SwWrtShell* pWrtShell = pActView->GetWrtShellPtr();
     937           0 :             aContentTree.SetActiveShell(pWrtShell);
     938           0 :             sal_Bool bGlobal = IsGlobalDoc();
     939           0 :             aContentToolBox.EnableItem(FN_GLOBAL_SWITCH, bGlobal);
     940           0 :             if( (!bGlobal && IsGlobalMode()) ||
     941           0 :                     (!IsGlobalMode() && pConfig->IsGlobalActive()) )
     942             :             {
     943           0 :                 ToggleTree();
     944             :             }
     945           0 :             if(bGlobal)
     946             :             {
     947           0 :                 aGlobalToolBox.CheckItem(FN_GLOBAL_SAVE_CONTENT, pWrtShell->IsGlblDocSaveLinks());
     948             :             }
     949             :         }
     950             :         else
     951             :         {
     952           0 :             aContentTree.SetActiveShell(0);
     953             :         }
     954           0 :         UpdateListBox();
     955             :     }
     956           0 : }
     957             : 
     958             : /*------------------------------------------------------------------------
     959             :     Bechreibung: NumericField aus der Toolbox holen
     960             : ------------------------------------------------------------------------*/
     961             : 
     962           0 : NumEditAction& SwNavigationPI::GetPageEdit()
     963             : {
     964           0 :     return *(NumEditAction*)aContentToolBox.GetItemWindow(FN_PAGENUMBER);
     965             : }
     966             : 
     967           0 : SfxChildAlignment SwNavigationPI::CheckAlignment
     968             :     (
     969             :         SfxChildAlignment eActAlign,
     970             :         SfxChildAlignment eAlign
     971             :     )
     972             : {
     973             : SfxChildAlignment eRetAlign;
     974             : 
     975           0 :     if(_IsZoomedIn())
     976           0 :         eRetAlign = SFX_ALIGN_NOALIGNMENT;
     977             :     else
     978           0 :         switch (eAlign)
     979             :         {
     980             :             case SFX_ALIGN_BOTTOM:
     981             :             case SFX_ALIGN_LOWESTBOTTOM:
     982             :             case SFX_ALIGN_HIGHESTBOTTOM:
     983           0 :                 eRetAlign = eActAlign;
     984           0 :                 break;
     985             : 
     986             :             case SFX_ALIGN_TOP:
     987             :             case SFX_ALIGN_HIGHESTTOP:
     988             :             case SFX_ALIGN_LOWESTTOP:
     989             :             case SFX_ALIGN_LEFT:
     990             :             case SFX_ALIGN_RIGHT:
     991             :             case SFX_ALIGN_FIRSTLEFT:
     992             :             case SFX_ALIGN_LASTLEFT:
     993             :             case SFX_ALIGN_FIRSTRIGHT:
     994             :             case SFX_ALIGN_LASTRIGHT:
     995           0 :                 eRetAlign = eAlign;
     996           0 :                 break;
     997             : 
     998             :             default:
     999           0 :                 eRetAlign = eAlign;
    1000           0 :                 break;
    1001             :         }
    1002           0 :     return eRetAlign;
    1003             : 
    1004             : }
    1005             : 
    1006             : /*--------------------------------------------------------------------
    1007             :     Beschreibung:   Benachrichtigung bei geaenderter DocInfo
    1008             :  --------------------------------------------------------------------*/
    1009             : 
    1010           0 : void SwNavigationPI::Notify( SfxBroadcaster& rBrdc, const SfxHint& rHint )
    1011             : {
    1012           0 :     if(&rBrdc == pCreateView)
    1013             :     {
    1014           0 :         if(rHint.ISA(SfxSimpleHint) && ((SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING)
    1015             :         {
    1016           0 :             pCreateView = 0;
    1017             :         }
    1018             :     }
    1019             :     else
    1020             :     {
    1021           0 :         if(rHint.ISA(SfxEventHint))
    1022             :         {
    1023           0 :             if( pxObjectShell &&
    1024           0 :                         ((SfxEventHint&) rHint).GetEventId() == SFX_EVENT_CLOSEAPP)
    1025             :             {
    1026           0 :                 DELETEZ(pxObjectShell);
    1027             :             }
    1028           0 :             else if(((SfxEventHint&) rHint).GetEventId() == SFX_EVENT_OPENDOC)
    1029             :             {
    1030             : 
    1031           0 :                 SwView *pActView = GetCreateView();
    1032           0 :                 if(pActView)
    1033             :                 {
    1034           0 :                     SwWrtShell* pWrtShell = pActView->GetWrtShellPtr();
    1035           0 :                     aContentTree.SetActiveShell(pWrtShell);
    1036           0 :                     if(aGlobalTree.IsVisible())
    1037             :                     {
    1038           0 :                         if(aGlobalTree.Update( sal_False ))
    1039           0 :                             aGlobalTree.Display();
    1040             :                         else
    1041             :                         // wenn kein Update notwendig, dann zumindest painten
    1042             :                         // wg. der roten Eintraege fuer broken links
    1043           0 :                             aGlobalTree.Invalidate();
    1044             :                     }
    1045             :                 }
    1046             :             }
    1047             :         }
    1048             :     }
    1049           0 : }
    1050             : 
    1051           0 : IMPL_LINK( SwNavigationPI, MenuSelectHdl, Menu *, pMenu )
    1052             : {
    1053           0 :     sal_uInt16 nMenuId = pMenu->GetCurItemId();
    1054           0 :     if(nMenuId != USHRT_MAX)
    1055             :     {
    1056           0 :         if(nMenuId < 100)
    1057           0 :             SetRegionDropMode( --nMenuId);
    1058             :         else
    1059           0 :             aContentTree.SetOutlineLevel( static_cast< sal_uInt8 >(nMenuId - 100) );
    1060             :     }
    1061           0 :     return 0;
    1062             : }
    1063             : 
    1064           0 : void SwNavigationPI::UpdateListBox()
    1065             : {
    1066           0 :     aDocListBox.SetUpdateMode(sal_False);
    1067           0 :     aDocListBox.Clear();
    1068           0 :     SwView *pActView = GetCreateView();
    1069           0 :     sal_Bool bDisable = pActView == 0;
    1070           0 :     SwView *pView = SwModule::GetFirstView();
    1071           0 :     sal_uInt16 nCount = 0;
    1072           0 :     sal_uInt16 nAct = 0;
    1073           0 :     sal_uInt16 nConstPos = 0;
    1074           0 :     const SwView* pConstView = aContentTree.IsConstantView() &&
    1075           0 :                                 aContentTree.GetActiveWrtShell() ?
    1076           0 :                                     &aContentTree.GetActiveWrtShell()->GetView():
    1077           0 :                                         0;
    1078           0 :     while (pView)
    1079             :     {
    1080           0 :         SfxObjectShell* pDoc = pView->GetDocShell();
    1081             :         // #i53333# don't show help pages here
    1082           0 :         if ( !pDoc->IsHelpDocument() )
    1083             :         {
    1084           0 :             String sEntry = pDoc->GetTitle();
    1085           0 :             sEntry += rtl::OUString(" (");
    1086           0 :             if (pView == pActView)
    1087             :             {
    1088           0 :                 nAct = nCount;
    1089           0 :                 sEntry += aStatusArr[ST_ACTIVE - ST_STATUS_FIRST];
    1090             :             }
    1091             :             else
    1092           0 :                 sEntry += aStatusArr[ST_INACTIVE - ST_STATUS_FIRST];
    1093           0 :             sEntry += ')';
    1094           0 :             aDocListBox.InsertEntry(sEntry);
    1095             : 
    1096             : 
    1097           0 :             if (pConstView && pView == pConstView)
    1098           0 :                 nConstPos = nCount;
    1099             : 
    1100           0 :             nCount++;
    1101             :         }
    1102           0 :         pView = SwModule::GetNextView(pView);
    1103             :     }
    1104           0 :     aDocListBox.InsertEntry(aStatusArr[3]); //"Aktives Fenster"
    1105           0 :     nCount++;
    1106             : 
    1107           0 :     if(aContentTree.GetHiddenWrtShell())
    1108             :     {
    1109           0 :         String sEntry = aContentTree.GetHiddenWrtShell()->GetView().
    1110           0 :                                         GetDocShell()->GetTitle();
    1111           0 :         sEntry += rtl::OUString(" (");
    1112           0 :         sEntry += aStatusArr[ST_HIDDEN - ST_STATUS_FIRST];
    1113           0 :         sEntry += ')';
    1114           0 :         aDocListBox.InsertEntry(sEntry);
    1115           0 :         bDisable = sal_False;
    1116             :     }
    1117           0 :     if(aContentTree.IsActiveView())
    1118             :     {
    1119             :         //entweder den Namen des akt. Docs oder "Aktives Dokument"
    1120           0 :         sal_uInt16 nTmp = pActView ? nAct : --nCount;
    1121           0 :         aDocListBox.SelectEntryPos( nTmp );
    1122             :     }
    1123           0 :     else if(aContentTree.IsHiddenView())
    1124             :     {
    1125           0 :         aDocListBox.SelectEntryPos(nCount);
    1126             :     }
    1127             :     else
    1128           0 :         aDocListBox.SelectEntryPos(nConstPos);
    1129             : 
    1130           0 :     aDocListBox.Enable( !bDisable );
    1131           0 :     aDocListBox.SetUpdateMode(sal_True);
    1132           0 : }
    1133             : 
    1134           0 : IMPL_LINK(SwNavigationPI, DoneLink, SfxPoolItem *, pItem)
    1135             : {
    1136           0 :     const SfxViewFrameItem* pFrameItem = PTR_CAST(SfxViewFrameItem, pItem );
    1137           0 :     if( pFrameItem )
    1138             :     {
    1139           0 :         SfxViewFrame* pFrame =  pFrameItem->GetFrame();
    1140           0 :         if(pFrame)
    1141             :         {
    1142           0 :             aContentTree.Clear();
    1143           0 :             pContentView = PTR_CAST(SwView, pFrame->GetViewShell());
    1144             :             OSL_ENSURE(pContentView, "no SwView");
    1145           0 :             if(pContentView)
    1146           0 :                 pContentWrtShell = pContentView->GetWrtShellPtr();
    1147             :             else
    1148           0 :                 pContentWrtShell = 0;
    1149           0 :             pxObjectShell = new SfxObjectShellLock(pFrame->GetObjectShell());
    1150           0 :             FillBox();
    1151           0 :             aContentTree.Update();
    1152             :         }
    1153             :     }
    1154           0 :     return 0;
    1155             : }
    1156             : 
    1157           0 : String SwNavigationPI::CreateDropFileName( TransferableDataHelper& rData )
    1158             : {
    1159           0 :     String sFileName;
    1160             :     sal_uLong nFmt;
    1161           0 :     if( rData.HasFormat( nFmt = FORMAT_FILE_LIST ))
    1162             :     {
    1163           0 :         FileList aFileList;
    1164           0 :         rData.GetFileList( nFmt, aFileList );
    1165           0 :         sFileName = aFileList.GetFile( 0 );
    1166             :     }
    1167           0 :     else if( rData.HasFormat( nFmt = FORMAT_STRING ) ||
    1168           0 :               rData.HasFormat( nFmt = FORMAT_FILE ) ||
    1169           0 :              rData.HasFormat( nFmt = SOT_FORMATSTR_ID_FILENAME ))
    1170           0 :         rData.GetString( nFmt, sFileName );
    1171           0 :     else if( rData.HasFormat( nFmt = SOT_FORMATSTR_ID_SOLK ) ||
    1172           0 :                 rData.HasFormat( nFmt = SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK )||
    1173           0 :                 rData.HasFormat( nFmt = SOT_FORMATSTR_ID_FILECONTENT ) ||
    1174           0 :                 rData.HasFormat( nFmt = SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR ) ||
    1175           0 :                 rData.HasFormat( nFmt = SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR ))
    1176             :     {
    1177           0 :         INetBookmark aBkmk( aEmptyStr, aEmptyStr );
    1178           0 :         rData.GetINetBookmark( nFmt, aBkmk );
    1179           0 :         sFileName = aBkmk.GetURL();
    1180             :     }
    1181           0 :     if( sFileName.Len() )
    1182             :     {
    1183           0 :         sFileName = INetURLObject( sFileName ).GetMainURL( INetURLObject::NO_DECODE );
    1184             :     }
    1185           0 :     return sFileName;
    1186             : }
    1187             : 
    1188           0 : sal_Int8 SwNavigationPI::AcceptDrop( const AcceptDropEvent& /*rEvt*/ )
    1189             : {
    1190           0 :     return ( !aContentTree.IsInDrag() &&
    1191           0 :         ( aContentTree.IsDropFormatSupported( FORMAT_FILE ) ||
    1192           0 :           aContentTree.IsDropFormatSupported( FORMAT_STRING ) ||
    1193           0 :           aContentTree.IsDropFormatSupported( SOT_FORMATSTR_ID_SOLK ) ||
    1194           0 :            aContentTree.IsDropFormatSupported( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK )||
    1195           0 :            aContentTree.IsDropFormatSupported( SOT_FORMATSTR_ID_FILECONTENT ) ||
    1196           0 :            aContentTree.IsDropFormatSupported( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR ) ||
    1197           0 :            aContentTree.IsDropFormatSupported( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR ) ||
    1198           0 :            aContentTree.IsDropFormatSupported( SOT_FORMATSTR_ID_FILENAME )))
    1199             :         ? DND_ACTION_COPY
    1200           0 :         : DND_ACTION_NONE;
    1201             : }
    1202             : 
    1203           0 : sal_Int8 SwNavigationPI::ExecuteDrop( const ExecuteDropEvent& rEvt )
    1204             : {
    1205           0 :     TransferableDataHelper aData( rEvt.maDropEvent.Transferable );
    1206           0 :     sal_Int8 nRet = DND_ACTION_NONE;
    1207           0 :     String sFileName;
    1208           0 :     if( !aContentTree.IsInDrag() &&
    1209           0 :         0 != (sFileName = SwNavigationPI::CreateDropFileName( aData )).Len() )
    1210             :     {
    1211           0 :         INetURLObject aTemp( sFileName );
    1212           0 :         GraphicDescriptor aDesc( aTemp );
    1213           0 :         if( !aDesc.Detect() )   // keine Grafiken annehmen
    1214             :         {
    1215           0 :             if( STRING_NOTFOUND == sFileName.Search('#')
    1216           0 :                 && (!sContentFileName.Len() || sContentFileName != sFileName ))
    1217             :             {
    1218           0 :                 nRet = rEvt.mnAction;
    1219           0 :                 sFileName = comphelper::string::stripEnd(sFileName, 0);
    1220           0 :                 sContentFileName = sFileName;
    1221           0 :                 if(pxObjectShell)
    1222             :                 {
    1223           0 :                     aContentTree.SetHiddenShell( 0 );
    1224           0 :                     (*pxObjectShell)->DoClose();
    1225           0 :                     DELETEZ( pxObjectShell);
    1226             :                 }
    1227           0 :                 SfxStringItem aFileItem(SID_FILE_NAME, sFileName );
    1228           0 :                 SfxStringItem aOptionsItem( SID_OPTIONS, rtl::OUString("HRC") );
    1229             :                 SfxLinkItem aLink( SID_DONELINK,
    1230           0 :                                     LINK( this, SwNavigationPI, DoneLink ) );
    1231           0 :                 GetActiveView()->GetViewFrame()->GetDispatcher()->Execute(
    1232             :                             SID_OPENDOC, SFX_CALLMODE_ASYNCHRON,
    1233           0 :                             &aFileItem, &aOptionsItem, &aLink, 0L );
    1234             :             }
    1235           0 :         }
    1236             :     }
    1237           0 :     return nRet;
    1238             : }
    1239             : 
    1240           0 : void SwNavigationPI::SetRegionDropMode(sal_uInt16 nNewMode)
    1241             : {
    1242           0 :     nRegionMode = nNewMode;
    1243           0 :     pConfig->SetRegionMode( nRegionMode );
    1244             : 
    1245           0 :     sal_uInt16 nDropId = FN_DROP_REGION;
    1246           0 :     if(nRegionMode == REGION_MODE_LINK)
    1247           0 :         nDropId = FN_DROP_REGION_LINK;
    1248           0 :     else if(nRegionMode == REGION_MODE_EMBEDDED)
    1249           0 :         nDropId = FN_DROP_REGION_COPY;
    1250             : 
    1251           0 :     ImageList& rImgLst = aContentImageList;
    1252             : 
    1253           0 :     aContentToolBox.SetItemImage( FN_DROP_REGION, rImgLst.GetImage(nDropId));
    1254           0 : }
    1255             : 
    1256             : 
    1257           0 : sal_Bool    SwNavigationPI::ToggleTree()
    1258             : {
    1259           0 :     sal_Bool bRet = sal_True;
    1260           0 :     sal_Bool bGlobalDoc = IsGlobalDoc();
    1261           0 :     if(!IsGlobalMode() && bGlobalDoc)
    1262             :     {
    1263           0 :         SetUpdateMode(sal_False);
    1264           0 :         if(_IsZoomedIn())
    1265           0 :             _ZoomOut();
    1266           0 :         aGlobalTree.ShowTree();
    1267           0 :         aGlobalToolBox.Show();
    1268           0 :         aContentTree.HideTree();
    1269           0 :         aContentToolBox.Hide();
    1270           0 :         aDocListBox.Hide();
    1271           0 :         SetGlobalMode(sal_True);
    1272           0 :         SetUpdateMode(sal_True);
    1273             :     }
    1274             :     else
    1275             :     {
    1276           0 :         aGlobalTree.HideTree();
    1277           0 :         aGlobalToolBox.Hide();
    1278           0 :         if(!_IsZoomedIn())
    1279             :         {
    1280           0 :             aContentTree.ShowTree();
    1281           0 :             aContentToolBox.Show();
    1282           0 :             aDocListBox.Show();
    1283             :         }
    1284           0 :         bRet = sal_False;
    1285           0 :         SetGlobalMode(sal_False);
    1286             :     }
    1287           0 :     return bRet;
    1288             : }
    1289             : 
    1290           0 : sal_Bool    SwNavigationPI::IsGlobalDoc() const
    1291             : {
    1292           0 :     sal_Bool bRet = sal_False;
    1293           0 :     SwView *pView = GetCreateView();
    1294           0 :     if(pView)
    1295             :     {
    1296           0 :         SwWrtShell &rSh = pView->GetWrtShell();
    1297           0 :         bRet = rSh.IsGlobalDoc();
    1298             :     }
    1299           0 :     return bRet;
    1300             : }
    1301             : 
    1302           0 : IMPL_LINK_NOARG(SwNavigationPI, ChangePageHdl)
    1303             : {
    1304           0 :     EditAction(&GetPageEdit());
    1305           0 :     GetPageEdit().GrabFocus();
    1306           0 :     return 0;
    1307             : }
    1308             : 
    1309           0 : IMPL_LINK_NOARG(SwNavigationPI, PageEditModifyHdl)
    1310             : {
    1311           0 :     if(aPageChgTimer.IsActive())
    1312           0 :         aPageChgTimer.Stop();
    1313           0 :     aPageChgTimer.Start();
    1314           0 :     return 0;
    1315             : }
    1316             : 
    1317           0 : SwView*  SwNavigationPI::GetCreateView() const
    1318             : {
    1319           0 :     if(!pCreateView)
    1320             :     {
    1321           0 :         SwView* pView = SwModule::GetFirstView();
    1322           0 :         while(pView)
    1323             :         {
    1324           0 :             if(&pView->GetViewFrame()->GetBindings() == &rBindings)
    1325             :             {
    1326           0 :                 ((SwNavigationPI*)this)->pCreateView = pView;
    1327           0 :                 ((SwNavigationPI*)this)->StartListening(*pCreateView);
    1328           0 :                 break;
    1329             :             }
    1330           0 :             pView = SwModule::GetNextView(pView);
    1331             :         }
    1332             :     }
    1333           0 :     return pCreateView;
    1334             : }
    1335             : 
    1336           0 : SwNavigationChild::SwNavigationChild( Window* pParent,
    1337             :                         sal_uInt16 nId,
    1338             :                         SfxBindings* _pBindings,
    1339             :                         SfxChildWinInfo* )
    1340           0 :     : SfxChildWindowContext( nId )
    1341             : {
    1342           0 :     SwNavigationPI* pNavi  = new SwNavigationPI( _pBindings, this, pParent );
    1343           0 :     SetWindow( pNavi );
    1344           0 :     _pBindings->Invalidate(SID_NAVIGATOR);
    1345             : 
    1346           0 :     SwNavigationConfig* pNaviConfig = SW_MOD()->GetNavigationConfig();
    1347             : 
    1348           0 :     sal_uInt16 nRootType = static_cast< sal_uInt16 >( pNaviConfig->GetRootType() );
    1349           0 :     if( nRootType < CONTENT_TYPE_MAX )
    1350             :     {
    1351           0 :         pNavi->aContentTree.SetRootType(nRootType);
    1352           0 :         pNavi->aContentToolBox.CheckItem(FN_SHOW_ROOT, sal_True);
    1353             :     }
    1354           0 :     pNavi->aContentTree.SetOutlineLevel( static_cast< sal_uInt8 >( pNaviConfig->GetOutlineLevel() ) );
    1355           0 :     pNavi->SetRegionDropMode( static_cast< sal_uInt16 >( pNaviConfig->GetRegionMode() ) );
    1356             : 
    1357           0 :     if(GetFloatingWindow() && pNaviConfig->IsSmall())
    1358             :     {
    1359           0 :         pNavi->_ZoomIn();
    1360             :     }
    1361           0 : }
    1362             : 
    1363           0 : void SwNavigationPI::DataChanged( const DataChangedEvent& rDCEvt )
    1364             : {
    1365           0 :     Window::DataChanged( rDCEvt );
    1366           0 :     if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
    1367           0 :          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
    1368             :     {
    1369           0 :         InitImageList();
    1370           0 :         const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
    1371           0 :         Color aBgColor = rStyleSettings.GetFaceColor();
    1372           0 :         Wallpaper aBack( aBgColor );
    1373           0 :         SetBackground( aBack );
    1374             :     }
    1375           0 : }
    1376             : 
    1377           0 : void SwNavigationPI::InitImageList()
    1378             : {
    1379             :     sal_uInt16 k;
    1380             : 
    1381           0 :     ImageList& rImgLst = aContentImageList;
    1382           0 :     for( k = 0; k < aContentToolBox.GetItemCount(); k++)
    1383           0 :             aContentToolBox.SetItemImage(aContentToolBox.GetItemId(k),
    1384           0 :                     rImgLst.GetImage(aContentToolBox.GetItemId(k)));
    1385             : 
    1386           0 :     for( k = 0; k < aGlobalToolBox.GetItemCount(); k++)
    1387           0 :             aGlobalToolBox.SetItemImage(aGlobalToolBox.GetItemId(k),
    1388           0 :                     rImgLst.GetImage(aGlobalToolBox.GetItemId(k)));
    1389             : 
    1390           0 :     sal_uInt16 nDropId = FN_DROP_REGION;
    1391           0 :     if(nRegionMode == REGION_MODE_LINK)
    1392           0 :         nDropId = FN_DROP_REGION_LINK;
    1393           0 :     else if(nRegionMode == REGION_MODE_EMBEDDED)
    1394           0 :         nDropId = FN_DROP_REGION_COPY;
    1395             :     aContentToolBox.SetItemImage( FN_DROP_REGION,
    1396           0 :                                     rImgLst.GetImage(nDropId));
    1397           0 : }
    1398             : 
    1399             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10