38 #define DOCKWIN_FLOATSTYLES (WB_SIZEABLE | WB_MOVEABLE | WB_CLOSEABLE | WB_STANDALONE)
46 sal_uInt64 mnLastTicks;
48 Timer m_aEndDockTimer;
60 virtual ~ImplDockFloatWin2()
override;
61 virtual void dispose()
override;
63 virtual void Move()
override;
64 virtual void Resize()
override;
65 virtual void TitleButtonClick(
TitleButton nButton )
override;
66 virtual void Resizing(
Size& rSize )
override;
67 virtual bool Close()
override;
75 mpDockWin( pDockingWin ),
76 mnLastTicks(
tools::
Time::GetSystemTicks() ),
77 m_aDockTimer(
"vcl::ImplDockFloatWin2 m_aDockTimer"),
78 m_aEndDockTimer(
"vcl::ImplDockFloatWin2 m_aEndDockTimer" ),
80 mnLastUserEvent( nullptr )
93 SetBackground( GetSettings().GetStyleSettings().GetFaceColor() );
95 m_aDockTimer.SetInvokeHandler(
LINK(
this, ImplDockFloatWin2, DockTimerHdl ) );
97 m_aDockTimer.SetTimeout( 50 );
99 m_aEndDockTimer.SetInvokeHandler(
LINK(
this, ImplDockFloatWin2, EndDockTimerHdl ) );
101 m_aEndDockTimer.SetTimeout( 50 );
104 ImplDockFloatWin2::~ImplDockFloatWin2()
109 void ImplDockFloatWin2::dispose()
111 if( mnLastUserEvent )
118 SAL_WARN_IF( !mpDockWin->IsFloatingMode(),
"vcl",
"docktimer called but not floating" );
120 PointerState aState = GetPointerState();
125 mpDockWin->GetWindow()->GetParent()->ImplGetFrameWindow()->HideTracking();
127 m_aDockTimer.Start();
131 mpDockWin->GetWindow()->GetParent()->ImplGetFrameWindow()->HideTracking();
132 mpDockWin->EndDocking( maDockRect,
false );
137 m_aDockTimer.Start();
143 SAL_WARN_IF( !mpDockWin->IsFloatingMode(),
"vcl",
"enddocktimer called but not floating" );
145 PointerState aState = GetPointerState();
148 mpDockWin->GetWindow()->GetParent()->ImplGetFrameWindow()->HideTracking();
149 mpDockWin->EndDocking( maDockRect,
true );
152 m_aEndDockTimer.Start();
158 mnLastUserEvent =
nullptr;
163 bool bRealMove =
true;
171 if( pBorder !=
this )
174 sal_Int32 nLeft, nTop, nRight, nBottom;
175 GetBorder( nLeft, nTop, nRight, nBottom );
177 aBorderRect.SetBottom( aBorderRect.Top() + nTop );
178 aBorderRect.AdjustLeft(nLeft );
179 aBorderRect.AdjustRight( -nRight );
182 bRealMove = aBorderRect.Contains( aBorderState.maPos );
186 if( mpDockWin->GetWindow()->IsVisible() &&
198 if( ! mpDockWin->IsDocking() )
199 mpDockWin->StartDocking( aMousePos, maDockRect );
201 bool bFloatMode = mpDockWin->Docking( aMousePos, maDockRect );
206 maDockRect.SetPos( mpDockWin->GetWindow()->GetParent()->ImplGetFrameWindow()->ScreenToOutputPixel(
207 maDockRect.TopLeft() ) );
209 m_aEndDockTimer.Stop();
210 m_aDockTimer.Invoke();
214 mpDockWin->GetWindow()->GetParent()->ImplGetFrameWindow()->HideTracking();
216 m_aEndDockTimer.Invoke();
222 void ImplDockFloatWin2::Move()
229 mpDockWin->GetWindow()->Move();
240 if( ! mnLastUserEvent )
244 void ImplDockFloatWin2::Resize()
250 Size aSize( GetSizePixel() );
251 mpDockWin->GetWindow()->ImplPosSizeWindow( 0, 0, aSize.Width(), aSize.Height(),
PosSizeFlags::PosSize );
255 void ImplDockFloatWin2::TitleButtonClick(
TitleButton nButton )
258 mpDockWin->TitleButtonClick( nButton );
261 void ImplDockFloatWin2::Resizing(
Size& rSize )
264 mpDockWin->Resizing( rSize );
284 if (xWrapper && xWrapper->mpDockingWindow == pWindow)
285 return xWrapper.get();
298 return (pWrapper !=
nullptr);
313 return pWrapper && pWrapper->
IsLocked();
398 const auto& xWrapper = *it;
399 if (xWrapper && xWrapper->mpDockingWindow == pWindow)
404 auto pTemporaryOwner = std::move(*it);
438 virtual css::uno::Reference< css::accessibility::XAccessible >
CreateAccessible()
override;
443 mbToolBox( bToolBox )
469 return css::uno::Reference< css::accessibility::XAccessible >();
473 : mpDockingWindow(const_cast<
vcl::
Window*>(pWindow))
474 , mpFloatWin(nullptr)
475 , mpOldBorderWin(nullptr)
477 , maMaxOutSize( SHRT_MAX, SHRT_MAX )
487 , mbDockCanceled(
false)
489 , mbLastFloatMode(
false)
493 , mbStartDockingEnabled(
false)
587 if ( aFrameMousePos.X() < 0 )
588 aFrameMousePos.setX( 0 );
589 if ( aFrameMousePos.Y() < 0 )
590 aFrameMousePos.setY( 0 );
591 if ( aFrameMousePos.X() > aFrameSize.
Width()-1 )
592 aFrameMousePos.setX( aFrameSize.
Width()-1 );
593 if ( aFrameMousePos.Y() > aFrameSize.
Height()-1 )
594 aFrameMousePos.setY( aFrameSize.
Height()-1 );
604 bool bFloatMode =
Docking( aPos, aTrackRect );
617 if ( aCompRect == aTrackRect )
713 bool bFloating =
true;
783 pWin->SetText( xWindow->
GetText() );
799 pWin->mpWindowImpl->mpClientWindow = xWindow;
858 if ( mpOldBorderWin )
871 auto xFloatWin = std::move(mpFloatWin);
872 maPopupModeEndHdl.Call(xFloatWin);
873 xFloatWin.disposeAndClear();
937 pWin->SetPosPixel(
Point() );
virtual Point GetPosPixel() const
#define LINK(Instance, Class, Member)
bool IsInputEnabled() const
DECL_LINK(CheckNameHdl, SvxNameDialog &, bool)
WinBits const WB_NOSHADOW
ActivateModeFlags GetActivateMode() const
void StartPopupMode(const tools::Rectangle &rRect, FloatWinPopupFlags nFlags)
VclPtr< vcl::Window > mpOldBorderWin
bool IsFloating(const vcl::Window *pWin)
WinBits const WB_SYSTEMWINDOW
constexpr sal_uInt16 KEY_MOD1
void SetPopupModeEndHdl(const Link< FloatingWindow *, void > &rLink)
void StartPopupMode(const tools::Rectangle &rRect, FloatWinPopupFlags nPopupModeFlags)
bool Docking(const Point &rPos, tools::Rectangle &rRect)
tools::Rectangle GetPosSizePixel(const vcl::Window *pWin)
void SetSettings(const AllSettings &rSettings)
SAL_DLLPRIVATE Point ImplOutputToFrame(const Point &rPos)
Point AbsoluteScreenToOutputPixel(const Point &rPos) const
VclPtr< vcl::Window > mpDockingWindow
Important idle events to be run before processing drawing events.
virtual void Resize() override
void ImplStartDocking(const Point &rPos)
virtual Size GetSizePixel() const
SAL_DLLPRIVATE vcl::Window * ImplGetFrameWindow() const
void SetPopupModeEndHdl(const vcl::Window *pWindow, const Link< FloatingWindow *, void > &rLink)
bool IsDockingCanceled() const
void ShowTitleButton(TitleButton nButton, bool bVisible)
void ToggleFloatingMode()
Point GetPosPixel() const
const Size & GetMaxOutputSizePixel() const
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
Post a user event to the default window.
virtual void Resizing(Size &rSize)
void SetMinOutputSizePixel(const Size &rSize)
SAL_DLLPRIVATE void ImplUpdateAll()
void Lock(const vcl::Window *pWin)
Size GetSizePixel() const
void StartTracking(StartTrackingFlags nFlags=StartTrackingFlags::NONE)
bool IsFloatingMode() const
void Tracking(const TrackingEvent &rTEvt)
constexpr tools::Long Width() const
WinBits const WB_OWNERDRAWDECORATION
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible()
tools::Rectangle maDragArea
void ShowTracking(const tools::Rectangle &rRect, ShowTrackFlags nFlags=ShowTrackFlags::Small)
std::vector< std::unique_ptr< ImplDockingWindowWrapper, o3tl::default_delete< ImplDockingWindowWrapper > > > mvDockingWindows
ImplDockingWindowWrapper(const vcl::Window *pWindow)
tools::Long mnTrackHeight
virtual void SetOutputSizePixel(const Size &rNewSize)
virtual OUString GetText() const
WinBits const WB_STDPOPUP
VclPtr< vcl::Window > mpParent
void EndDocking(const tools::Rectangle &rRect, bool bFloatMode)
SystemWindow * GetFloatingWindow() const
const Size & GetMinOutputSizePixel() const
constexpr OUStringLiteral aData
bool IsAlwaysOnTopEnabled() const
void SetDragArea(const tools::Rectangle &rRect)
vcl::Window * GetWindow()
static void RemoveUserEvent(ImplSVEvent *nUserEvent)
Remove user event based on event ID.
void SetMinOutputSizePixel(const Size &rSize)
#define DOCKWIN_FLOATSTYLES
void SetMaxOutputSizePixel(const Size &rSize)
constexpr sal_uInt16 KEY_HOME
ImplDockingWindowWrapper.
tools::Rectangle maTrackRect
void TitleButtonClick(TitleButton nButton)
void SetParent(vcl::Window *pNewParent)
VclPtr< FloatingWindow > mpFloatWin
const AllSettings & GetSettings() const
std::unique_ptr< WindowImpl > mpWindowImpl
void AddWindow(const vcl::Window *pWin)
bool IsInPopupMode() const
bool IsDockable(const vcl::Window *pWin)
Point ScreenToOutputPixel(const Point &rPos) const
bool IsTitleButtonVisible(TitleButton nButton) const
vcl::Window * GetParent() const
SystemWindow * GetFloatingWindow(const vcl::Window *pWin)
bool IsTrackingEnded() const
exports com.sun.star.chart2. data
virtual void SetPosSizePixel(const Point &rNewPos, const Size &rNewSize)
void SetFloatingMode(bool bFloatMode)
bool IsInPopupMode(const vcl::Window *pWin)
vcl::Window * GetWindow(GetWindowType nType) const
bool PrepareToggleFloatingMode()
RegionData_Impl * mpParent
void setPosSizePixel(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, PosSizeFlags nFlags)
virtual void setPosSizePixel(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, PosSizeFlags nFlags=PosSizeFlags::All)
virtual void KeyInput(const KeyEvent &rKEvt)
WinBits const WB_SIZEABLE
bool IsModifierChanged() const
void GetBorder(sal_Int32 &rLeftBorder, sal_Int32 &rTopBorder, sal_Int32 &rRightBorder, sal_Int32 &rBottomBorder) const
A construction helper for a temporary VclPtr.
void RemoveWindow(const vcl::Window *pWin)
static bool GetDockingFloatsSupported()
#define SAL_WARN_IF(condition, area, stream)
void SetMaxOutputSizePixel(const Size &rSize)
constexpr tools::Long Height() const
void SetPosSizePixel(vcl::Window const *pWin, tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, PosSizeFlags nFlags)
void Unlock(const vcl::Window *pWin)
void ShowMenuTitleButton(bool bVisible)
ImplDockingWindowWrapper * GetDockingWindowWrapper(const vcl::Window *pWin)
void StartDocking(const Point &rPos, tools::Rectangle const &rRect)
static VclPtr< reference_type > Create(Arg &&...arg)
A construction helper for VclPtr.
SAL_DLLPRIVATE Point ImplFrameToOutput(const Point &rPos)
void SetFloatingMode(const vcl::Window *pWin, bool bFloating)
const Point & GetPosPixel() const
void EndPopupMode(const vcl::Window *pWin)
IMPL_LINK_NOARG(ImplDockFloatWin2, DockTimerHdl, Timer *, void)
Size GetOutputSizePixel() const
WindowType GetType() const
bool IsAlwaysEnableInput() const
returns the current AlwaysEnableInput state
bool IsLocked(const vcl::Window *pWin)
reference_type * get() const
Get the body.
void StartPopupMode(const vcl::Window *pWin, const tools::Rectangle &rRect, FloatWinPopupFlags nPopupModeFlags)
bool IsTrackingCanceled() const
virtual void TitleButtonClick(TitleButton nButton)
~ImplDockingWindowWrapper()
Point OutputToScreenPixel(const Point &rPos) const
WinBits const WB_CLOSEABLE
WinBits const WB_MOVEABLE
void CallEventListeners(VclEventId nEvent, void *pData=nullptr)
const MouseEvent & GetMouseEvent() const
virtual void Resizing(Size &rSize)
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
PointerState GetPointerState()
WinBits GetFloatStyle() const
bool mbStartDockingEnabled
virtual void SetPosPixel(const Point &rNewPos)
virtual void Resize() override
void ImplPreparePopupMode()
void SetFloatStyle(WinBits nWinStyle)
void Resizing(Size &rSize)
bool m_bDetectedRangeSegmentation false
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)