20#include <starmath.hrc>
29#include <editeng/editeng.hxx>
31#include <sfx2/sfxsids.hrc>
34#include <osl/diagnose.h>
40#include <document.hxx>
49 sal_Int32 &nPara, sal_uInt16 &nPos)
65 : mrEditWindow(rEditWindow)
66 , aModifyIdle(
"SmEditWindow ModifyIdle")
67 , aCursorMoveIdle(
"SmEditWindow CursorMoveIdle")
136 : rCmdBox(rMyCmdBoxWin)
137 , mxScrolledWindow(rBuilder.weld_scrolled_window(
"scrolledwindow", true))
177 return pView ? pView->
GetDoc() :
nullptr;
188 return &pDoc->GetEditEngine();
194 WeldEditView::StyleUpdated();
198 if (pEditEngine && pDoc)
207 pEditEngine->
SetDefTab(sal_uInt16(GetTextWidth(
"XXXX")));
212 OUString aTxt( pEditEngine->
GetText() );
213 pEditEngine->
Clear();
247 pViewSh->GetGraphicWidget().SetCursorPos(
static_cast<sal_uInt16
>(nRow), nCol);
251 aCursorMoveIdle.Stop();
267 if (pWData && CommandWheelMode::ZOOM == pWData->
GetMode())
271 if (rCEvt.
GetCommand() == CommandEventId::ModKeyChange)
274 if (rCEvt.
GetCommand() == CommandEventId::ContextMenu)
299 bool bCallBase =
true;
301 if (
dynamic_cast<const SmViewShell *
>(pViewShell) )
304 bCallBase = !pViewShell->
Escape();
311 bool autoClose =
false;
325 else if (selected.isEmpty() && !aSelection.
HasRange())
328 if (!selected.isEmpty())
330 sal_Int32
index = selected.indexOf(
"\n", aSelection.
nEndPos);
339 sal_Int32
length = selected.getLength();
344 selected = selected.copy(aSelection.
nEndPos);
360 if (pView && !bConsumed)
387 if (cCharCode ==
'{')
389 else if (cCharCode ==
'[')
391 else if (cCharCode ==
'(')
395 if (!sClose.isEmpty() && autoClose)
414 if (pDocShell && pEditEngine && pEditEngine->
IsModified())
442 if (
EditView* pEditView = GetEditView())
446 rScrolledWindow.vadjustment_get_value()),
447 pEditView->GetVisArea().GetSize()));
448 pEditView->Invalidate();
459 const auto nMargin = nScrollSize + 2;
481 int nVStepIncrement = aOut.
Height() * 2 / 10;
482 int nVPageIncrement = aOut.
Height() * 8 / 10;
483 int nVPageSize = aOut.
Height();
493 nVPageSize = std::min(nVPageSize, nVUpper);
496 nVStepIncrement, nVPageIncrement, nVPageSize);
503 OSL_ENSURE( pEditEngine,
"EditEngine missing" );
505 aText = pEditEngine->
GetText();
533 OSL_ENSURE( pEditEngine,
"EditEngine missing" );
534 if (!pEditEngine || pEditEngine->
IsModified())
587 sal_Int32 nTextLen = pEditEngine->
GetText().getLength();
610 const sal_uInt16 nCol = sal::static_int_cast< sal_uInt16 >(rPos.
X());
611 const sal_uInt16 nRow = sal::static_int_cast< sal_uInt16 >(rPos.
Y() - 1);
613 pEditView->SetSelection(
ESelection(nRow, nCol - 1, nRow, nCol));
639 while (eSelection.
nEndPara < nCounts)
667 OUString aText(pEditEngine->
GetText(nPara));
668 static constexpr OUStringLiteral aMark(
u"<?>");
671 while ( (
nPos = aText.lastIndexOf(aMark, nMax)) < 0 )
675 aText = pEditEngine->
GetText(nPara);
676 nMax = aText.getLength();
684 return rText.find(
u"<?>") != std::u16string_view::npos;
699 return pEditView->GetSelection();
706 pEditView->SetSelection(rSel);
713 bool bEmpty = ( pEditEngine && pEditEngine->
GetTextLen() == 0 );
730 pModifyDoc->SetModified();
790 sal_Int32 nStartIndex = 0;
793 for (sal_Int32 nParaPos = 0; nParaPos < aSelection.
nStartPara; nParaPos++)
794 nStartIndex = aCurrentFormula.indexOf(
"\n", nStartIndex) + 1;
800 OUString string(rText);
804 if (!selected.isEmpty())
805 string =
string.replaceFirst(
"<?>", selected);
808 if (aSelection.
nStartPos > 0 && aCurrentFormula[nStartIndex - 1] !=
' ')
809 string =
" " + string;
843 pViewSh->GetViewFrame().GetDispatcher()->ExecuteList(
844 SID_TEXT, SfxCallMode::RECORD,
859 if (
EditEngine* pEditEngine = pEditView->GetEditEngine())
862 pEditEngine->RemoveView(pEditView);
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
CommandEventId GetCommand() const
const CommandWheelData * GetWheelData() const
const Point & GetMousePosPixel() const
CommandWheelMode GetMode() const
OUString GetText(LineEnd eEnd=LINEEND_LF) const
void SetText(const OUString &rStr)
sal_Int32 GetParagraphCount() const
sal_uInt32 GetTextHeight() const
sal_Int32 GetTextLen() const
void SetStatusEventHdl(const Link< EditStatus &, void > &rLink)
void SetBackgroundColor(const Color &rColor)
void SetDefTab(sal_uInt16 nDefTab)
void InsertView(EditView *pEditView, size_t nIndex=EE_APPEND)
ESelection GetSelection() const
tools::Rectangle GetVisArea() const
bool HasSelection() const
void SetSelection(const ESelection &rNewSel)
void InsertText(const OUString &rNew, bool bSelect=false, bool bLOKShowSelect=true)
EditEngine * GetEditEngine() const
const tools::Rectangle & GetOutputArea() const
OUString GetSelected() const
virtual void Start(bool bStartTimer=true) override
sal_Unicode GetCharCode() const
const vcl::KeyCode & GetKeyCode() const
constexpr tools::Long Y() const
constexpr tools::Long X() const
void Invalidate(sal_uInt16 nId)
SfxBindings & GetBindings()
SfxViewFrame & GetViewFrame() const
virtual bool KeyInput(const KeyEvent &rKeyEvent)
constexpr tools::Long Height() const
Point WidgetToWindowPos(const weld::Widget &rWidget, const Point &rPos)
void ShowContextMenu(const Point &rPos)
EditEngine & GetEditEngine()
virtual void SetModified(bool bModified=true) override
void UpdateEditEngineDefaultFonts()
void UserPossiblyChangedText()
void SetText(const OUString &rText)
virtual bool MouseButtonUp(const MouseEvent &rEvt) override
virtual void StyleUpdated() override
virtual EditEngine * GetEditEngine() const override
virtual bool Command(const CommandEvent &rCEvt) override
SmEditTextWindow(SmEditWindow &rEditWindow)
virtual void LoseFocus() override
SmEditWindow & mrEditWindow
virtual void EditViewScrollStateChange() override
void InsertText(const OUString &rText)
virtual bool KeyInput(const KeyEvent &rKeyEvt) override
virtual void GetFocus() override
ESelection GetSelection() const
virtual void SetDrawingArea(weld::DrawingArea *pDrawingArea) override
void UpdateStatus(bool bSetDocModified)
virtual ~SmEditTextWindow() override
std::unique_ptr< weld::ScrolledWindow > mxScrolledWindow
void SetText(const OUString &rText)
void InsertText(const OUString &rText)
weld::Window * GetFrameWeld() const
tools::Rectangle AdjustScrollBars()
void CreateEditView(weld::Builder &rBuilder)
EditView * GetEditView() const
EditEngine * GetEditEngine()
SmEditWindow(SmCmdBoxWindow &rMyCmdBoxWin, weld::Builder &rBuilder)
~SmEditWindow() COVERITY_NOEXCEPT_FALSE
SmCmdBoxWindow & GetCmdBox() const
void MarkError(const Point &rPos)
bool IsAllSelected() const
ESelection GetSelection() const
std::unique_ptr< SmEditTextWindow > mxTextControl
std::unique_ptr< weld::CustomWeld > mxTextControlWin
void SetSelection(const ESelection &rSel)
void SetScrollBarRanges()
bool IsAutoCloseBrackets() const
bool IsAutoRedraw() const
SmMathConfig * GetConfig()
void SetInsertIntoEditWindow(bool bEditWindowHadFocusLast)
Set bInsertIntoEditWindow so we know where to insert.
static bool IsInlineEditEnabled()
SmDocShell * GetDoc() const
SmGraphicWidget & GetGraphicWidget()
const Color & GetWindowColor() const
const Color & GetFieldColor() const
void SetPriority(TaskPriority ePriority)
void SetInvokeHandler(const Link< Timer *, void > &rLink)
virtual void Resize() override
std::unique_ptr< EditView > m_xEditView
virtual bool Command(const CommandEvent &rCEvt) override
void SetAcceptsTab(bool bAcceptsTab)
virtual EditView * GetEditView() const
virtual bool MouseButtonUp(const MouseEvent &rMEvt) override
virtual void GetFocus() override
virtual bool KeyInput(const KeyEvent &rKEvt) override
virtual void LoseFocus() override
sal_uInt16 GetCode() const
virtual OutputDevice & get_ref_device()=0
virtual void set_cursor(PointerStyle ePointerStyle)=0
virtual void SetHelpId(const OUString &) override
IMPL_LINK_NOARG(SmEditTextWindow, ModifyTimerHdl, Timer *, void)
static bool HasMark(std::u16string_view rText)
void SmGetLeftSelectionPart(const ESelection &rSel, sal_Int32 &nPara, sal_uInt16 &nPos)
ESelection aNewSelection(GetSelection())
IMPL_LINK(SmEditWindow, ScrollHdl, weld::ScrolledWindow &, rScrolledWindow, void)
constexpr OUStringLiteral HID_SMA_COMMAND_WIN_EDIT
constexpr sal_uInt16 KEY_ESCAPE
constexpr sal_uInt16 KEY_F1
#define LINK(Instance, Class, Member)
std::basic_string_view< charT, traits > trim(std::basic_string_view< charT, traits > str)
void GetSelection(struct ESelection &rSel, SvxTextForwarder const *pForwarder) noexcept