42 #include <osl/diagnose.h>
91 void SetText(
const OUString& rStr );
101 void Enable(
bool bEnable );
117 : pVclMultiLineEdit(pEdt)
141 if ( !bNeedVScroll && bAutoVScroll )
145 for ( sal_uInt32
i=0;
i<rEngine.GetParagraphCount(); ++
i )
146 nOverallTextHeight += rEngine.GetTextHeight(
i );
151 const bool bNeedScrollBox = bNeedVScroll && bNeedHScroll;
153 bool bScrollbarsChanged =
false;
154 if ( bHaveVScroll != bNeedVScroll )
157 bScrollbarsChanged =
true;
160 if ( bHaveHScroll != bNeedHScroll )
163 bScrollbarsChanged =
true;
166 if ( bHaveScrollBox != bNeedScrollBox )
171 if ( bScrollbarsChanged )
261 if ( pCurScrollBar == mpVScrollBar )
262 nDiffY = mpTextWindow->GetTextView()->GetStartDocPos().Y() - pCurScrollBar->GetThumbPos();
263 else if ( pCurScrollBar == mpHScrollBar )
264 nDiffX = mpTextWindow->GetTextView()->GetStartDocPos().X() - pCurScrollBar->GetThumbPos();
266 mpTextWindow->GetTextView()->Scroll( nDiffX, nDiffY );
279 else if ( nWinStyle &
WB_LEFT )
339 Size aEditSize = aSz;
353 Point aTextWindowPos;
359 aTextWindowPos.AdjustX(nSBWidth );
368 Size aTextWindowSize( aSz );
369 if ( aTextWindowSize.
Width() < 0 )
371 if ( aTextWindowSize.
Height() < 0 )
376 if ( aOldTextWindowSize == aTextWindowSize )
382 OSL_ENSURE( nIteration < 3,
"ImpVclMEdit::Resize: isn't this expected to terminate with the second iteration?" );
384 }
while ( nIteration <= 3 );
446 switch (pTextHint->
GetId())
448 case SfxHintId::TextViewScrolled:
455 case SfxHintId::TextHeightChanged:
460 if ( nTextHeight < nOutHeight )
466 case SfxHintId::TextFormatted:
479 case SfxHintId::TextModified:
484 case SfxHintId::TextViewSelectionChanged:
488 case SfxHintId::TextViewCaretChanged:
501 if ( aNewSelection.
Min() < 0 )
502 aNewSelection.
Min() = 0;
503 else if ( aNewSelection.
Min() > aText.getLength() )
504 aNewSelection.
Min() = aText.getLength();
505 if ( aNewSelection.
Max() < 0 )
506 aNewSelection.
Max() = 0;
507 else if ( aNewSelection.
Max() > aText.getLength() )
508 aNewSelection.
Max() = aText.getLength();
512 sal_uInt32 nPara = 0;
517 if ( x == aNewSelection.
Min() )
518 aTextSel.GetStart() =
TextPaM( nPara, nChar );
519 if ( x == aNewSelection.
Max() )
520 aTextSel.GetEnd() =
TextPaM( nPara, nChar );
522 if ( ( x < aText.getLength() ) && ( aText[ x ] ==
'\n' ) )
543 for ( sal_uInt32
n = 0;
n < aTextSel.GetStart().GetPara(); ++
n )
553 for ( sal_uInt32
n = aTextSel.GetStart().GetPara();
n < aTextSel.GetEnd().GetPara(); ++
n )
609 rnCols =
static_cast<sal_uInt16
>(aOutSz.
Width()/aCharSz.Width());
610 rnLines =
static_cast<sal_uInt16
>(aOutSz.
Height()/aCharSz.Height());
682 Window::MouseMove( rMEvt );
702 if ( nCode == css::awt::Key::SELECT_ALL ||
716 if (!aChars.isEmpty())
736 Window::KeyInput( rKEvent );
753 bool bEnableCut =
true;
754 bool bEnableCopy =
true;
755 bool bEnableDelete =
true;
756 bool bEnablePaste =
true;
757 bool bEnableSpecialChar =
true;
758 bool bEnableUndo =
true;
764 bEnableDelete =
false;
769 bEnablePaste =
false;
770 bEnableDelete =
false;
771 bEnableSpecialChar =
false;
773 if ( !
mpExtTextView->GetTextEngine()->HasUndoManager() || !
mpExtTextView->GetTextEngine()->GetUndoManager().GetUndoActionCount() )
793 sal_uInt16
n = pPopup->
Execute(
this, aPos );
795 if (sCommand ==
"undo")
801 else if (sCommand ==
"cut")
807 else if (sCommand ==
"copy")
811 else if (sCommand ==
"paste")
817 else if (sCommand ==
"delete")
823 else if (sCommand ==
"selectall")
827 else if (sCommand ==
"specialchar")
830 if (!aChars.isEmpty())
844 Window::Command( rCEvt );
876 :
Edit( pParent, nWinStyle )
878 SetType( WindowType::MULTILINEEDIT );
939 pImpVclMEdit->GetTextWindow()->SetTextColor(aTextColor);
943 pImpVclMEdit->GetTextWindow()->SetPaintTransparent(
true);
984 pImpVclMEdit->GetTextWindow()->GetTextEngine()->SetFont(TheFont);
985 pImpVclMEdit->GetTextWindow()->SetTextColor(aTextColor);
992 pImpVclMEdit->GetTextWindow()->SetPaintTransparent(
true);
1150 sal_Int32 nLeft, nTop, nRight, nBottom;
1160 Size aSz = rPrefSize;
1161 sal_Int32 nLeft, nTop, nRight, nBottom;
1182 sal_Int32 nLeft, nTop, nRight, nBottom;
1191 pImpVclMEdit->GetMaxVisColumnsAndLines( rnCols, rnLines );
1236 pImpVclMEdit->GetTextWindow()->SetPaintTransparent(
true );
1280 if ( bBorder || bBackground )
1302 aTextSz.
setHeight( nLines*aTextSz.Height() );
1308 if ( ( nOffY < 0 ) || ( (nOffY+aTextSz.Height()) > aSize.
Height() ) || ( (nOffX+aTextSz.Width()) > aSize.
Width() ) )
1311 if ( aTextSz.Height() > aSize.
Height() )
1321 aTE.
Draw( pDev,
Point( aPos.X() + nOffX, aPos.Y() + nOffY ) );
1350 pImpVclMEdit->GetTextWindow()->GetTextView()->SetSelection( aSel );
1437 pImpVclMEdit->GetTextWindow()->SetAutoFocusHide( bHide );
1442 pImpVclMEdit->GetTextWindow()->DisableSelectionOnFocus();
1455 return aPaM != pTextView->
CursorUp(aPaM);
1478 if (rKey ==
"cursor-visible")
1480 else if (rKey ==
"accepts-tab")
1491 rJsonWriter.
put(
"cursor",
pImpVclMEdit->GetTextWindow()->GetTextView()->IsCursorEnabled());
static bool toBool(std::string_view rValue)
#define LINK(Instance, Class, Member)
tools::Long GetTextHeight() const
Height where any character of the current font fits; in logic coordinates.
bool IsControlBackground() const
bool mbFocusSelectionHide
void ImpSetScrollBarRanges()
void SetFillColor(const Color &)
std::unique_ptr< TextView > mpExtTextView
void StateChanged(StateChangedType nType) override
VclPtr< ScrollBar > mpHScrollBar
void SetAlign(WinBits nWinStyle)
virtual void GetFocus() override
bool IsRightToLeft() const
void InsertText(const OUString &rNew)
virtual void Resize() override
void SetFont(const vcl::Font &rFont)
void setWidth(tools::Long nWidth)
Size CalcMinimumSize() const
FncGetSpecialChars GetGetSpecialCharsFunction()
void EnableFocusSelectionHide(bool bHide)
const CommandEvent * GetCommandEvent() const
WinBits const WB_NODIALOGCONTROL
void SetRightToLeft(bool bR2L)
OUString GetText(LineEnd aSeparator=LINEEND_LF) const
IMPL_LINK(ImpVclMEdit, ScrollHdl, ScrollBar *, pCurScrollBar, void)
constexpr::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
const StyleSettings & GetStyleSettings() const
WeakReference< XInterface > mxParent
constexpr sal_uInt16 KEY_A
void Push(vcl::PushFlags nFlags=vcl::PushFlags::ALL)
virtual void StateChanged(StateChangedType nStateChange) override
void DrawFrame(const tools::Rectangle &rRect, const Color &rLeftTopColor, const Color &rRightBottomColor)
virtual void Copy() override
std::function< std::unique_ptr< UIObject >vcl::Window *)> FactoryFunction
virtual Size GetSizePixel() const
void SetReadOnly(bool bRdOnly)
void EnableCursor(bool bEnable)
const Color & GetWorkspaceColor() const
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
tools::Long GetTextHeight() const
WinBits const WB_AUTOVSCROLL
const TextPaM & GetEnd() const
sal_uInt16 GetGroup() const
sal_uInt16 GetCode() const
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
DataChangedEventType GetType() const
const KeyEvent * GetKeyEvent() const
virtual void Paste() override
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect) override
void IntersectClipRegion(const tools::Rectangle &rRect)
virtual void DumpAsPropertyTree(tools::JsonWriter &rJsonWriter) override
Dumps itself and potentially its children to a property tree, to be written easily to JSON...
virtual bool set_property(const OString &rKey, const OUString &rValue) override
const Color & GetControlBackground() const
TextView * GetTextView() const
sal_Int32 GetMaxTextLen() const
void SetType(WindowType nType)
void SetIgnoreTab(bool bIgnore)
bool HandleScrollCommand(const CommandEvent &rCmd, ScrollBar *pHScrl, ScrollBar *pVScrl)
void Scroll(tools::Long nHorzScroll, tools::Long nVertScroll)
void Draw(OutputDevice *pDev, const Point &rPos)
const vcl::Font & GetFieldFont() const
const Color & GetFieldTextColor() const
constexpr sal_uInt16 KEY_UP
constexpr sal_uInt16 KEY_END
const Fraction & GetZoom() const
constexpr tools::Long Width() const
weld::Window * GetFrameWeld() const
void DataChanged(const DataChangedEvent &rDCEvt) override
VclPtr< VclMultiLineEdit > pVclMultiLineEdit
ESelection aNewSelection(GetSelection())
virtual void LoseFocus() override
void Enable(bool bEnable=true, bool bChild=true)
virtual void SetSystemTextColor(SystemTextColorFlags nFlags, bool bEnabled)
virtual void Command(const CommandEvent &rCEvt) override
TextWindow * GetTextWindow()
void ImpSetHScrollBarThumbPos()
const vcl::Font & GetFont() const
virtual void Modify() override
bool IsControlForeground() const
bool IsMouseEvent() const
virtual bool IsReadOnly() const override
AllSettingsFlags GetFlags() const
constexpr sal_uInt16 KEY_PAGEUP
virtual void GetFocus() override
Link< Edit &, void > aModifyHdlLink
ScrollBar & GetVScrollBar()
void SetCompoundControl(bool bCompound)
VclPtr< ScrollBar > mpVScrollBar
virtual bool set_property(const OString &rKey, const OUString &rValue) override
constexpr sal_uInt16 KEYGROUP_CURSOR
void GetMaxVisColumnsAndLines(sal_uInt16 &rnCols, sal_uInt16 &rnLines) const
virtual void SetModifyFlag() override
WinBits const WB_NOHIDESELECTION
std::unique_ptr< ImpVclMEdit > pImpVclMEdit
virtual void SetMaxTextLen(sal_Int32 nMaxLen) override
OUString GetTextLines(LineEnd aSeparator=LINEEND_LF) const
const Point & GetStartDocPos() const
virtual ~TextWindow() override
virtual ~VclMultiLineEdit() override
TextView * GetTextView() const
void DrawRect(const tools::Rectangle &rRect)
virtual void ApplySettings(vcl::RenderContext &rRenderContext) override
virtual ~ImpVclMEdit() override
const Color & GetControlForeground() const
tools::Long CalcTextWidth()
virtual void MouseButtonDown(const MouseEvent &rMEvt) override
constexpr sal_uInt16 KEY_DOWN
virtual FactoryFunction GetUITestFactory() const override
void SetReadOnly(bool bReadOnly)
void SetMaxTextLen(sal_Int32 nLen)
sal_Int32 GetScrollBarSize() const
ScrollBar & GetVScrollBar() const
VclPtr< PopupMenu > CreatePopupMenu()
const Color & GetDisableColor() const
TextWindow * GetTextWindow()
virtual void MouseButtonUp(const MouseEvent &rMEvt) override
virtual bool PreNotify(NotifyEvent &rNEvt)
tools::Long GetTextWidth(const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, vcl::text::TextLayoutCache const *=nullptr, SalLayoutGlyphs const *const pLayoutCache=nullptr) const
Width of the text.
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
void InsertText(const OUString &rStr)
void SetModified(bool bMod)
void SetMaxTextWidth(tools::Long nMaxWidth)
constexpr sal_uInt16 KEY_HOME
void DisableSelectionOnFocus()
void SetControlBackground()
virtual void SetReadOnly(bool bReadOnly=true)
OUString GetSelected() const
virtual void Cut() override
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
void CallEventListeners(VclEventId nEvent, void *pData=nullptr)
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
const AllSettings & GetSettings() const
const Color & GetFieldColor() const
CommandEventId GetCommand() const
static bool GetLayoutRTL()
constexpr sal_uInt16 KEY_PAGEDOWN
const TextPaM & GetStart() const
virtual bool PreNotify(NotifyEvent &rNEvt) override
Size CalcAdjustedSize(const Size &rPrefSize) const
void ImpUpdateScrollBarVis(WinBits nWinStyle)
ExtTextEngine * GetTextEngine() const
MouseNotifyEvent GetType() const
void SetSelection(const Selection &rSelection)
virtual sal_Int32 GetMaxTextLen() const override
sal_Int32 GetMaxTextLen() const
VclMultiLineEdit(vcl::Window *pParent, WinBits nWinStyle)
ScrollBar & GetHScrollBar()
virtual OUString GetSelected() const override
void Enable(bool bEnable)
ExtTextEngine * GetTextEngine() const
const AllSettings & GetSettings() const
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
void EnableCursor(bool bEnable)
void SetSelection(const TextSelection &rNewSel)
TextWindow(Edit *pParent)
virtual void SetReadOnly(bool bReadOnly=true) override
Size CalcBlockSize(sal_uInt16 nColumns, sal_uInt16 nLines) const
sal_Int32 GetTextLen() const
virtual void DumpAsPropertyTree(tools::JsonWriter &) override
Dumps itself and potentially its children to a property tree, to be written easily to JSON...
void SetStyle(WinBits nStyle)
bool IsCursorEnabled() const
virtual Size CalcMinimumSize() const override
virtual void SetPosSizePixel(const Point &rNewPos, const Size &rNewSize)
void SetColor(const Color &)
std::unique_ptr< ExtTextEngine > mpExtTextEngine
bool HandleCommand(const CommandEvent &rCEvt)
constexpr sal_uInt16 KEY_RIGHT
void SetText(const OUString &rStr)
OUString GetTextLines(LineEnd aSeparator) const
const Point & GetMousePosPixel() const
SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point &rLogicPt) const
DECL_LINK(ScrollHdl, ScrollBar *, void)
const TextSelection & GetSelection() const
constexpr sal_uInt16 KEY_S
virtual void setPosSizePixel(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, PosSizeFlags nFlags=PosSizeFlags::All)
const LanguageTag & getLocale()
virtual void Resize() override
WinBits const WB_SIZEABLE
void GetBorder(sal_Int32 &rLeftBorder, sal_Int32 &rTopBorder, sal_Int32 &rRightBorder, sal_Int32 &rBottomBorder) const
virtual const Selection & GetSelection() const override
void SetTextAlign(TxtAlign eAlign)
void SetPointer(PointerStyle)
const vcl::KeyCode & GetKeyCode() const
void SetMaxTextWidth(tools::Long nMaxWidth)
OUString GetTextLines(LineEnd aSeparator) const
Size CalcBlockSize(sal_uInt16 nColumns, sal_uInt16 nLines) const
void SetMaxTextLen(sal_Int32 nLen)
void SetMaxTextWidth(tools::Long nWidth)
constexpr tools::Long Height() const
void SetFont(const vcl::Font &rNewFont)
WinBits const WB_IGNORETAB
virtual void DeleteSelected() override
WinBits const WB_READONLY
VclPtr< TextWindow > mpTextWindow
void SetTransparent(bool bTransparent)
tools::Long GetTextHeight() const
Height where any character of the current font fits; in logic coordinates.
virtual void ReplaceSelected(const OUString &rStr) override
void Draw(OutputDevice *pDev, const Point &rPos, SystemTextColorFlags nFlags) override
::OutputDevice const * GetOutDev() const
tools::Long AdjustWidth(tools::Long n)
const Selection & GetSelection() const
void SetModified(bool bModified)
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
TextPaM CursorDown(const TextPaM &rPaM)
tools::Long CalcZoom(tools::Long n) const
tools::Long GetDrawPixel(::OutputDevice const *pDev, tools::Long nPixels) const
const vcl::Font & GetFont() const
void InitFromStyle(WinBits nWinStyle)
OUString GetSelected() const
tools::Long AdjustHeight(tools::Long n)
void GetMaxVisColumnsAndLines(sal_uInt16 &rnCols, sal_uInt16 &rnLines) const
Size GetOutputSizePixel() const
void setHeight(tools::Long nHeight)
virtual void KeyInput(const KeyEvent &rKEvent) override
bool IsPaintTransparent() const
tools::Long GetTextWidth(const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, vcl::text::TextLayoutCache const *=nullptr, SalLayoutGlyphs const *const pLayoutCache=nullptr) const
Width of the text.
reference_type * get() const
Get the body.
virtual bool EventNotify(NotifyEvent &rNEvt) override
OUString GetText() const override
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
void ApplyControlFont(vcl::RenderContext &rRenderContext, const vcl::Font &rDefaultFont)
constexpr sal_uInt16 KEY_LEFT
TextPaM CursorUp(const TextPaM &rPaM)
virtual void MouseMove(const MouseEvent &rMEvt) override
bool IsReallyVisible() const
ImpVclMEdit(VclMultiLineEdit *pVclMultiLineEdit, WinBits nWinStyle)
void SetAutoFocusHide(bool bAutoHide)
void SetText(const OUString &rStr)
WinBits const WB_NOTABSTOP
static WinBits ImplInitStyle(WinBits nStyle)
virtual void SetText(const OUString &rStr) override
virtual void SetSelection(const Selection &rSelection) override
VclPtr< ScrollBarBox > mpScrollBox
constexpr sal_uInt16 KEY_TAB
static std::unique_ptr< UIObject > create(vcl::Window *pWindow)
virtual void DataChanged(const DataChangedEvent &rDCEvt)
virtual bool EventNotify(NotifyEvent &rNEvt) override
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)