LCOV - code coverage report
Current view: top level - vcl/source/window - dockwin.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 144 522 27.6 %
Date: 2012-08-25 Functions: 23 53 43.4 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 68 542 12.5 %

           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                 :            : 
      30                 :            : #include <tools/time.hxx>
      31                 :            : #include <tools/rc.h>
      32                 :            : #include <vcl/event.hxx>
      33                 :            : #include <vcl/floatwin.hxx>
      34                 :            : #include <vcl/dockwin.hxx>
      35                 :            : #include <vcl/svapp.hxx>
      36                 :            : #include <vcl/timer.hxx>
      37                 :            : #include <vcl/unowrap.hxx>
      38                 :            : 
      39                 :            : #include <svdata.hxx>
      40                 :            : #include <window.h>
      41                 :            : #include <brdwin.hxx>
      42                 :            : #include <salframe.hxx>
      43                 :            : 
      44                 :            : 
      45                 :            : 
      46                 :            : // =======================================================================
      47                 :            : 
      48                 :            : #define DOCKWIN_FLOATSTYLES         (WB_SIZEABLE | WB_MOVEABLE | WB_CLOSEABLE | WB_STANDALONE | WB_PINABLE | WB_ROLLABLE )
      49                 :            : 
      50                 :            : // =======================================================================
      51                 :            : 
      52                 :            : // -----------------------------------------------------------------------
      53                 :            : 
      54                 :            : class DockingWindow::ImplData
      55                 :            : {
      56                 :            : public:
      57                 :            :     ImplData();
      58                 :            :     ~ImplData();
      59                 :            : 
      60                 :            :     Window*         mpParent;
      61                 :            :     Size            maMaxOutSize;
      62                 :            : };
      63                 :            : 
      64                 :      24256 : DockingWindow::ImplData::ImplData()
      65                 :            : {
      66                 :      24256 :     mpParent = NULL;
      67                 :      24256 :     maMaxOutSize = Size( SHRT_MAX, SHRT_MAX );
      68                 :      24256 : }
      69                 :            : 
      70                 :      23251 : DockingWindow::ImplData::~ImplData()
      71                 :            : {
      72                 :      23251 : }
      73                 :            : 
      74                 :            : // -----------------------------------------------------------------------
      75                 :            : 
      76                 :            : class ImplDockFloatWin : public FloatingWindow
      77                 :            : {
      78                 :            : private:
      79                 :            :     DockingWindow*  mpDockWin;
      80                 :            :     sal_uLong           mnLastTicks;
      81                 :            :     Timer           maDockTimer;
      82                 :            :     Point           maDockPos;
      83                 :            :     Rectangle       maDockRect;
      84                 :            :     sal_Bool            mbInMove;
      85                 :            :     sal_uLong           mnLastUserEvent;
      86                 :            : 
      87                 :            :     DECL_LINK(DockingHdl, void *);
      88                 :            :     DECL_LINK(DockTimerHdl, void *);
      89                 :            : public:
      90                 :            :     ImplDockFloatWin( Window* pParent, WinBits nWinBits,
      91                 :            :                       DockingWindow* pDockingWin );
      92                 :            :     ~ImplDockFloatWin();
      93                 :            : 
      94                 :            :     virtual void    Move();
      95                 :            :     virtual void    Resize();
      96                 :            :     virtual void    TitleButtonClick( sal_uInt16 nButton );
      97                 :            :     virtual void    Pin();
      98                 :            :     virtual void    Roll();
      99                 :            :     virtual void    PopupModeEnd();
     100                 :            :     virtual void    Resizing( Size& rSize );
     101                 :            :     virtual sal_Bool    Close();
     102                 :            : 
     103                 :            :     sal_uLong GetLastTicks() const { return mnLastTicks; }
     104                 :            : };
     105                 :            : 
     106                 :            : 
     107                 :          0 : ImplDockFloatWin::ImplDockFloatWin( Window* pParent, WinBits nWinBits,
     108                 :            :                                     DockingWindow* pDockingWin ) :
     109                 :            :         FloatingWindow( pParent, nWinBits ),
     110                 :            :         mpDockWin( pDockingWin ),
     111         [ #  # ]:          0 :         mnLastTicks( Time::GetSystemTicks() ),
     112                 :            :         mbInMove( sal_False ),
     113 [ #  # ][ #  # ]:          0 :         mnLastUserEvent( 0 )
     114                 :            : {
     115                 :            :     // Daten vom DockingWindow uebernehmen
     116         [ #  # ]:          0 :     if ( pDockingWin )
     117                 :            :     {
     118         [ #  # ]:          0 :         SetSettings( pDockingWin->GetSettings() );
     119 [ #  # ][ #  # ]:          0 :         Enable( pDockingWin->IsEnabled(), sal_False );
     120 [ #  # ][ #  # ]:          0 :         EnableInput( pDockingWin->IsInputEnabled(), sal_False );
     121 [ #  # ][ #  # ]:          0 :         AlwaysEnableInput( pDockingWin->IsAlwaysEnableInput(), sal_False );
     122 [ #  # ][ #  # ]:          0 :         EnableAlwaysOnTop( pDockingWin->IsAlwaysOnTopEnabled() );
     123 [ #  # ][ #  # ]:          0 :         SetActivateMode( pDockingWin->GetActivateMode() );
     124                 :            :     }
     125                 :            : 
     126         [ #  # ]:          0 :     SetBackground();
     127                 :            : 
     128         [ #  # ]:          0 :     maDockTimer.SetTimeoutHdl( LINK( this, ImplDockFloatWin, DockTimerHdl ) );
     129         [ #  # ]:          0 :     maDockTimer.SetTimeout( 50 );
     130                 :          0 : }
     131                 :            : 
     132                 :            : // -----------------------------------------------------------------------
     133                 :            : 
     134         [ #  # ]:          0 : ImplDockFloatWin::~ImplDockFloatWin()
     135                 :            : {
     136         [ #  # ]:          0 :     if( mnLastUserEvent )
     137         [ #  # ]:          0 :         Application::RemoveUserEvent( mnLastUserEvent );
     138         [ #  # ]:          0 : }
     139                 :            : 
     140                 :            : // -----------------------------------------------------------------------
     141                 :            : 
     142                 :          0 : IMPL_LINK_NOARG(ImplDockFloatWin, DockTimerHdl)
     143                 :            : {
     144                 :            :     DBG_ASSERT( mpDockWin->IsFloatingMode(), "docktimer called but not floating" );
     145                 :            : 
     146         [ #  # ]:          0 :     maDockTimer.Stop();
     147         [ #  # ]:          0 :     PointerState aState = GetPointerState();
     148                 :            : 
     149         [ #  # ]:          0 :     if( aState.mnState & KEY_MOD1 )
     150                 :            :     {
     151                 :            :         // i43499 CTRL disables docking now
     152 [ #  # ][ #  # ]:          0 :         mpDockWin->GetParent()->ImplGetFrameWindow()->HideTracking();
                 [ #  # ]
     153         [ #  # ]:          0 :         mpDockWin->EndDocking( maDockRect, sal_True );
     154         [ #  # ]:          0 :         if( aState.mnState & ( MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT ) )
     155         [ #  # ]:          0 :             maDockTimer.Start();
     156                 :            :     }
     157         [ #  # ]:          0 :     else if( ! ( aState.mnState & ( MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT ) ) )
     158                 :            :     {
     159 [ #  # ][ #  # ]:          0 :         mpDockWin->GetParent()->ImplGetFrameWindow()->HideTracking();
                 [ #  # ]
     160         [ #  # ]:          0 :         mpDockWin->EndDocking( maDockRect, sal_False );
     161                 :            :     }
     162                 :            :     else
     163                 :            :     {
     164 [ #  # ][ #  # ]:          0 :         mpDockWin->GetParent()->ImplGetFrameWindow()->ShowTracking( maDockRect, SHOWTRACK_BIG | SHOWTRACK_WINDOW );
                 [ #  # ]
     165         [ #  # ]:          0 :         maDockTimer.Start();
     166                 :            :     }
     167                 :            : 
     168                 :          0 :     return 0;
     169                 :            : }
     170                 :            : 
     171                 :          0 : IMPL_LINK_NOARG(ImplDockFloatWin, DockingHdl)
     172                 :            : {
     173 [ #  # ][ #  # ]:          0 :     PointerState aState = mpDockWin->GetParent()->GetPointerState();
     174                 :            : 
     175                 :          0 :     mnLastUserEvent = 0;
     176 [ #  # ][ #  # ]:          0 :     if( mpDockWin->IsDockable()                             &&
         [ #  # ][ #  # ]
                 [ #  # ]
     177         [ #  # ]:          0 :         (Time::GetSystemTicks() - mnLastTicks > 500)        &&
     178                 :            :         ( aState.mnState & ( MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT ) ) &&
     179                 :          0 :         !(aState.mnState & KEY_MOD1) )  // i43499 CTRL disables docking now
     180                 :            :     {
     181 [ #  # ][ #  # ]:          0 :         maDockPos = Point( mpDockWin->GetParent()->AbsoluteScreenToOutputPixel( OutputToAbsoluteScreenPixel( Point() ) ) );
                 [ #  # ]
     182 [ #  # ][ #  # ]:          0 :         maDockPos = mpDockWin->GetParent()->OutputToScreenPixel( maDockPos );  // sfx expects screen coordinates
     183                 :            : 
     184         [ #  # ]:          0 :         if( ! mpDockWin->IsDocking() )
     185         [ #  # ]:          0 :             mpDockWin->StartDocking();
     186 [ #  # ][ #  # ]:          0 :         maDockRect = Rectangle( maDockPos, mpDockWin->GetSizePixel() );
     187                 :            : 
     188                 :            :         // mouse pos also in screen pixels
     189 [ #  # ][ #  # ]:          0 :         Point aMousePos = mpDockWin->GetParent()->OutputToScreenPixel( aState.maPos );
     190                 :            : 
     191         [ #  # ]:          0 :         sal_Bool bFloatMode = mpDockWin->Docking( aMousePos, maDockRect );
     192         [ #  # ]:          0 :         if( ! bFloatMode )
     193                 :            :         {
     194 [ #  # ][ #  # ]:          0 :             mpDockWin->GetParent()->ImplGetFrameWindow()->ShowTracking( maDockRect, SHOWTRACK_OBJECT | SHOWTRACK_WINDOW );
                 [ #  # ]
     195         [ #  # ]:          0 :             DockTimerHdl( this );
     196                 :            :         }
     197                 :            :         else
     198                 :            :         {
     199 [ #  # ][ #  # ]:          0 :             mpDockWin->GetParent()->ImplGetFrameWindow()->HideTracking();
                 [ #  # ]
     200         [ #  # ]:          0 :             maDockTimer.Stop();
     201         [ #  # ]:          0 :             mpDockWin->EndDocking( maDockRect, sal_True );
     202                 :            :         }
     203                 :            :     }
     204                 :          0 :     mbInMove = sal_False;
     205                 :          0 :     return 0;
     206                 :            : }
     207                 :            : // -----------------------------------------------------------------------
     208                 :            : 
     209                 :          0 : void ImplDockFloatWin::Move()
     210                 :            : {
     211         [ #  # ]:          0 :     if( mbInMove )
     212                 :          0 :         return;
     213                 :            : 
     214                 :          0 :     mbInMove = sal_True;
     215                 :          0 :     FloatingWindow::Move();
     216                 :          0 :     mpDockWin->Move();
     217                 :            : 
     218                 :            :     /*
     219                 :            :      *  note: the window should only dock if
     220                 :            :      *  the user releases all mouse buttons. The real problem here
     221                 :            :      *  is that we don't get mouse events (at least not on X)
     222                 :            :      *  if the mouse is on the decoration. So we have to start an
     223                 :            :      *  awkward timer based process that polls the modifier/buttons
     224                 :            :      *  to see whether they are in the right condition shortly after the
     225                 :            :      *  last Move message.
     226                 :            :      */
     227         [ #  # ]:          0 :     if( ! mnLastUserEvent )
     228         [ #  # ]:          0 :         mnLastUserEvent = Application::PostUserEvent( LINK( this, ImplDockFloatWin, DockingHdl ) );
     229                 :            : }
     230                 :            : 
     231                 :            : // -----------------------------------------------------------------------
     232                 :            : 
     233                 :          0 : void ImplDockFloatWin::Resize()
     234                 :            : {
     235         [ #  # ]:          0 :     FloatingWindow::Resize();
     236         [ #  # ]:          0 :     Size aSize( GetSizePixel() );
     237         [ #  # ]:          0 :     mpDockWin->ImplPosSizeWindow( 0, 0, aSize.Width(), aSize.Height(), WINDOW_POSSIZE_POSSIZE );
     238                 :          0 : }
     239                 :            : 
     240                 :            : // -----------------------------------------------------------------------
     241                 :            : 
     242                 :          0 : void ImplDockFloatWin::TitleButtonClick( sal_uInt16 nButton )
     243                 :            : {
     244                 :          0 :     FloatingWindow::TitleButtonClick( nButton );
     245                 :          0 :     mpDockWin->TitleButtonClick( nButton );
     246                 :          0 : }
     247                 :            : 
     248                 :            : // -----------------------------------------------------------------------
     249                 :            : 
     250                 :          0 : void ImplDockFloatWin::Pin()
     251                 :            : {
     252                 :          0 :     FloatingWindow::Pin();
     253                 :          0 :     mpDockWin->Pin();
     254                 :          0 : }
     255                 :            : 
     256                 :            : // -----------------------------------------------------------------------
     257                 :            : 
     258                 :          0 : void ImplDockFloatWin::Roll()
     259                 :            : {
     260                 :          0 :     FloatingWindow::Roll();
     261                 :          0 :     mpDockWin->Roll();
     262                 :          0 : }
     263                 :            : 
     264                 :            : // -----------------------------------------------------------------------
     265                 :            : 
     266                 :          0 : void ImplDockFloatWin::PopupModeEnd()
     267                 :            : {
     268                 :          0 :     FloatingWindow::PopupModeEnd();
     269                 :          0 :     mpDockWin->PopupModeEnd();
     270                 :          0 : }
     271                 :            : 
     272                 :            : // -----------------------------------------------------------------------
     273                 :            : 
     274                 :          0 : void ImplDockFloatWin::Resizing( Size& rSize )
     275                 :            : {
     276                 :          0 :     FloatingWindow::Resizing( rSize );
     277                 :          0 :     mpDockWin->Resizing( rSize );
     278                 :          0 : }
     279                 :            : 
     280                 :            : // -----------------------------------------------------------------------
     281                 :            : 
     282                 :          0 : sal_Bool ImplDockFloatWin::Close()
     283                 :            : {
     284                 :          0 :     return mpDockWin->Close();
     285                 :            : }
     286                 :            : 
     287                 :            : // =======================================================================
     288                 :            : 
     289                 :          0 : sal_Bool DockingWindow::ImplStartDocking( const Point& rPos )
     290                 :            : {
     291         [ #  # ]:          0 :     if ( !mbDockable )
     292                 :          0 :         return sal_False;
     293                 :            : 
     294                 :          0 :     maMouseOff      = rPos;
     295                 :          0 :     maMouseStart    = maMouseOff;
     296                 :          0 :     mbDocking       = sal_True;
     297         [ #  # ]:          0 :     mbLastFloatMode = IsFloatingMode();
     298                 :          0 :     mbStartFloat    = mbLastFloatMode;
     299                 :            : 
     300                 :            :     // FloatingBorder berechnen
     301                 :            :     FloatingWindow* pWin;
     302         [ #  # ]:          0 :     if ( mpFloatWin )
     303                 :          0 :         pWin = mpFloatWin;
     304                 :            :     else
     305 [ #  # ][ #  # ]:          0 :         pWin = new ImplDockFloatWin( mpImplData->mpParent, mnFloatBits, NULL );
     306         [ #  # ]:          0 :     pWin->GetBorder( mnDockLeft, mnDockTop, mnDockRight, mnDockBottom );
     307         [ #  # ]:          0 :     if ( !mpFloatWin )
     308 [ #  # ][ #  # ]:          0 :         delete pWin;
     309                 :            : 
     310         [ #  # ]:          0 :     Point   aPos    = ImplOutputToFrame( Point() );
     311                 :          0 :     Size    aSize   = Window::GetOutputSizePixel();
     312                 :          0 :     mnTrackX        = aPos.X();
     313                 :          0 :     mnTrackY        = aPos.Y();
     314                 :          0 :     mnTrackWidth    = aSize.Width();
     315                 :          0 :     mnTrackHeight   = aSize.Height();
     316                 :            : 
     317         [ #  # ]:          0 :     if ( mbLastFloatMode )
     318                 :            :     {
     319                 :          0 :         maMouseOff.X()  += mnDockLeft;
     320                 :          0 :         maMouseOff.Y()  += mnDockTop;
     321                 :          0 :         mnTrackX        -= mnDockLeft;
     322                 :          0 :         mnTrackY        -= mnDockTop;
     323                 :          0 :         mnTrackWidth    += mnDockLeft+mnDockRight;
     324                 :          0 :         mnTrackHeight   += mnDockTop+mnDockBottom;
     325                 :            :     }
     326                 :            : 
     327 [ #  # ][ #  # ]:          0 :     if ( GetSettings().GetStyleSettings().GetDragFullOptions() & DRAGFULL_OPTION_DOCKING &&
                 [ #  # ]
     328                 :          0 :         !( mnFloatBits & ( WB_MOVEABLE | WB_SIZEABLE | WB_CLOSEABLE ) ) ) // no full drag when migrating to system window
     329                 :          0 :         mbDragFull = sal_True;
     330                 :            :     else
     331                 :            :     {
     332         [ #  # ]:          0 :         StartDocking();
     333                 :          0 :         mbDragFull = sal_False;
     334         [ #  # ]:          0 :         ImplUpdateAll();
     335 [ #  # ][ #  # ]:          0 :         ImplGetFrameWindow()->ImplUpdateAll();
     336                 :            :     }
     337                 :            : 
     338         [ #  # ]:          0 :     StartTracking( STARTTRACK_KEYMOD );
     339                 :          0 :     return sal_True;
     340                 :            : }
     341                 :            : 
     342                 :            : // =======================================================================
     343                 :            : 
     344                 :      24256 : void DockingWindow::ImplInitDockingWindowData()
     345                 :            : {
     346         [ +  - ]:      24256 :     mpImplData              = new ImplData;
     347                 :      24256 :     mpWindowImpl->mbDockWin               = sal_True;
     348                 :            : 
     349                 :      24256 :     mpFloatWin              = NULL;
     350                 :      24256 :     mbDockCanceled          = sal_False;
     351                 :      24256 :     mbDockPrevented         = sal_False;
     352                 :      24256 :     mbFloatPrevented        = sal_False;
     353                 :      24256 :     mbDocking               = sal_False;
     354                 :      24256 :     mbPined                 = sal_False;
     355                 :      24256 :     mbRollUp                = sal_False;
     356                 :      24256 :     mbDockBtn               = sal_False;
     357                 :      24256 :     mbHideBtn               = sal_False;
     358                 :      24256 : }
     359                 :            : 
     360                 :            : // -----------------------------------------------------------------------
     361                 :            : 
     362                 :      24256 : void DockingWindow::ImplInit( Window* pParent, WinBits nStyle )
     363                 :            : {
     364         [ +  - ]:      24256 :     if ( !(nStyle & WB_NODIALOGCONTROL) )
     365                 :      24256 :         nStyle |= WB_DIALOGCONTROL;
     366                 :            : 
     367                 :      24256 :     mpImplData->mpParent    = pParent;
     368                 :      24256 :     mbDockable              = (nStyle & WB_DOCKABLE) != 0;
     369                 :      24256 :     mnFloatBits             = WB_BORDER | (nStyle & DOCKWIN_FLOATSTYLES);
     370                 :      24256 :     nStyle                 &= ~(DOCKWIN_FLOATSTYLES | WB_BORDER);
     371         [ -  + ]:      24256 :     if ( nStyle & WB_DOCKBORDER )
     372                 :          0 :         nStyle |= WB_BORDER;
     373                 :            : 
     374                 :      24256 :     Window::ImplInit( pParent, nStyle, NULL );
     375                 :            : 
     376                 :      24256 :     ImplInitSettings();
     377                 :      24256 : }
     378                 :            : 
     379                 :            : // -----------------------------------------------------------------------
     380                 :            : 
     381                 :      24430 : void DockingWindow::ImplInitSettings()
     382                 :            : {
     383                 :            :     // Hack, damit man auch DockingWindows ohne Hintergrund bauen kann
     384                 :            :     // und noch nicht alles umgestellt ist
     385         [ +  - ]:      24430 :     if ( IsBackground() )
     386                 :            :     {
     387                 :      24430 :         const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
     388                 :            : 
     389                 :      24430 :         Color aColor;
     390 [ -  + ][ +  - ]:      24430 :         if ( IsControlBackground() )
     391         [ #  # ]:          0 :             aColor = GetControlBackground();
     392 [ +  - ][ +  + ]:      24430 :         else if ( Window::GetStyle() & WB_3DLOOK )
     393                 :      21012 :             aColor = rStyleSettings.GetFaceColor();
     394                 :            :         else
     395                 :       3418 :             aColor = rStyleSettings.GetWindowColor();
     396 [ +  - ][ +  - ]:      24430 :         SetBackground( aColor );
                 [ +  - ]
     397                 :            :     }
     398                 :      24430 : }
     399                 :            : 
     400                 :            : // -----------------------------------------------------------------------
     401                 :            : 
     402                 :        770 : void DockingWindow::ImplLoadRes( const ResId& rResId )
     403                 :            : {
     404                 :        770 :     Window::ImplLoadRes( rResId );
     405                 :            : 
     406                 :        770 :     sal_uLong  nMask = ReadLongRes();
     407                 :            : 
     408         [ -  + ]:        770 :     if ( (RSC_DOCKINGWINDOW_XYMAPMODE | RSC_DOCKINGWINDOW_X |
     409                 :            :           RSC_DOCKINGWINDOW_Y) & nMask )
     410                 :            :     {
     411                 :            :         // Groessenangabe aus der Resource verwenden
     412                 :          0 :         Point   aPos;
     413                 :          0 :         MapUnit ePosMap = MAP_PIXEL;
     414                 :            : 
     415         [ #  # ]:          0 :         if ( RSC_DOCKINGWINDOW_XYMAPMODE & nMask )
     416         [ #  # ]:          0 :             ePosMap = (MapUnit)ReadLongRes();
     417                 :            : 
     418         [ #  # ]:          0 :         if ( RSC_DOCKINGWINDOW_X & nMask )
     419                 :            :         {
     420         [ #  # ]:          0 :             aPos.X() = ReadShortRes();
     421         [ #  # ]:          0 :             aPos.X() = ImplLogicUnitToPixelX( aPos.X(), ePosMap );
     422                 :            :         }
     423                 :            : 
     424         [ #  # ]:          0 :         if ( RSC_DOCKINGWINDOW_Y & nMask )
     425                 :            :         {
     426         [ #  # ]:          0 :             aPos.Y() = ReadShortRes();
     427         [ #  # ]:          0 :             aPos.Y() = ImplLogicUnitToPixelY( aPos.Y(), ePosMap );
     428                 :            :         }
     429                 :            : 
     430         [ #  # ]:          0 :         SetFloatingPos( aPos );
     431                 :            :     }
     432                 :            : 
     433         [ -  + ]:        770 :     if ( nMask & RSC_DOCKINGWINDOW_FLOATING )
     434                 :            :     {
     435         [ #  # ]:          0 :         if ( (sal_Bool)ReadShortRes() )
     436                 :          0 :             SetFloatingMode( sal_True );
     437                 :            :     }
     438                 :        770 : }
     439                 :            : 
     440                 :            : // -----------------------------------------------------------------------
     441                 :            : 
     442                 :      23942 : DockingWindow::DockingWindow( WindowType nType ) :
     443                 :      23942 :     Window( nType )
     444                 :            : {
     445         [ +  - ]:      23942 :     ImplInitDockingWindowData();
     446                 :      23942 : }
     447                 :            : 
     448                 :            : // -----------------------------------------------------------------------
     449                 :            : 
     450                 :          4 : DockingWindow::DockingWindow( Window* pParent, WinBits nStyle ) :
     451                 :          4 :     Window( WINDOW_DOCKINGWINDOW )
     452                 :            : {
     453         [ +  - ]:          4 :     ImplInitDockingWindowData();
     454         [ +  - ]:          4 :     ImplInit( pParent, nStyle );
     455                 :          4 : }
     456                 :            : 
     457                 :            : // -----------------------------------------------------------------------
     458                 :            : 
     459                 :        310 : DockingWindow::DockingWindow( Window* pParent, const ResId& rResId ) :
     460                 :        310 :     Window( WINDOW_DOCKINGWINDOW )
     461                 :            : {
     462         [ +  - ]:        310 :     ImplInitDockingWindowData();
     463                 :        310 :     rResId.SetRT( RSC_DOCKINGWINDOW );
     464         [ +  - ]:        310 :     WinBits nStyle = ImplInitRes( rResId );
     465         [ +  - ]:        310 :     ImplInit( pParent, nStyle );
     466         [ +  - ]:        310 :     ImplLoadRes( rResId );
     467                 :            : 
     468         [ +  + ]:        310 :     if ( !(nStyle & WB_HIDE) )
     469         [ +  - ]:         34 :         Show();
     470                 :        310 : }
     471                 :            : 
     472                 :            : // -----------------------------------------------------------------------
     473                 :            : 
     474                 :      23251 : DockingWindow::~DockingWindow()
     475                 :            : {
     476 [ +  - ][ -  + ]:      23251 :     if ( IsFloatingMode() )
     477                 :            :     {
     478         [ #  # ]:          0 :         Show( sal_False, SHOW_NOFOCUSCHANGE );
     479         [ #  # ]:          0 :         SetFloatingMode( sal_False );
     480                 :            :     }
     481 [ +  - ][ +  - ]:      23251 :     delete mpImplData;
     482         [ -  + ]:      23253 : }
     483                 :            : 
     484                 :            : // -----------------------------------------------------------------------
     485                 :            : 
     486                 :          0 : void DockingWindow::Tracking( const TrackingEvent& rTEvt )
     487                 :            : {
     488         [ #  # ]:          0 :     if( GetDockingManager()->IsDockable( this ) )   // new docking interface
     489                 :          0 :         return Window::Tracking( rTEvt );
     490                 :            : 
     491         [ #  # ]:          0 :     if ( mbDocking )
     492                 :            :     {
     493         [ #  # ]:          0 :         if ( rTEvt.IsTrackingEnded() )
     494                 :            :         {
     495                 :          0 :             mbDocking = sal_False;
     496         [ #  # ]:          0 :             if ( mbDragFull )
     497                 :            :             {
     498                 :            :                 // Bei Abbruch alten Zustand wieder herstellen
     499         [ #  # ]:          0 :                 if ( rTEvt.IsTrackingCanceled() )
     500                 :            :                 {
     501         [ #  # ]:          0 :                     StartDocking();
     502         [ #  # ]:          0 :                     Rectangle aRect( Point( mnTrackX, mnTrackY ), Size( mnTrackWidth, mnTrackHeight ) );
     503         [ #  # ]:          0 :                     EndDocking( aRect, mbStartFloat );
     504                 :            :                 }
     505                 :            :             }
     506                 :            :             else
     507                 :            :             {
     508                 :          0 :                 HideTracking();
     509         [ #  # ]:          0 :                 if ( rTEvt.IsTrackingCanceled() )
     510                 :            :                 {
     511                 :          0 :                     mbDockCanceled = sal_True;
     512 [ #  # ][ #  # ]:          0 :                     EndDocking( Rectangle( Point( mnTrackX, mnTrackY ), Size( mnTrackWidth, mnTrackHeight ) ), mbLastFloatMode );
     513                 :          0 :                     mbDockCanceled = sal_False;
     514                 :            :                 }
     515                 :            :                 else
     516 [ #  # ][ #  # ]:          0 :                     EndDocking( Rectangle( Point( mnTrackX, mnTrackY ), Size( mnTrackWidth, mnTrackHeight ) ), mbLastFloatMode );
     517                 :            :             }
     518                 :            :         }
     519                 :            :         // Docking nur bei nicht synthetischen MouseEvents
     520 [ #  # ][ #  # ]:          0 :         else if ( !rTEvt.GetMouseEvent().IsSynthetic() || rTEvt.GetMouseEvent().IsModifierChanged() )
                 [ #  # ]
     521                 :            :         {
     522                 :          0 :             Point   aMousePos = rTEvt.GetMouseEvent().GetPosPixel();
     523         [ #  # ]:          0 :             Point   aFrameMousePos = ImplOutputToFrame( aMousePos );
     524                 :          0 :             Size    aFrameSize = mpWindowImpl->mpFrameWindow->GetOutputSizePixel();
     525         [ #  # ]:          0 :             if ( aFrameMousePos.X() < 0 )
     526                 :          0 :                 aFrameMousePos.X() = 0;
     527         [ #  # ]:          0 :             if ( aFrameMousePos.Y() < 0 )
     528                 :          0 :                 aFrameMousePos.Y() = 0;
     529         [ #  # ]:          0 :             if ( aFrameMousePos.X() > aFrameSize.Width()-1 )
     530                 :          0 :                 aFrameMousePos.X() = aFrameSize.Width()-1;
     531         [ #  # ]:          0 :             if ( aFrameMousePos.Y() > aFrameSize.Height()-1 )
     532                 :          0 :                 aFrameMousePos.Y() = aFrameSize.Height()-1;
     533         [ #  # ]:          0 :             aMousePos = ImplFrameToOutput( aFrameMousePos );
     534                 :          0 :             aMousePos.X() -= maMouseOff.X();
     535                 :          0 :             aMousePos.Y() -= maMouseOff.Y();
     536         [ #  # ]:          0 :             Point aFramePos = ImplOutputToFrame( aMousePos );
     537         [ #  # ]:          0 :             Rectangle aTrackRect( aFramePos, Size( mnTrackWidth, mnTrackHeight ) );
     538                 :          0 :             Rectangle aCompRect = aTrackRect;
     539                 :          0 :             aFramePos.X()    += maMouseOff.X();
     540                 :          0 :             aFramePos.Y()    += maMouseOff.Y();
     541         [ #  # ]:          0 :             if ( mbDragFull )
     542         [ #  # ]:          0 :                 StartDocking();
     543         [ #  # ]:          0 :             sal_Bool bFloatMode = Docking( aFramePos, aTrackRect );
     544                 :          0 :             mbDockPrevented = sal_False;
     545                 :          0 :             mbFloatPrevented = sal_False;
     546         [ #  # ]:          0 :             if ( mbLastFloatMode != bFloatMode )
     547                 :            :             {
     548         [ #  # ]:          0 :                 if ( bFloatMode )
     549                 :            :                 {
     550                 :          0 :                     aTrackRect.Left()   -= mnDockLeft;
     551                 :          0 :                     aTrackRect.Top()    -= mnDockTop;
     552                 :          0 :                     aTrackRect.Right()  += mnDockRight;
     553                 :          0 :                     aTrackRect.Bottom() += mnDockBottom;
     554                 :            :                 }
     555                 :            :                 else
     556                 :            :                 {
     557 [ #  # ][ #  # ]:          0 :                     if ( aCompRect == aTrackRect )
     558                 :            :                     {
     559                 :          0 :                         aTrackRect.Left()   += mnDockLeft;
     560                 :          0 :                         aTrackRect.Top()    += mnDockTop;
     561                 :          0 :                         aTrackRect.Right()  -= mnDockRight;
     562                 :          0 :                         aTrackRect.Bottom() -= mnDockBottom;
     563                 :            :                     }
     564                 :            :                 }
     565                 :          0 :                 mbLastFloatMode = bFloatMode;
     566                 :            :             }
     567         [ #  # ]:          0 :             if ( mbDragFull )
     568                 :            :             {
     569                 :          0 :                 Point aPos;
     570         [ #  # ]:          0 :                 Point aOldPos = OutputToScreenPixel( aPos );
     571         [ #  # ]:          0 :                 EndDocking( aTrackRect, mbLastFloatMode );
     572                 :            :                 // Wenn der Status bzw. die Position sich
     573                 :            :                 // geaendert hat, dann neu ausgeben
     574 [ #  # ][ #  # ]:          0 :                 if ( aOldPos != OutputToScreenPixel( aPos ) )
     575                 :            :                 {
     576         [ #  # ]:          0 :                     ImplUpdateAll();
     577 [ #  # ][ #  # ]:          0 :                     ImplGetFrameWindow()->ImplUpdateAll();
     578                 :            :                 }
     579                 :            : //                EndDocking( aTrackRect, mbLastFloatMode );
     580                 :            :             }
     581                 :            :             else
     582                 :            :             {
     583                 :            :                 sal_uInt16 nTrackStyle;
     584         [ #  # ]:          0 :                 if ( bFloatMode )
     585                 :          0 :                     nTrackStyle = SHOWTRACK_BIG;
     586                 :            :                 else
     587                 :          0 :                     nTrackStyle = SHOWTRACK_OBJECT;
     588                 :          0 :                 Rectangle aShowTrackRect = aTrackRect;
     589         [ #  # ]:          0 :                 aShowTrackRect.SetPos( ImplFrameToOutput( aShowTrackRect.TopLeft() ) );
     590         [ #  # ]:          0 :                 ShowTracking( aShowTrackRect, nTrackStyle );
     591                 :            : 
     592                 :            :                 // Maus-Offset neu berechnen, da Rechteck veraendert werden
     593                 :            :                 // konnte
     594                 :          0 :                 maMouseOff.X()  = aFramePos.X() - aTrackRect.Left();
     595                 :          0 :                 maMouseOff.Y()  = aFramePos.Y() - aTrackRect.Top();
     596                 :            :             }
     597                 :            : 
     598                 :          0 :             mnTrackX        = aTrackRect.Left();
     599                 :          0 :             mnTrackY        = aTrackRect.Top();
     600         [ #  # ]:          0 :             mnTrackWidth    = aTrackRect.GetWidth();
     601         [ #  # ]:          0 :             mnTrackHeight   = aTrackRect.GetHeight();
     602                 :            :         }
     603                 :            :     }
     604                 :            : }
     605                 :            : 
     606                 :            : // -----------------------------------------------------------------------
     607                 :            : 
     608                 :      21641 : long DockingWindow::Notify( NotifyEvent& rNEvt )
     609                 :            : {
     610         [ +  + ]:      21641 :     if( GetDockingManager()->IsDockable( this ) )   // new docking interface
     611                 :      14280 :         return Window::Notify( rNEvt );
     612                 :            : 
     613         [ +  + ]:       7361 :     if ( mbDockable )
     614                 :            :     {
     615         [ -  + ]:       2298 :         if ( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN )
     616                 :            :         {
     617                 :          0 :             const MouseEvent* pMEvt = rNEvt.GetMouseEvent();
     618         [ #  # ]:          0 :             if ( pMEvt->IsLeft() )
     619                 :            :             {
     620 [ #  # ][ #  # ]:          0 :                 if ( pMEvt->IsMod1() && (pMEvt->GetClicks() == 2) )
                 [ #  # ]
     621                 :            :                 {
     622                 :          0 :                     SetFloatingMode( !IsFloatingMode() );
     623                 :          0 :                     return sal_True;
     624                 :            :                 }
     625         [ #  # ]:          0 :                 else if ( pMEvt->GetClicks() == 1 )
     626                 :            :                 {
     627                 :            :                     // check if window is floating standalone (IsFloating())
     628                 :            :                     // or only partially floating and still docked with one border
     629                 :            :                     // ( !mpWindowImpl->mbFrame)
     630 [ #  # ][ #  # ]:          0 :                     if( ! IsFloatingMode() || ! mpFloatWin->mpWindowImpl->mbFrame )
                 [ #  # ]
     631                 :            :                     {
     632                 :          0 :                         Point   aPos = pMEvt->GetPosPixel();
     633                 :          0 :                         Window* pWindow = rNEvt.GetWindow();
     634         [ #  # ]:          0 :                         if ( pWindow != this )
     635                 :            :                         {
     636         [ #  # ]:          0 :                             aPos = pWindow->OutputToScreenPixel( aPos );
     637         [ #  # ]:          0 :                             aPos = ScreenToOutputPixel( aPos );
     638                 :            :                         }
     639         [ #  # ]:          0 :                         ImplStartDocking( aPos );
     640                 :            :                     }
     641                 :          0 :                     return sal_True;
     642                 :            :                 }
     643                 :            :             }
     644                 :            :         }
     645         [ -  + ]:       2298 :         else if( rNEvt.GetType() == EVENT_KEYINPUT )
     646                 :            :         {
     647                 :          0 :             const KeyCode& rKey = rNEvt.GetKeyEvent()->GetKeyCode();
     648   [ #  #  #  #  :          0 :             if( rKey.GetCode() == KEY_F10 && rKey.GetModifier() &&
           #  # ][ #  # ]
                 [ #  # ]
     649                 :          0 :                 rKey.IsShift() && rKey.IsMod1() )
     650                 :            :             {
     651                 :          0 :                 SetFloatingMode( !IsFloatingMode() );
     652                 :          0 :                 return sal_True;
     653                 :            :             }
     654                 :            :         }
     655                 :            :     }
     656                 :            : 
     657                 :      21641 :     return Window::Notify( rNEvt );
     658                 :            : }
     659                 :            : 
     660                 :            : // -----------------------------------------------------------------------
     661                 :            : 
     662                 :          0 : void DockingWindow::StartDocking()
     663                 :            : {
     664                 :          0 :     mbDocking = sal_True;
     665                 :          0 : }
     666                 :            : 
     667                 :            : // -----------------------------------------------------------------------
     668                 :            : 
     669                 :          0 : sal_Bool DockingWindow::Docking( const Point&, Rectangle& )
     670                 :            : {
     671                 :          0 :     return IsFloatingMode();
     672                 :            : }
     673                 :            : 
     674                 :            : // -----------------------------------------------------------------------
     675                 :            : 
     676                 :          0 : void DockingWindow::EndDocking( const Rectangle& rRect, sal_Bool bFloatMode )
     677                 :            : {
     678         [ #  # ]:          0 :     if ( !IsDockingCanceled() )
     679                 :            :     {
     680                 :          0 :         sal_Bool bShow = sal_False;
     681         [ #  # ]:          0 :         if ( bFloatMode != IsFloatingMode() )
     682                 :            :         {
     683                 :          0 :             Show( sal_False, SHOW_NOFOCUSCHANGE );
     684                 :          0 :             SetFloatingMode( bFloatMode );
     685                 :          0 :             bShow = sal_True;
     686 [ #  # ][ #  # ]:          0 :             if ( bFloatMode && mpFloatWin )
     687         [ #  # ]:          0 :                 mpFloatWin->SetPosSizePixel( rRect.TopLeft(), rRect.GetSize() );
     688                 :            :         }
     689         [ #  # ]:          0 :         if ( !bFloatMode )
     690                 :            :         {
     691                 :          0 :             Point aPos = rRect.TopLeft();
     692 [ #  # ][ #  # ]:          0 :             aPos = GetParent()->ScreenToOutputPixel( aPos );
     693 [ #  # ][ #  # ]:          0 :             Window::SetPosSizePixel( aPos, rRect.GetSize() );
     694                 :            :         }
     695                 :            : 
     696         [ #  # ]:          0 :         if ( bShow )
     697                 :          0 :             Show();
     698                 :            :     }
     699                 :          0 :     mbDocking = sal_False;
     700                 :          0 : }
     701                 :            : 
     702                 :            : // -----------------------------------------------------------------------
     703                 :            : 
     704                 :          0 : sal_Bool DockingWindow::PrepareToggleFloatingMode()
     705                 :            : {
     706                 :          0 :     return sal_True;
     707                 :            : }
     708                 :            : 
     709                 :            : // -----------------------------------------------------------------------
     710                 :            : 
     711                 :          0 : sal_Bool DockingWindow::Close()
     712                 :            : {
     713         [ #  # ]:          0 :     ImplDelData aDelData;
     714         [ #  # ]:          0 :     ImplAddDel( &aDelData );
     715         [ #  # ]:          0 :     ImplCallEventListeners( VCLEVENT_WINDOW_CLOSE );
     716         [ #  # ]:          0 :     if ( aDelData.IsDead() )
     717                 :          0 :         return sal_False;
     718         [ #  # ]:          0 :     ImplRemoveDel( &aDelData );
     719                 :            : 
     720 [ #  # ][ #  # ]:          0 :     if ( mpWindowImpl->mxWindowPeer.is() && IsCreatedWithToolkit() )
         [ #  # ][ #  # ]
     721                 :          0 :         return sal_False;
     722                 :            : 
     723         [ #  # ]:          0 :     Show( sal_False, SHOW_NOFOCUSCHANGE );
     724         [ #  # ]:          0 :     return sal_True;
     725                 :            : }
     726                 :            : 
     727                 :            : // -----------------------------------------------------------------------
     728                 :            : 
     729                 :          0 : void DockingWindow::ToggleFloatingMode()
     730                 :            : {
     731                 :          0 : }
     732                 :            : 
     733                 :            : // -----------------------------------------------------------------------
     734                 :            : 
     735                 :          0 : void DockingWindow::TitleButtonClick( sal_uInt16 )
     736                 :            : {
     737                 :          0 : }
     738                 :            : 
     739                 :            : // -----------------------------------------------------------------------
     740                 :            : 
     741                 :          0 : void DockingWindow::Pin()
     742                 :            : {
     743                 :          0 : }
     744                 :            : 
     745                 :            : // -----------------------------------------------------------------------
     746                 :            : 
     747                 :          0 : void DockingWindow::Roll()
     748                 :            : {
     749                 :          0 : }
     750                 :            : 
     751                 :            : // -----------------------------------------------------------------------
     752                 :            : 
     753                 :          0 : void DockingWindow::PopupModeEnd()
     754                 :            : {
     755                 :          0 : }
     756                 :            : 
     757                 :            : // -----------------------------------------------------------------------
     758                 :            : 
     759                 :          0 : void DockingWindow::Resizing( Size& )
     760                 :            : {
     761                 :          0 : }
     762                 :            : 
     763                 :            : // -----------------------------------------------------------------------
     764                 :            : 
     765                 :      33934 : void DockingWindow::StateChanged( StateChangedType nType )
     766                 :            : {
     767         [ -  + ]:      33934 :     if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
     768                 :            :     {
     769                 :          0 :         ImplInitSettings();
     770                 :          0 :         Invalidate();
     771                 :            :     }
     772                 :            : 
     773                 :      33934 :     Window::StateChanged( nType );
     774                 :      33934 : }
     775                 :            : 
     776                 :            : // -----------------------------------------------------------------------
     777                 :            : 
     778                 :        322 : void DockingWindow::DataChanged( const DataChangedEvent& rDCEvt )
     779                 :            : {
     780   [ +  -  +  + ]:        644 :     if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
                 [ +  + ]
     781                 :        322 :          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
     782                 :            :     {
     783                 :        174 :         ImplInitSettings();
     784                 :        174 :         Invalidate();
     785                 :            :     }
     786                 :            :     else
     787                 :        148 :         Window::DataChanged( rDCEvt );
     788                 :        322 : }
     789                 :            : 
     790                 :            : // -----------------------------------------------------------------------
     791                 :            : 
     792                 :          0 : void DockingWindow::SetFloatingMode( sal_Bool bFloatMode )
     793                 :            : {
     794                 :          0 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     795         [ #  # ]:          0 :     if( pWrapper )
     796                 :            :     {
     797                 :          0 :         pWrapper->SetFloatingMode( bFloatMode );
     798                 :          0 :         return;
     799                 :            :     }
     800         [ #  # ]:          0 :     if ( IsFloatingMode() != bFloatMode )
     801                 :            :     {
     802         [ #  # ]:          0 :         if ( PrepareToggleFloatingMode() ) // changes to floating mode can be vetoed
     803                 :            :         {
     804                 :          0 :             sal_Bool bVisible = IsVisible();
     805                 :            : 
     806         [ #  # ]:          0 :             if ( bFloatMode )
     807                 :            :             {
     808                 :          0 :                 Show( sal_False, SHOW_NOFOCUSCHANGE );
     809                 :            : 
     810                 :          0 :                 maDockPos = Window::GetPosPixel();
     811                 :            : 
     812                 :          0 :                 Window* pRealParent = mpWindowImpl->mpRealParent;
     813                 :          0 :                 mpOldBorderWin = mpWindowImpl->mpBorderWindow;
     814                 :            : 
     815                 :            :                 ImplDockFloatWin* pWin =
     816                 :            :                     new ImplDockFloatWin(
     817                 :            :                                          mpImplData->mpParent,
     818                 :            :                                          mnFloatBits & ( WB_MOVEABLE | WB_SIZEABLE | WB_CLOSEABLE ) ?  mnFloatBits | WB_SYSTEMWINDOW : mnFloatBits,
     819 [ #  # ][ #  # ]:          0 :                                          this );
     820                 :          0 :                 mpFloatWin      = pWin;
     821                 :          0 :                 mpWindowImpl->mpBorderWindow  = NULL;
     822                 :          0 :                 mpWindowImpl->mnLeftBorder    = 0;
     823                 :          0 :                 mpWindowImpl->mnTopBorder     = 0;
     824                 :          0 :                 mpWindowImpl->mnRightBorder   = 0;
     825                 :          0 :                 mpWindowImpl->mnBottomBorder  = 0;
     826                 :            :                 // Falls Parent zerstoert wird, muessen wir auch vom
     827                 :            :                 // BorderWindow den Parent umsetzen
     828         [ #  # ]:          0 :                 if ( mpOldBorderWin )
     829                 :          0 :                     mpOldBorderWin->SetParent( pWin );
     830                 :          0 :                 SetParent( pWin );
     831         [ #  # ]:          0 :                 SetPosPixel( Point() );
     832                 :          0 :                 mpWindowImpl->mpBorderWindow = pWin;
     833                 :          0 :                 pWin->mpWindowImpl->mpClientWindow = this;
     834                 :          0 :                 mpWindowImpl->mpRealParent = pRealParent;
     835         [ #  # ]:          0 :                 pWin->SetText( Window::GetText() );
     836         [ #  # ]:          0 :                 pWin->SetOutputSizePixel( Window::GetSizePixel() );
     837                 :          0 :                 pWin->SetPosPixel( maFloatPos );
     838                 :            :                 // DockingDaten ans FloatingWindow weiterreichen
     839                 :          0 :                 pWin->ShowTitleButton( TITLE_BUTTON_DOCKING, mbDockBtn );
     840                 :          0 :                 pWin->ShowTitleButton( TITLE_BUTTON_HIDE, mbHideBtn );
     841                 :          0 :                 pWin->SetPin( mbPined );
     842         [ #  # ]:          0 :                 if ( mbRollUp )
     843                 :          0 :                     pWin->RollUp();
     844                 :            :                 else
     845                 :          0 :                     pWin->RollDown();
     846                 :          0 :                 pWin->SetRollUpOutputSizePixel( maRollUpOutSize );
     847                 :          0 :                 pWin->SetMinOutputSizePixel( maMinOutSize );
     848                 :          0 :                 pWin->SetMaxOutputSizePixel( mpImplData->maMaxOutSize );
     849                 :            : 
     850                 :          0 :                 ToggleFloatingMode();
     851                 :            : 
     852         [ #  # ]:          0 :                 if ( bVisible )
     853                 :          0 :                     Show();
     854                 :            :             }
     855                 :            :             else
     856                 :            :             {
     857                 :          0 :                 Show( sal_False, SHOW_NOFOCUSCHANGE );
     858                 :            : 
     859                 :            :                 // FloatingDaten wird im FloatingWindow speichern
     860                 :          0 :                 maFloatPos      = mpFloatWin->GetPosPixel();
     861                 :          0 :                 mbDockBtn       = mpFloatWin->IsTitleButtonVisible( TITLE_BUTTON_DOCKING );
     862                 :          0 :                 mbHideBtn       = mpFloatWin->IsTitleButtonVisible( TITLE_BUTTON_HIDE );
     863                 :          0 :                 mbPined         = mpFloatWin->IsPined();
     864                 :          0 :                 mbRollUp        = mpFloatWin->IsRollUp();
     865                 :          0 :                 maRollUpOutSize = mpFloatWin->GetRollUpOutputSizePixel();
     866                 :          0 :                 maMinOutSize    = mpFloatWin->GetMinOutputSizePixel();
     867                 :          0 :                 mpImplData->maMaxOutSize = mpFloatWin->GetMaxOutputSizePixel();
     868                 :            : 
     869                 :          0 :                 Window* pRealParent = mpWindowImpl->mpRealParent;
     870                 :          0 :                 mpWindowImpl->mpBorderWindow = NULL;
     871         [ #  # ]:          0 :                 if ( mpOldBorderWin )
     872                 :            :                 {
     873                 :          0 :                     SetParent( mpOldBorderWin );
     874                 :          0 :                     ((ImplBorderWindow*)mpOldBorderWin)->GetBorder( mpWindowImpl->mnLeftBorder, mpWindowImpl->mnTopBorder, mpWindowImpl->mnRightBorder, mpWindowImpl->mnBottomBorder );
     875                 :          0 :                     mpOldBorderWin->Resize();
     876                 :            :                 }
     877                 :          0 :                 mpWindowImpl->mpBorderWindow = mpOldBorderWin;
     878                 :          0 :                 SetParent( pRealParent );
     879                 :          0 :                 mpWindowImpl->mpRealParent = pRealParent;
     880         [ #  # ]:          0 :                 delete static_cast<ImplDockFloatWin*>(mpFloatWin);
     881                 :          0 :                 mpFloatWin = NULL;
     882                 :          0 :                 SetPosPixel( maDockPos );
     883                 :            : 
     884                 :          0 :                 ToggleFloatingMode();
     885                 :            : 
     886         [ #  # ]:          0 :                 if ( bVisible )
     887                 :          0 :                     Show();
     888                 :            :             }
     889                 :            :         }
     890                 :            :     }
     891                 :            : }
     892                 :            : 
     893                 :            : // -----------------------------------------------------------------------
     894                 :            : 
     895                 :         18 : void DockingWindow::SetFloatStyle( WinBits nStyle )
     896                 :            : {
     897                 :         18 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     898         [ +  - ]:         18 :     if( pWrapper )
     899                 :            :     {
     900                 :         18 :         pWrapper->SetFloatStyle( nStyle );
     901                 :         18 :         return;
     902                 :            :     }
     903                 :            : 
     904                 :          0 :     mnFloatBits = nStyle;
     905                 :            : }
     906                 :            : 
     907                 :            : // -----------------------------------------------------------------------
     908                 :            : 
     909                 :       6157 : WinBits DockingWindow::GetFloatStyle() const
     910                 :            : {
     911                 :       6157 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     912         [ +  + ]:       6157 :     if( pWrapper )
     913                 :            :     {
     914                 :         18 :         return pWrapper->GetFloatStyle();
     915                 :            :     }
     916                 :            : 
     917                 :       6157 :     return mnFloatBits;
     918                 :            : }
     919                 :            : 
     920                 :            : // -----------------------------------------------------------------------
     921                 :            : 
     922                 :      36285 : void DockingWindow::SetPosSizePixel( long nX, long nY,
     923                 :            :                                      long nWidth, long nHeight,
     924                 :            :                                      sal_uInt16 nFlags )
     925                 :            : {
     926                 :      36285 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     927         [ +  + ]:      36285 :     if( pWrapper )
     928                 :            :     {
     929         [ -  + ]:      16114 :         if ( pWrapper->mpFloatWin )
     930                 :          0 :             pWrapper->mpFloatWin->SetPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
     931                 :            :         else
     932                 :      16114 :             Window::SetPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
     933                 :      36285 :         return;
     934                 :            :     }
     935                 :            : 
     936         [ -  + ]:      20171 :     if ( mpFloatWin )
     937                 :          0 :         mpFloatWin->SetPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
     938                 :            :     else
     939                 :      20171 :         Window::SetPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
     940                 :            : }
     941                 :            : 
     942                 :            : // -----------------------------------------------------------------------
     943                 :            : 
     944                 :      35807 : Point DockingWindow::GetPosPixel() const
     945                 :            : {
     946                 :      35807 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     947         [ +  + ]:      35807 :     if( pWrapper )
     948                 :            :     {
     949         [ -  + ]:      33325 :         if ( pWrapper->mpFloatWin )
     950                 :          0 :             return pWrapper->mpFloatWin->GetPosPixel();
     951                 :            :         else
     952                 :      33325 :             return Window::GetPosPixel();
     953                 :            :     }
     954                 :            : 
     955         [ -  + ]:       2482 :     if ( mpFloatWin )
     956                 :          0 :         return mpFloatWin->GetPosPixel();
     957                 :            :     else
     958                 :      35807 :         return Window::GetPosPixel();
     959                 :            : }
     960                 :            : 
     961                 :            : // -----------------------------------------------------------------------
     962                 :            : 
     963                 :      54705 : Size DockingWindow::GetSizePixel() const
     964                 :            : {
     965                 :      54705 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     966         [ +  + ]:      54705 :     if( pWrapper )
     967                 :            :     {
     968         [ -  + ]:      33997 :         if ( pWrapper->mpFloatWin )
     969                 :          0 :             return pWrapper->mpFloatWin->GetSizePixel();
     970                 :            :         else
     971                 :      33997 :             return Window::GetSizePixel();
     972                 :            :     }
     973                 :            : 
     974         [ -  + ]:      20708 :     if ( mpFloatWin )
     975                 :          0 :         return mpFloatWin->GetSizePixel();
     976                 :            :     else
     977                 :      54705 :         return Window::GetSizePixel();
     978                 :            : }
     979                 :            : 
     980                 :            : // -----------------------------------------------------------------------
     981                 :            : 
     982                 :       7584 : void DockingWindow::SetOutputSizePixel( const Size& rNewSize )
     983                 :            : {
     984                 :       7584 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     985         [ +  + ]:       7584 :     if( pWrapper )
     986                 :            :     {
     987         [ -  + ]:       3721 :         if ( pWrapper->mpFloatWin )
     988                 :          0 :             pWrapper->mpFloatWin->SetOutputSizePixel( rNewSize );
     989                 :            :         else
     990                 :       3721 :             Window::SetOutputSizePixel( rNewSize );
     991                 :       7584 :         return;
     992                 :            :     }
     993                 :            : 
     994         [ -  + ]:       3863 :     if ( mpFloatWin )
     995                 :          0 :         mpFloatWin->SetOutputSizePixel( rNewSize );
     996                 :            :     else
     997                 :       3863 :         Window::SetOutputSizePixel( rNewSize );
     998                 :            : }
     999                 :            : 
    1000                 :            : // -----------------------------------------------------------------------
    1001                 :            : 
    1002                 :     155572 : Size DockingWindow::GetOutputSizePixel() const
    1003                 :            : {
    1004                 :     155572 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
    1005         [ +  + ]:     155572 :     if( pWrapper )
    1006                 :            :     {
    1007         [ -  + ]:     144972 :         if ( pWrapper->mpFloatWin )
    1008                 :          0 :             return pWrapper->mpFloatWin->GetOutputSizePixel();
    1009                 :            :         else
    1010                 :     144972 :             return Window::GetOutputSizePixel();
    1011                 :            :     }
    1012                 :            : 
    1013         [ -  + ]:      10600 :     if ( mpFloatWin )
    1014                 :          0 :         return mpFloatWin->GetOutputSizePixel();
    1015                 :            :     else
    1016                 :     155572 :         return Window::GetOutputSizePixel();
    1017                 :            : }
    1018                 :            : 
    1019                 :        312 : Point DockingWindow::GetFloatingPos() const
    1020                 :            : {
    1021                 :        312 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
    1022         [ -  + ]:        312 :     if( pWrapper )
    1023                 :            :     {
    1024         [ #  # ]:          0 :         if ( pWrapper->mpFloatWin )
    1025                 :            :         {
    1026                 :          0 :             WindowStateData aData;
    1027                 :          0 :             aData.SetMask( WINDOWSTATE_MASK_POS );
    1028         [ #  # ]:          0 :             pWrapper->mpFloatWin->GetWindowStateData( aData );
    1029                 :          0 :             Point aPos( aData.GetX(), aData.GetY() );
    1030 [ #  # ][ #  # ]:          0 :             aPos = pWrapper->mpFloatWin->GetParent()->ImplGetFrameWindow()->AbsoluteScreenToOutputPixel( aPos );
                 [ #  # ]
    1031                 :          0 :             return aPos;
    1032                 :            :         }
    1033                 :            :         else
    1034                 :          0 :             return maFloatPos;
    1035                 :            :     }
    1036                 :            : 
    1037         [ -  + ]:        312 :     if ( mpFloatWin )
    1038                 :            :     {
    1039                 :          0 :         WindowStateData aData;
    1040                 :          0 :         aData.SetMask( WINDOWSTATE_MASK_POS );
    1041         [ #  # ]:          0 :         mpFloatWin->GetWindowStateData( aData );
    1042                 :          0 :         Point aPos( aData.GetX(), aData.GetY() );
    1043 [ #  # ][ #  # ]:          0 :         aPos = mpFloatWin->GetParent()->ImplGetFrameWindow()->AbsoluteScreenToOutputPixel( aPos );
                 [ #  # ]
    1044                 :          0 :         return aPos;
    1045                 :            :     }
    1046                 :            :     else
    1047                 :        312 :         return maFloatPos;
    1048                 :            : }
    1049                 :            : 
    1050                 :    1156491 : sal_Bool DockingWindow::IsFloatingMode() const
    1051                 :            : {
    1052                 :    1156491 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
    1053         [ +  + ]:    1156491 :     if( pWrapper )
    1054                 :     946087 :         return pWrapper->IsFloatingMode();
    1055                 :            :     else
    1056                 :    1156491 :         return (mpFloatWin != NULL);
    1057                 :            : }
    1058                 :            : 
    1059                 :          0 : void DockingWindow::SetMaxOutputSizePixel( const Size& rSize )
    1060                 :            : {
    1061         [ #  # ]:          0 :     if ( mpFloatWin )
    1062                 :          0 :         mpFloatWin->SetMaxOutputSizePixel( rSize );
    1063                 :          0 :     mpImplData->maMaxOutSize = rSize;
    1064                 :          0 : }
    1065                 :            : 
    1066                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10