diff options
-rw-r--r-- | include/vcl/dockwin.hxx | 105 | ||||
-rw-r--r-- | solenv/clang-format/excludelist | 1 | ||||
-rw-r--r-- | vcl/source/window/dockmgr.cxx | 2 | ||||
-rw-r--r-- | vcl/source/window/dockwin.cxx | 2 | ||||
-rw-r--r-- | vcl/source/window/event.cxx | 2 | ||||
-rw-r--r-- | vcl/source/window/impldockingwrapper.hxx | 131 | ||||
-rw-r--r-- | vcl/source/window/menu.cxx | 6 | ||||
-rw-r--r-- | vcl/source/window/toolbox.cxx | 1 | ||||
-rw-r--r-- | vcl/source/window/toolbox2.cxx | 2 | ||||
-rw-r--r-- | vcl/source/window/window.cxx | 1 |
10 files changed, 146 insertions, 107 deletions
diff --git a/include/vcl/dockwin.hxx b/include/vcl/dockwin.hxx index d8f69ccd1fb5..8dbe5ead00a4 100644 --- a/include/vcl/dockwin.hxx +++ b/include/vcl/dockwin.hxx @@ -62,110 +62,7 @@ struct EndPopupModeData {}; }; -/** ImplDockingWindowWrapper - * - * ImplDockingWindowWrapper obsoletes the DockingWindow class. - * It is better because it can make a "normal window" dockable. - * All DockingWindows should be converted the new class. - */ - -class ImplDockingWindowWrapper final -{ - friend class ::vcl::Window; - friend class DockingManager; - friend class DockingWindow; - -private: - - // the original 'Docking'window - VclPtr<vcl::Window> mpDockingWindow; - - // the original DockingWindow members - VclPtr<FloatingWindow> mpFloatWin; - VclPtr<vcl::Window> mpOldBorderWin; - VclPtr<vcl::Window> mpParent; - Link<FloatingWindow*,void> maPopupModeEndHdl; - Point maFloatPos; - Point maDockPos; - Point maMouseOff; - Size maMinOutSize; - Size maMaxOutSize; - tools::Rectangle maDragArea; - tools::Long mnTrackX; - tools::Long mnTrackY; - tools::Long mnTrackWidth; - tools::Long mnTrackHeight; - sal_Int32 mnDockLeft; - sal_Int32 mnDockTop; - sal_Int32 mnDockRight; - sal_Int32 mnDockBottom; - WinBits mnFloatBits; - bool mbDockCanceled:1, - mbDocking:1, - mbLastFloatMode:1, - mbDockBtn:1, - mbHideBtn:1, - mbStartDockingEnabled:1, - mbLocked:1; - - DECL_LINK( PopupModeEnd, FloatingWindow*, void ); - void ImplEnableStartDocking() { mbStartDockingEnabled = true; } - bool ImplStartDockingEnabled() const { return mbStartDockingEnabled; } - void ImplPreparePopupMode(); - -public: - ImplDockingWindowWrapper( const vcl::Window *pWindow ); - ~ImplDockingWindowWrapper(); - - vcl::Window* GetWindow() { return mpDockingWindow; } - void ImplStartDocking( const Point& rPos ); - - // those methods actually call the corresponding handlers - void StartDocking( const Point& rPos, tools::Rectangle const & rRect ); - bool Docking( const Point& rPos, tools::Rectangle& rRect ); - void EndDocking( const tools::Rectangle& rRect, bool bFloatMode ); - bool PrepareToggleFloatingMode(); - void ToggleFloatingMode(); - - void SetDragArea( const tools::Rectangle& rRect ); - const tools::Rectangle& GetDragArea() const { return maDragArea;} - - void Lock(); - void Unlock(); - bool IsLocked() const { return mbLocked;} - - void StartPopupMode( const tools::Rectangle& rRect, FloatWinPopupFlags nPopupModeFlags ); - void StartPopupMode( ToolBox* pParentToolBox, FloatWinPopupFlags nPopupModeFlags ); - bool IsInPopupMode() const; - - void SetPopupModeEndHdl( const Link<FloatingWindow*,void>& rLink ) { maPopupModeEndHdl = rLink; } - - void TitleButtonClick( TitleButton nButton ); - void Resizing( Size& rSize ); - void Tracking( const TrackingEvent& rTEvt ); - - void ShowTitleButton( TitleButton nButton, bool bVisible ); - - void SetMinOutputSizePixel( const Size& rSize ); - - void SetMaxOutputSizePixel( const Size& rSize ); - - bool IsDocking() const { return mbDocking; } - bool IsDockingCanceled() const { return mbDockCanceled; } - - void SetFloatingMode( bool bFloatMode ); - bool IsFloatingMode() const; - SystemWindow* GetFloatingWindow() const; - - void SetFloatStyle( WinBits nWinStyle ); - WinBits GetFloatStyle() const { return mnFloatBits;} - - void setPosSizePixel( tools::Long nX, tools::Long nY, - tools::Long nWidth, tools::Long nHeight, - PosSizeFlags nFlags ); - Point GetPosPixel() const; - Size GetSizePixel() const; -}; +class ImplDockingWindowWrapper; class VCL_DLLPUBLIC DockingManager { diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist index e51305a2f579..d3205d56d617 100644 --- a/solenv/clang-format/excludelist +++ b/solenv/clang-format/excludelist @@ -15117,6 +15117,7 @@ vcl/source/window/errinf.cxx vcl/source/window/event.cxx vcl/source/window/floatwin.cxx vcl/source/window/globalization.cxx +vcl/source/window/impldockingwrapper.hxx vcl/source/window/keycod.cxx vcl/source/window/keyevent.cxx vcl/source/window/layout.cxx diff --git a/vcl/source/window/dockmgr.cxx b/vcl/source/window/dockmgr.cxx index 83018e34622b..9b74789d2847 100644 --- a/vcl/source/window/dockmgr.cxx +++ b/vcl/source/window/dockmgr.cxx @@ -33,6 +33,8 @@ #include <vcl/timer.hxx> #include <vcl/settings.hxx> +#include "impldockingwrapper.hxx" + #define DOCKWIN_FLOATSTYLES (WB_SIZEABLE | WB_MOVEABLE | WB_CLOSEABLE | WB_STANDALONE) namespace { diff --git a/vcl/source/window/dockwin.cxx b/vcl/source/window/dockwin.cxx index efa9d2272672..77218140e507 100644 --- a/vcl/source/window/dockwin.cxx +++ b/vcl/source/window/dockwin.cxx @@ -33,6 +33,8 @@ #include <window.h> #include <brdwin.hxx> +#include "impldockingwrapper.hxx" + #define DOCKWIN_FLOATSTYLES (WB_SIZEABLE | WB_MOVEABLE | WB_CLOSEABLE | WB_STANDALONE) class DockingWindow::ImplData diff --git a/vcl/source/window/event.cxx b/vcl/source/window/event.cxx index 682dbd5a9fec..2a831a0ec995 100644 --- a/vcl/source/window/event.cxx +++ b/vcl/source/window/event.cxx @@ -29,6 +29,8 @@ #include <config_features.h> #include <comphelper/scopeguard.hxx> +#include "impldockingwrapper.hxx" + namespace vcl { void Window::DataChanged( const DataChangedEvent& ) diff --git a/vcl/source/window/impldockingwrapper.hxx b/vcl/source/window/impldockingwrapper.hxx new file mode 100644 index 000000000000..fe307ee6e356 --- /dev/null +++ b/vcl/source/window/impldockingwrapper.hxx @@ -0,0 +1,131 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <vcl/dockwin.hxx> +#include <memory> +#include <vector> + +/** ImplDockingWindowWrapper + * + * ImplDockingWindowWrapper obsoletes the DockingWindow class. + * It is better because it can make a "normal window" dockable. + * All DockingWindows should be converted the new class. + */ + +class ImplDockingWindowWrapper final +{ + friend class ::vcl::Window; + friend class DockingManager; + friend class DockingWindow; + +private: + + // the original 'Docking'window + VclPtr<vcl::Window> mpDockingWindow; + + // the original DockingWindow members + VclPtr<FloatingWindow> mpFloatWin; + VclPtr<vcl::Window> mpOldBorderWin; + VclPtr<vcl::Window> mpParent; + Link<FloatingWindow*,void> maPopupModeEndHdl; + Point maFloatPos; + Point maDockPos; + Point maMouseOff; + Size maMinOutSize; + Size maMaxOutSize; + tools::Rectangle maDragArea; + tools::Long mnTrackX; + tools::Long mnTrackY; + tools::Long mnTrackWidth; + tools::Long mnTrackHeight; + sal_Int32 mnDockLeft; + sal_Int32 mnDockTop; + sal_Int32 mnDockRight; + sal_Int32 mnDockBottom; + WinBits mnFloatBits; + bool mbDockCanceled:1, + mbDocking:1, + mbLastFloatMode:1, + mbDockBtn:1, + mbHideBtn:1, + mbStartDockingEnabled:1, + mbLocked:1; + + DECL_LINK( PopupModeEnd, FloatingWindow*, void ); + void ImplEnableStartDocking() { mbStartDockingEnabled = true; } + bool ImplStartDockingEnabled() const { return mbStartDockingEnabled; } + void ImplPreparePopupMode(); + +public: + ImplDockingWindowWrapper( const vcl::Window *pWindow ); + ~ImplDockingWindowWrapper(); + + vcl::Window* GetWindow() { return mpDockingWindow; } + void ImplStartDocking( const Point& rPos ); + + // those methods actually call the corresponding handlers + void StartDocking( const Point& rPos, tools::Rectangle const & rRect ); + bool Docking( const Point& rPos, tools::Rectangle& rRect ); + void EndDocking( const tools::Rectangle& rRect, bool bFloatMode ); + bool PrepareToggleFloatingMode(); + void ToggleFloatingMode(); + + void SetDragArea( const tools::Rectangle& rRect ); + const tools::Rectangle& GetDragArea() const { return maDragArea;} + + void Lock(); + void Unlock(); + bool IsLocked() const { return mbLocked;} + + void StartPopupMode( const tools::Rectangle& rRect, FloatWinPopupFlags nPopupModeFlags ); + void StartPopupMode( ToolBox* pParentToolBox, FloatWinPopupFlags nPopupModeFlags ); + bool IsInPopupMode() const; + + void SetPopupModeEndHdl( const Link<FloatingWindow*,void>& rLink ) { maPopupModeEndHdl = rLink; } + + void TitleButtonClick( TitleButton nButton ); + void Resizing( Size& rSize ); + void Tracking( const TrackingEvent& rTEvt ); + + void ShowTitleButton( TitleButton nButton, bool bVisible ); + + void SetMinOutputSizePixel( const Size& rSize ); + + void SetMaxOutputSizePixel( const Size& rSize ); + + bool IsDocking() const { return mbDocking; } + bool IsDockingCanceled() const { return mbDockCanceled; } + + void SetFloatingMode( bool bFloatMode ); + bool IsFloatingMode() const; + SystemWindow* GetFloatingWindow() const; + + void SetFloatStyle( WinBits nWinStyle ); + WinBits GetFloatStyle() const { return mnFloatBits;} + + void setPosSizePixel( tools::Long nX, tools::Long nY, + tools::Long nWidth, tools::Long nHeight, + PosSizeFlags nFlags ); + Point GetPosPixel() const; + Size GetSizePixel() const; +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx index ccb1178f8a0b..3992fe902b0b 100644 --- a/vcl/source/window/menu.cxx +++ b/vcl/source/window/menu.cxx @@ -105,9 +105,9 @@ void ImplClosePopupToolBox( const VclPtr<vcl::Window>& pWin ) { if ( pWin->GetType() == WindowType::TOOLBOX && ImplGetDockingManager()->IsInPopupMode( pWin ) ) { - ImplDockingWindowWrapper* pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( pWin ); - if ( pWrapper && pWrapper->GetFloatingWindow() ) - static_cast<FloatingWindow*>(pWrapper->GetFloatingWindow())->EndPopupMode( FloatWinPopupEndFlags::CloseAll ); + SystemWindow* pFloatingWindow = ImplGetDockingManager()->GetFloatingWindow(pWin); + if (pFloatingWindow) + static_cast<FloatingWindow*>(pFloatingWindow)->EndPopupMode( FloatWinPopupEndFlags::CloseAll ); } } diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx index eff09817c4a0..bf0033eb65ec 100644 --- a/vcl/source/window/toolbox.cxx +++ b/vcl/source/window/toolbox.cxx @@ -52,6 +52,7 @@ #include <vector> #include <math.h> +#include "impldockingwrapper.hxx" #define SMALLBUTTON_HSIZE 7 #define SMALLBUTTON_VSIZE 7 diff --git a/vcl/source/window/toolbox2.cxx b/vcl/source/window/toolbox2.cxx index c231848a9cf1..537012174eaf 100644 --- a/vcl/source/window/toolbox2.cxx +++ b/vcl/source/window/toolbox2.cxx @@ -44,6 +44,8 @@ #include <vcl/uitest/uiobject.hxx> +#include "impldockingwrapper.hxx" + using namespace vcl; #define TB_SEP_SIZE 8 // Separator size diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index e21cacd71c07..308d1c6b5b55 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -80,6 +80,7 @@ #include <win/salframe.h> #endif +#include "impldockingwrapper.hxx" using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; |