36 #define DOCKWIN_FLOATSTYLES (WB_SIZEABLE | WB_MOVEABLE | WB_CLOSEABLE | WB_STANDALONE)
59 sal_uInt64 mnLastTicks;
71 virtual ~ImplDockFloatWin()
override;
72 virtual void dispose()
override;
74 virtual void Move()
override;
75 virtual void Resize()
override;
77 virtual bool Close()
override;
85 mpDockWin( pDockingWin ),
86 mnLastTicks(
tools::
Time::GetSystemTicks() ),
88 mnLastUserEvent( nullptr )
103 maDockIdle.SetInvokeHandler(
LINK(
this, ImplDockFloatWin, DockTimerHdl ) );
105 maDockIdle.SetDebugName(
"vcl::ImplDockFloatWin maDockIdle" );
108 ImplDockFloatWin::~ImplDockFloatWin()
113 void ImplDockFloatWin::dispose()
115 if( mnLastUserEvent )
126 SAL_WARN_IF( !mpDockWin->IsFloatingMode(),
"vcl",
"docktimer called but not floating" );
134 mpDockWin->GetParent()->ImplGetFrameWindow()->HideTracking();
135 mpDockWin->EndDocking( maDockRect,
true );
141 mpDockWin->GetParent()->ImplGetFrameWindow()->HideTracking();
142 mpDockWin->EndDocking( maDockRect,
false );
153 PointerState aState = mpDockWin->GetParent()->GetPointerState();
155 mnLastUserEvent =
nullptr;
156 if( mpDockWin->IsDockable() &&
164 if( ! mpDockWin->IsDocking() )
165 mpDockWin->StartDocking();
169 Point aMousePos = mpDockWin->GetParent()->OutputToScreenPixel( aState.maPos );
171 bool bFloatMode = mpDockWin->Docking( aMousePos, maDockRect );
175 DockTimerHdl(
nullptr );
179 mpDockWin->GetParent()->ImplGetFrameWindow()->HideTracking();
181 mpDockWin->EndDocking( maDockRect,
true );
187 void ImplDockFloatWin::Move()
205 if( ! mnLastUserEvent )
209 void ImplDockFloatWin::Resize()
216 void ImplDockFloatWin::Resizing(
Size& rSize )
219 mpDockWin->Resizing( rSize );
224 return mpDockWin->Close();
248 Size aSize = Window::GetOutputSizePixel();
321 Window::ImplInit( pParent, nStyle,
nullptr );
338 else if ( Window::GetStyle() &
WB_3DLOOK )
368 const css::uno::Reference<css::frame::XFrame> &rFrame)
376 const OUString& rUIXMLDescription,
const css::uno::Reference<css::frame::XFrame> &rFrame)
381 loadUI(pParent, rID, rUIXMLDescription, rFrame);
407 return Window::Tracking( rTEvt );
444 if ( aFrameMousePos.X() < 0 )
445 aFrameMousePos.setX( 0 );
446 if ( aFrameMousePos.Y() < 0 )
447 aFrameMousePos.setY( 0 );
448 if ( aFrameMousePos.X() > aFrameSize.
Width()-1 )
449 aFrameMousePos.setX( aFrameSize.
Width()-1 );
450 if ( aFrameMousePos.Y() > aFrameSize.
Height()-1 )
451 aFrameMousePos.setY( aFrameSize.
Height()-1 );
462 bool bFloatMode =
Docking( aFramePos, aTrackRect );
474 if ( aCompRect == aTrackRect )
522 return Window::EventNotify( rNEvt );
533 if (!bDockingSupportCrippled && pMEvt->
IsMod1() && (pMEvt->
GetClicks() == 2) )
549 if ( pWindow !=
this )
564 rKey.
IsShift() && rKey.
IsMod1() && !bDockingSupportCrippled )
574 return Window::EventNotify( rNEvt );
607 Window::SetPosSizePixel( aPos, rRect.
GetSize() );
643 if (
GetSettings().GetStyleSettings().GetAutoMnemonic())
644 Accelerator::GenerateAutoMnemonicsOnHierarchy(
this);
677 Window::StateChanged( nType );
689 Window::DataChanged( rDCEvt );
743 pWin->mpWindowImpl->mpClientWindow =
this;
745 pWin->SetText( Window::GetText() );
746 Size aSize(Window::GetSizePixel());
747 pWin->SetOutputSizePixel(aSize);
754 pWin->SetMaxOutputSizePixel(
mpImplData->maMaxOutSize );
824 Window::setPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
829 Window::setPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
849 return Window::GetPosPixel();
855 return Window::GetPosPixel();
866 return Window::GetSizePixel();
872 return Window::GetSizePixel();
883 Window::SetOutputSizePixel( rNewSize );
890 Window::SetOutputSizePixel( rNewSize );
901 return Window::GetOutputSizePixel();
907 return Window::GetOutputSizePixel();
960 Window::SetText(rStr);
966 return Window::GetText();
1010 return Window::GetOptimalSize();
1026 bool bTriggerLayout =
true;
1029 bTriggerLayout =
false;
1033 bTriggerLayout =
false;
1050 setPosSizeOnContainee();
1082 !bTearable ? OString(
"InterimDockParent") : OString(
"InterimTearableParent"),
1083 !bTearable ? OUString(
"vcl/ui/interimdockparent.ui") : OUString(
"vcl/ui/interimtearableparent.ui"),
1085 , m_xBox(m_pUIBuilder->
get(
"box"))
1101 :
DockingWindow(pParent,
"DockingWindow",
"vcl/ui/dockingwindow.ui", rFrame)
1102 , m_xBox(m_pUIBuilder->
get(
"box"))
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
virtual Point GetPosPixel() const
void setOptimalLayoutSize()
#define LINK(Instance, Class, Member)
void SetOutputSizePixel(const Size &rNewSize) override
bool IsControlBackground() const
bool IsInputEnabled() const
WinBits const WB_DOCKABLE
void setDeferredProperties()
ActivateModeFlags GetActivateMode() const
static void setLayoutAllocation(vcl::Window &rWindow, const Point &rPos, const Size &rSize)
VclPtr< vcl::Window > m_xBox
virtual void SetText(const OUString &rStr) override
SAL_DLLPRIVATE void DoInitialLayout()
ResizableDockingWindow(vcl::Window *pParent, const css::uno::Reference< css::frame::XFrame > &rFrame=css::uno::Reference< css::frame::XFrame >())
WinBits const WB_SYSTEMWINDOW
constexpr sal_uInt16 KEY_MOD1
virtual bool PrepareToggleFloatingMode()
virtual void Tracking(const TrackingEvent &rTEvt) override
const Size & GetMinOutputSizePixel() const
void setWidth(tools::Long nWidth)
SAL_DLLPRIVATE void setPosSizeOnContainee()
WinBits const WB_NODIALOGCONTROL
#define DECL_LINK(Member, ArgType, RetType)
bool IsBackground() const
Resize runs before repaint, so we won't paint twice.
SAL_DLLPRIVATE Point ImplOutputToFrame(const Point &rPos)
Point AbsoluteScreenToOutputPixel(const Point &rPos) const
static Size getLayoutRequisition(const vcl::Window &rWindow)
SAL_DLLPRIVATE void SetIdleDebugName(const char *pDebugName)
const StyleSettings & GetStyleSettings() const
const Color & GetFaceColor() const
Important idle events to be run before processing drawing events.
void InvalidateSizeCache()
clear OptimalSize cache
virtual Size GetSizePixel() const
SAL_DLLPRIVATE vcl::Window * ImplGetFrameWindow() const
void SetFloatingPos(const Point &rNewPos)
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.
sal_uInt16 GetCode() const
DataChangedEventType GetType() const
const KeyEvent * GetKeyEvent() const
#define DOCKWIN_FLOATSTYLES
tools::Rectangle GetDesktopRectPixel() const
virtual void Resizing(Size &rSize)
virtual void SetSettings(const AllSettings &rSettings) override
const Color & GetControlBackground() const
bool IsCreatedWithToolkit() const
SAL_DLLPRIVATE void ImplUpdateAll()
bool IsDockingCanceled() const
Point GetPosPixel() const override
void StartTracking(StartTrackingFlags nFlags=StartTrackingFlags::NONE)
bool IsFloatingMode() const
DockingWindow(const DockingWindow &)=delete
void ImplStartDocking(const Point &rPos)
sal_uInt16 GetClicks() const
vcl::Window * GetWindow() const
IMPL_LINK_NOARG(ImplDockFloatWin, DockTimerHdl, Timer *, void)
void Enable(bool bEnable=true, bool bChild=true)
virtual Size GetOptimalSize() const override
Creates a hierarchy of vcl::Windows (widgets) from a .ui file for dialogs, sidebar, etc.
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
void EnableAlwaysOnTop(bool bEnable=true)
void ShowTracking(const tools::Rectangle &rRect, ShowTrackFlags nFlags=ShowTrackFlags::Small)
virtual void StartDocking()
virtual void setPosSizePixel(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, PosSizeFlags nFlags=PosSizeFlags::All) override
AllSettingsFlags GetFlags() const
virtual void Start() override
Activates the timer task.
void loadUI(vcl::Window *pParent, const OString &rID, const OUString &rUIXMLDescription, const css::uno::Reference< css::frame::XFrame > &rFrame)
void SetFloatStyle(WinBits nWinStyle)
virtual void queue_resize(StateChangedType eReason=StateChangedType::Layout)
virtual void SetOutputSizePixel(const Size &rNewSize)
sal_uInt16 GetModifier() const
virtual void queue_resize(StateChangedType eReason=StateChangedType::Layout) override
virtual bool Docking(const Point &rPos, tools::Rectangle &rRect)
Size GetOutputSizePixel() const
const Size & GetMinOutputSizePixel() const
constexpr OUStringLiteral aData
virtual void EndDocking(const tools::Rectangle &rRect, bool bFloatMode)
void SetDebugName(const char *pDebugName)
bool isLayoutEnabled() const
bool IsAlwaysOnTopEnabled() const
static void RemoveUserEvent(ImplSVEvent *nUserEvent)
Remove user event based on event ID.
void EnableInput(bool bEnable=true, bool bChild=true)
void SetMinOutputSizePixel(const Size &rSize)
static OUString GetUIRootDir()
WinBits const WB_DIALOGCONTROL
DropdownDockingWindow(vcl::Window *pParent, const css::uno::Reference< css::frame::XFrame > &rFrame=css::uno::Reference< css::frame::XFrame >(), bool bTearable=false)
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
bool mbIsCalculatingInitialLayoutSize
void SetActivateMode(ActivateModeFlags nMode)
VclPtr< vcl::Window > mpParent
bool IsFloatingMode() const
virtual ~DockingWindow() override
void ToTop(ToTopFlags nFlags=ToTopFlags::NONE)
void SetMaxOutputSizePixel(const Size &rSize)
WinBits GetFloatStyle() const
VclPtr< vcl::Window > m_xBox
ImplDockingWindowWrapper.
void SetParent(vcl::Window *pNewParent)
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
VclPtr< FloatingWindow > mpFloatWin
tools::Long Width() const
std::unique_ptr< WindowImpl > mpWindowImpl
void SetFloatingMode(bool bFloatMode)
Size get_preferred_size() const
std::unique_ptr< VclBuilder > m_pUIBuilder
bool isLayoutEnabled(const vcl::Window *pWindow)
MouseNotifyEvent GetType() const
const AllSettings & GetSettings() const
Size GetOutputSizePixel() const
SAL_DLLPRIVATE void ImplInitDockingWindowData()
Point ScreenToOutputPixel(const Point &rPos) const
bool IsTitleButtonVisible(TitleButton nButton) const
constexpr sal_uInt16 KEY_F10
vcl::Window * GetParent() const
bool IsTrackingEnded() const
Point OutputToAbsoluteScreenPixel(const Point &rPos) const
virtual void StateChanged(StateChangedType nType) override
virtual void SetPosSizePixel(const Point &rNewPos, const Size &rNewSize)
void SetFloatingMode(bool bFloatMode)
vcl::Window * GetWindow(GetWindowType nType) const
virtual bool EventNotify(NotifyEvent &rNEvt) override
void SetMask(WindowStateMask nValidMask)
VclPtr< vcl::Window > mpOldBorderWin
virtual ~ResizableDockingWindow() override
WinBits const WB_SIZEABLE
bool IsModifierChanged() const
void GetBorder(sal_Int32 &rLeftBorder, sal_Int32 &rTopBorder, sal_Int32 &rRightBorder, sal_Int32 &rBottomBorder) const
void GetWindowStateData(WindowStateData &rData) const
A construction helper for a temporary VclPtr.
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
Size GetSizePixel() const override
const vcl::KeyCode & GetKeyCode() const
Point GetFloatingPos() const
SAL_DLLPRIVATE void ImplInitSettings()
void AlwaysEnableInput(bool bAlways, bool bChild=true)
Override EnableInput.
DockingManager * ImplGetDockingManager()
static bool GetDockingFloatsSupported()
#define SAL_WARN_IF(condition, area, stream)
virtual ~DropdownDockingWindow() override
const MouseEvent * GetMouseEvent() const
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
void SetMaxOutputSizePixel(const Size &rSize)
tools::Long mnTrackHeight
virtual void doDeferredInit(WinBits nBits)
ImplDockingWindowWrapper * GetDockingWindowWrapper(const vcl::Window *pWin)
tools::Long AdjustWidth(tools::Long n)
static VclPtr< reference_type > Create(Arg &&...arg)
A construction helper for VclPtr.
SAL_DLLPRIVATE Point ImplFrameToOutput(const Point &rPos)
tools::Long Height() const
void SetInvokeHandler(const Link< Timer *, void > &rLink)
const Color & GetWindowColor() const
const Point & GetPosPixel() const
tools::Long AdjustHeight(tools::Long n)
std::unique_ptr< ImplData > mpImplData
void setHeight(tools::Long nHeight)
bool IsAlwaysEnableInput() const
returns the current AlwaysEnableInput state
virtual OUString GetText() const override
reference_type * get() const
Get the body.
bool IsTrackingCanceled() const
void SetPriority(TaskPriority ePriority)
Point OutputToScreenPixel(const Point &rPos) const
WinBits const WB_CLOSEABLE
WinBits const WB_MOVEABLE
VclPtr< FloatingWindow > mpFloatWin
void CallEventListeners(VclEventId nEvent, void *pData=nullptr)
virtual void DataChanged(const DataChangedEvent &rDCEvt) override
const MouseEvent & GetMouseEvent() const
SAL_DLLPRIVATE void ImplInit(vcl::Window *pParent, WinBits nStyle)
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
void SetMinOutputSizePixel(const Size &rSize)
virtual void SetPosPixel(const Point &rNewPos)
virtual void Resize() override
virtual void ToggleFloatingMode()
VclPtr< vcl::Window > mpDialogParent
An idle is a timer to be scheduled immediately.
static DockingManager * GetDockingManager()
void SetFloatStyle(WinBits nWinStyle)
Size bestmaxFrameSizeForScreenSize(const Size &rScreenSize)
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)