LibreOffice Module starmath (master) 1
edit.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <starmath.hrc>
21#include <helpids.h>
22
23#include <vcl/commandevent.hxx>
24#include <vcl/event.hxx>
25#include <vcl/ptrstyle.hxx>
26#include <vcl/settings.hxx>
27
28#include <editeng/editview.hxx>
29#include <editeng/editeng.hxx>
30#include <sfx2/dispatch.hxx>
31#include <sfx2/sfxsids.hrc>
32#include <svl/stritem.hxx>
33#include <sfx2/viewfrm.hxx>
34#include <osl/diagnose.h>
35#include <o3tl/string_view.hxx>
36
37#include <edit.hxx>
38#include <smmod.hxx>
39#include <view.hxx>
40#include <document.hxx>
41#include <cfgitem.hxx>
42#include <smediteng.hxx>
43
44using namespace com::sun::star::accessibility;
45using namespace com::sun::star;
46
47
49 sal_Int32 &nPara, sal_uInt16 &nPos)
50 // returns paragraph number and position of the selections left part
51{
52 // compare start and end of selection and use the one that comes first
53 if ( rSel.nStartPara < rSel.nEndPara
54 || (rSel.nStartPara == rSel.nEndPara && rSel.nStartPos < rSel.nEndPos) )
55 { nPara = rSel.nStartPara;
56 nPos = rSel.nStartPos;
57 }
58 else
59 { nPara = rSel.nEndPara;
60 nPos = rSel.nEndPos;
61 }
62}
63
65 : mrEditWindow(rEditWindow)
66 , aModifyIdle("SmEditWindow ModifyIdle")
67 , aCursorMoveIdle("SmEditWindow CursorMoveIdle")
68{
69 SetAcceptsTab(true);
70
71 aModifyIdle.SetInvokeHandler(LINK(this, SmEditTextWindow, ModifyTimerHdl));
72 aModifyIdle.SetPriority(TaskPriority::LOWEST);
73
75 {
76 aCursorMoveIdle.SetInvokeHandler(LINK(this, SmEditTextWindow, CursorMoveTimerHdl));
77 aCursorMoveIdle.SetPriority(TaskPriority::LOWEST);
78 }
79}
80
82{
85}
86
88{
90 assert(pDoc);
91 return &pDoc->GetEditEngine();
92}
93
95{
97}
98
100{
102
103 const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
104 Color aBgColor = rStyleSettings.GetWindowColor();
105
106 OutputDevice& rDevice = pDrawingArea->get_ref_device();
107 rDevice.SetBackground(aBgColor);
108
110
111 EnableRTL(false);
112
113 EditEngine* pEditEngine = GetEditEngine();
114
115 m_xEditView.reset(new EditView(pEditEngine, nullptr));
116 m_xEditView->setEditViewCallbacks(this);
117
118 pEditEngine->InsertView(m_xEditView.get());
119
120 m_xEditView->SetOutputArea(mrEditWindow.AdjustScrollBars());
121
122 m_xEditView->SetBackgroundColor(aBgColor);
123
124 pDrawingArea->set_cursor(PointerStyle::Text);
125
126 pEditEngine->SetStatusEventHdl(LINK(this, SmEditTextWindow, EditStatusHdl));
127
129
130 //Apply zoom to smeditwindow text
131 if(GetEditView())
132 static_cast<SmEditEngine*>(GetEditEngine())->executeZoom(GetEditView());
133}
134
136 : rCmdBox(rMyCmdBoxWin)
137 , mxScrolledWindow(rBuilder.weld_scrolled_window("scrolledwindow", true))
138{
139 mxScrolledWindow->connect_vadjustment_changed(LINK(this, SmEditWindow, ScrollHdl));
140
141 CreateEditView(rBuilder);
142}
143
144SmEditWindow::~SmEditWindow() COVERITY_NOEXCEPT_FALSE
145{
147 mxScrolledWindow.reset();
148}
149
151{
152 return rCmdBox.GetFrameWeld();
153}
154
156{
159}
160
162{
164 rBind.Invalidate(SID_COPY);
165 rBind.Invalidate(SID_CUT);
166 rBind.Invalidate(SID_DELETE);
167}
168
170{
171 return rCmdBox.GetView();
172}
173
175{
176 SmViewShell *pView = rCmdBox.GetView();
177 return pView ? pView->GetDoc() : nullptr;
178}
179
181{
182 return mxTextControl ? mxTextControl->GetEditView() : nullptr;
183}
184
186{
187 if (SmDocShell *pDoc = GetDoc())
188 return &pDoc->GetEditEngine();
189 return nullptr;
190}
191
193{
194 WeldEditView::StyleUpdated();
195 EditEngine *pEditEngine = GetEditEngine();
197
198 if (pEditEngine && pDoc)
199 {
203 const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
204
206 pEditEngine->SetBackgroundColor(rStyleSettings.GetFieldColor());
207 pEditEngine->SetDefTab(sal_uInt16(GetTextWidth("XXXX")));
208
209 // forces new settings to be used
210 // unfortunately this resets the whole edit engine
211 // thus we need to save at least the text
212 OUString aTxt( pEditEngine->GetText() );
213 pEditEngine->Clear(); //incorrect font size
214 pEditEngine->SetText( aTxt );
215
216 Resize();
217 }
218
219 // Apply zoom to smeditwindow text
220 static_cast<SmEditEngine*>(GetEditEngine())->executeZoom(GetEditView());
221}
222
223IMPL_LINK_NOARG(SmEditTextWindow, ModifyTimerHdl, Timer *, void)
224{
225 UpdateStatus(false);
226 aModifyIdle.Stop();
227}
228
229IMPL_LINK_NOARG(SmEditTextWindow, CursorMoveTimerHdl, Timer *, void)
230 // every once in a while check cursor position (selection) of edit
231 // window and if it has changed (try to) set the formula-cursor
232 // according to that.
233{
235 return;
236
238
239 if (aNewSelection != aOldSelection)
240 {
241 if (SmViewShell *pViewSh = mrEditWindow.GetView())
242 {
243 // get row and column to look for
244 sal_Int32 nRow;
245 sal_uInt16 nCol;
247 pViewSh->GetGraphicWidget().SetCursorPos(static_cast<sal_uInt16>(nRow), nCol);
248 aOldSelection = aNewSelection;
249 }
250 }
251 aCursorMoveIdle.Stop();
252}
253
255{
256 bool bRet = WeldEditView::MouseButtonUp(rEvt);
258 CursorMoveTimerHdl(&aCursorMoveIdle);
260 return bRet;
261}
262
264{
265 // no zooming in Command window
266 const CommandWheelData* pWData = rCEvt.GetWheelData();
267 if (pWData && CommandWheelMode::ZOOM == pWData->GetMode())
268 return true;
269
270 //pass alt press/release to parent impl
271 if (rCEvt.GetCommand() == CommandEventId::ModKeyChange)
272 return false;
273
274 if (rCEvt.GetCommand() == CommandEventId::ContextMenu)
275 {
276 ReleaseMouse();
278 rCmdBox.ShowContextMenu(rCmdBox.WidgetToWindowPos(*GetDrawingArea(), rCEvt.GetMousePosPixel()));
279 GrabFocus();
280 return true;
281 }
282
283 bool bConsumed = WeldEditView::Command(rCEvt);
284 if (bConsumed)
286 return bConsumed;
287}
288
290{
291 if (rKEvt.GetKeyCode().GetCode() == KEY_F1)
292 {
294 return true;
295 }
296
297 if (rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE)
298 {
299 bool bCallBase = true;
300 SfxViewShell* pViewShell = mrEditWindow.GetView();
301 if ( dynamic_cast<const SmViewShell *>(pViewShell) )
302 {
303 // Terminate possible InPlace mode
304 bCallBase = !pViewShell->Escape();
305 }
306 return !bCallBase;
307 }
308
310
311 bool autoClose = false;
312 EditView* pEditView = GetEditView();
313 ESelection aSelection = pEditView->GetSelection();
314 // as we don't support RTL in Math, we need to swap values from selection when they were done
315 // in RTL form
316 aSelection.Adjust();
317 OUString selected = pEditView->GetEditEngine()->GetText(aSelection);
318
319 // Check is auto close brackets/braces is disabled
320 SmModule *pMod = SM_MOD();
321 if (pMod && !pMod->GetConfig()->IsAutoCloseBrackets())
322 autoClose = false;
323 else if (o3tl::trim(selected) == u"<?>")
324 autoClose = true;
325 else if (selected.isEmpty() && !aSelection.HasRange())
326 {
327 selected = pEditView->GetEditEngine()->GetText(aSelection.nEndPara);
328 if (!selected.isEmpty())
329 {
330 sal_Int32 index = selected.indexOf("\n", aSelection.nEndPos);
331 if (index != -1)
332 {
333 selected = selected.copy(index, sal_Int32(aSelection.nEndPos-index));
334 if (o3tl::trim(selected).empty())
335 autoClose = true;
336 }
337 else
338 {
339 sal_Int32 length = selected.getLength();
340 if (aSelection.nEndPos == length)
341 autoClose = true;
342 else
343 {
344 selected = selected.copy(aSelection.nEndPos);
345 if (o3tl::trim(selected).empty())
346 autoClose = true;
347 }
348 }
349 }
350 else
351 autoClose = true;
352 }
353
354 bool bConsumed = WeldEditView::KeyInput(rKEvt);
355 if (!bConsumed)
356 {
358 if (pView)
359 bConsumed = pView->KeyInput(rKEvt);
360 if (pView && !bConsumed)
361 {
362 // F1 (help) leads to the destruction of this
363 Flush();
364 if ( aModifyIdle.IsActive() )
366 }
367 else
368 {
369 // SFX has maybe called a slot of the view and thus (because of a hack in SFX)
370 // set the focus to the view
371 SmViewShell* pVShell = mrEditWindow.GetView();
372 if ( pVShell && pVShell->GetGraphicWidget().HasFocus() )
373 {
374 GrabFocus();
375 }
376 }
377 }
378 else
379 {
381 }
382
383 // get the current char of the key event
384 sal_Unicode cCharCode = rKEvt.GetCharCode();
385 OUString sClose;
386
387 if (cCharCode == '{')
388 sClose = " }";
389 else if (cCharCode == '[')
390 sClose = " ]";
391 else if (cCharCode == '(')
392 sClose = " )";
393
394 // auto close the current character only when needed
395 if (!sClose.isEmpty() && autoClose)
396 {
397 pEditView->InsertText(sClose);
398 // position it at center of brackets
399 aSelection.nStartPos += 2;
400 aSelection.nEndPos = aSelection.nStartPos;
401 pEditView->SetSelection(aSelection);
402 }
403
405 return bConsumed;
406}
407
409{
410 // have doc-shell modified only for formula input/change and not
411 // cursor travelling and such things...
412 SmDocShell *pDocShell = mrEditWindow.GetDoc();
413 EditEngine *pEditEngine = GetEditEngine();
414 if (pDocShell && pEditEngine && pEditEngine->IsModified())
415 pDocShell->SetModified(true);
417}
418
420{
421 assert(!mxTextControl);
422
423 EditEngine *pEditEngine = GetEditEngine();
426 if (!pEditEngine)
427 return;
428
429 mxTextControl.reset(new SmEditTextWindow(*this));
430 mxTextControlWin.reset(new weld::CustomWeld(rBuilder, "editview", *mxTextControl));
431
433}
434
436{
437 Resize();
438}
439
440IMPL_LINK(SmEditWindow, ScrollHdl, weld::ScrolledWindow&, rScrolledWindow, void)
441{
442 if (EditView* pEditView = GetEditView())
443 {
444 pEditView->SetVisArea(tools::Rectangle(
445 Point(0,
446 rScrolledWindow.vadjustment_get_value()),
447 pEditView->GetVisArea().GetSize()));
448 pEditView->Invalidate();
449 }
450}
451
453{
454 tools::Rectangle aRect(Point(), rCmdBox.GetOutputSizePixel());
455
457 {
458 const auto nScrollSize = mxScrolledWindow->get_scroll_thickness();
459 const auto nMargin = nScrollSize + 2;
460 aRect.AdjustRight(-nMargin);
461 aRect.AdjustBottom(-nMargin);
462 }
463
464 return aRect;
465}
466
468{
469 EditEngine *pEditEngine = GetEditEngine();
470 if (!pEditEngine)
471 return;
472 if (!mxScrolledWindow)
473 return;
474 EditView* pEditView = GetEditView();
475 if (!pEditView)
476 return;
477
478 int nVUpper = pEditEngine->GetTextHeight();
479 int nVCurrentDocPos = pEditView->GetVisArea().Top();
480 const Size aOut(pEditView->GetOutputArea().GetSize());
481 int nVStepIncrement = aOut.Height() * 2 / 10;
482 int nVPageIncrement = aOut.Height() * 8 / 10;
483 int nVPageSize = aOut.Height();
484
485 /* limit the page size to below nUpper because gtk's gtk_scrolled_window_start_deceleration has
486 effectively...
487
488 lower = gtk_adjustment_get_lower
489 upper = gtk_adjustment_get_upper - gtk_adjustment_get_page_size
490
491 and requires that upper > lower or the deceleration animation never ends
492 */
493 nVPageSize = std::min(nVPageSize, nVUpper);
494
495 mxScrolledWindow->vadjustment_configure(nVCurrentDocPos, 0, nVUpper,
496 nVStepIncrement, nVPageIncrement, nVPageSize);
497}
498
499OUString SmEditWindow::GetText() const
500{
501 OUString aText;
502 EditEngine *pEditEngine = const_cast< SmEditWindow* >(this)->GetEditEngine();
503 OSL_ENSURE( pEditEngine, "EditEngine missing" );
504 if (pEditEngine)
505 aText = pEditEngine->GetText();
506 return aText;
507}
508
509void SmEditWindow::SetText(const OUString& rText)
510{
511 if (!mxTextControl)
512 return;
513 mxTextControl->SetText(rText);
514}
515
517{
518 if (!mxTextControl)
519 return;
520 mxTextControl->Flush();
521}
522
524{
525 if (!mxTextControl)
526 return;
527 mxTextControl->GrabFocus();
528}
529
530void SmEditTextWindow::SetText(const OUString& rText)
531{
532 EditEngine *pEditEngine = GetEditEngine();
533 OSL_ENSURE( pEditEngine, "EditEngine missing" );
534 if (!pEditEngine || pEditEngine->IsModified())
535 return;
536
537 EditView* pEditView = GetEditView();
538 ESelection eSelection = pEditView->GetSelection();
539
540 pEditEngine->SetText(rText);
541 pEditEngine->ClearModifyFlag();
542
543 // Restarting the timer here, prevents calling the handlers for other (currently inactive)
544 // math tasks
546
547 // Apply zoom to smeditwindow text
548 static_cast<SmEditEngine*>(pEditView->GetEditEngine())->executeZoom(pEditView);
549 pEditView->SetSelection(eSelection);
550}
551
553{
555
556 EditEngine *pEditEngine = GetEditEngine();
557 if (pEditEngine)
558 pEditEngine->SetStatusEventHdl(LINK(this, SmEditTextWindow, EditStatusHdl));
559
560 //Let SmViewShell know we got focus
563}
564
566{
567 EditEngine *pEditEngine = GetEditEngine();
568 if (pEditEngine)
570
572}
573
575{
576 EditEngine *pEditEngine = const_cast<SmEditWindow *>(this)->GetEditEngine();
577 if (!pEditEngine)
578 return false;
579 EditView* pEditView = GetEditView();
580 if (!pEditView)
581 return false;
582 bool bRes = false;
583 ESelection eSelection( pEditView->GetSelection() );
584 sal_Int32 nParaCnt = pEditEngine->GetParagraphCount();
585 if (!(nParaCnt - 1))
586 {
587 sal_Int32 nTextLen = pEditEngine->GetText().getLength();
588 bRes = !eSelection.nStartPos && (eSelection.nEndPos == nTextLen - 1);
589 }
590 else
591 {
592 bRes = !eSelection.nStartPara && (eSelection.nEndPara == nParaCnt - 1);
593 }
594 return bRes;
595}
596
598{
599 if (EditView* pEditView = GetEditView())
600 {
601 // ALL as last two parameters refers to the end of the text
602 pEditView->SetSelection( ESelection( 0, 0, EE_PARA_ALL, EE_TEXTPOS_ALL ) );
603 }
604}
605
607{
608 if (EditView* pEditView = GetEditView())
609 {
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);
612
613 pEditView->SetSelection(ESelection(nRow, nCol - 1, nRow, nCol));
614 GrabFocus();
615 }
616}
617
619{
620 if (!mxTextControl)
621 return;
622 mxTextControl->SelNextMark();
623}
624
625// Makes selection to next <?> symbol
627{
628 EditEngine *pEditEngine = GetEditEngine();
629 if (!pEditEngine)
630 return;
631 EditView* pEditView = GetEditView();
632 if (!pEditView)
633 return;
634
635 ESelection eSelection = pEditView->GetSelection();
636 sal_Int32 nPos = eSelection.nEndPos;
637 sal_Int32 nCounts = pEditEngine->GetParagraphCount();
638
639 while (eSelection.nEndPara < nCounts)
640 {
641 OUString aText = pEditEngine->GetText(eSelection.nEndPara);
642 nPos = aText.indexOf("<?>", nPos);
643 if (nPos != -1)
644 {
645 pEditView->SetSelection(ESelection(
646 eSelection.nEndPara, nPos, eSelection.nEndPara, nPos + 3));
647 break;
648 }
649
650 nPos = 0;
651 eSelection.nEndPara++;
652 }
653}
654
656{
657 EditEngine *pEditEngine = GetEditEngine();
658 if (!pEditEngine)
659 return;
660 EditView* pEditView = GetEditView();
661 if (!pEditView)
662 return;
663
664 ESelection eSelection = pEditView->GetSelection();
665 sal_Int32 nPara = eSelection.nStartPara;
666 sal_Int32 nMax = eSelection.nStartPos;
667 OUString aText(pEditEngine->GetText(nPara));
668 static constexpr OUStringLiteral aMark(u"<?>");
669 sal_Int32 nPos;
670
671 while ( (nPos = aText.lastIndexOf(aMark, nMax)) < 0 )
672 {
673 if (--nPara < 0)
674 return;
675 aText = pEditEngine->GetText(nPara);
676 nMax = aText.getLength();
677 }
678 pEditView->SetSelection(ESelection(nPara, nPos, nPara, nPos + 3));
679}
680
681// returns true iff 'rText' contains a mark
682static bool HasMark(std::u16string_view rText)
683{
684 return rText.find(u"<?>") != std::u16string_view::npos;
685}
686
688{
689 if (mxTextControl)
690 return mxTextControl->GetSelection();
691 return ESelection();
692}
693
695{
696 // pointer may be 0 when reloading a document and the old view
697 // was already destroyed
698 if (EditView* pEditView = GetEditView())
699 return pEditView->GetSelection();
700 return ESelection();
701}
702
704{
705 if (EditView* pEditView = GetEditView())
706 pEditView->SetSelection(rSel);
708}
709
711{
712 EditEngine *pEditEngine = const_cast<SmEditWindow *>(this)->GetEditEngine();
713 bool bEmpty = ( pEditEngine && pEditEngine->GetTextLen() == 0 );
714 return bEmpty;
715}
716
718{
719 EditView* pEditView = GetEditView();
720 return pEditView && pEditView->HasSelection();
721}
722
723void SmEditTextWindow::UpdateStatus(bool bSetDocModified)
724{
725 SmModule *pMod = SM_MOD();
726 if (pMod && pMod->GetConfig()->IsAutoRedraw())
727 Flush();
728
729 if (SmDocShell *pModifyDoc = bSetDocModified ? mrEditWindow.GetDoc() : nullptr)
730 pModifyDoc->SetModified();
731
732 static_cast<SmEditEngine*>(GetEditEngine())->executeZoom(GetEditView());
733}
734
736{
737 mxTextControl->UpdateStatus(/*bSetDocModified*/false);
738}
739
741{
742 if (mxTextControl)
743 {
744 mxTextControl->Cut();
745 mxTextControl->UpdateStatus(true);
746 }
747}
748
750{
751 if (mxTextControl)
752 mxTextControl->Copy();
753}
754
756{
757 if (mxTextControl)
758 {
759 mxTextControl->Paste();
760 mxTextControl->UpdateStatus(true);
761 }
762}
763
765{
766 if (mxTextControl)
767 {
768 mxTextControl->Delete();
769 mxTextControl->UpdateStatus(true);
770 }
771}
772
773void SmEditWindow::InsertText(const OUString& rText)
774{
775 if (!mxTextControl)
776 return;
777 mxTextControl->InsertText(rText);
778}
779
780void SmEditTextWindow::InsertText(const OUString& rText)
781{
782 EditView* pEditView = GetEditView();
783 if (!pEditView)
784 return;
785
786 // Note: Insertion of a space in front of commands is done here and
787 // in SmEditWindow::InsertCommand.
788 ESelection aSelection = pEditView->GetSelection();
789 OUString aCurrentFormula = pEditView->GetEditEngine()->GetText();
790 sal_Int32 nStartIndex = 0;
791
792 // get the start position (when we get a multi line formula)
793 for (sal_Int32 nParaPos = 0; nParaPos < aSelection.nStartPara; nParaPos++)
794 nStartIndex = aCurrentFormula.indexOf("\n", nStartIndex) + 1;
795
796 nStartIndex += aSelection.nStartPos;
797
798 // TODO: unify this function with the InsertCommand: The do the same thing for different
799 // callers
800 OUString string(rText);
801
802 OUString selected(pEditView->GetSelected());
803 // if we have text selected, use it in the first placeholder
804 if (!selected.isEmpty())
805 string = string.replaceFirst("<?>", selected);
806
807 // put a space before a new command if not in the beginning of a line
808 if (aSelection.nStartPos > 0 && aCurrentFormula[nStartIndex - 1] != ' ')
809 string = " " + string;
810
811 pEditView->InsertText(string);
812
813 // Remember start of the selection and move the cursor there afterwards.
814 aSelection.nEndPara = aSelection.nStartPara;
815 if (HasMark(string))
816 {
817 aSelection.nEndPos = aSelection.nStartPos;
818 pEditView->SetSelection(aSelection);
819 SelNextMark();
820 }
821 else
822 { // set selection after inserted text
823 aSelection.nEndPos = aSelection.nStartPos + string.getLength();
824 aSelection.nStartPos = aSelection.nEndPos;
825 pEditView->SetSelection(aSelection);
826 }
827
830
831 GrabFocus();
832}
833
835{
836 EditEngine *pEditEngine = GetEditEngine();
837 if (pEditEngine && pEditEngine->IsModified())
838 {
839 pEditEngine->ClearModifyFlag();
840 if (SmViewShell *pViewSh = mrEditWindow.GetView())
841 {
842 SfxStringItem aTextToFlush(SID_TEXT, GetText());
843 pViewSh->GetViewFrame().GetDispatcher()->ExecuteList(
844 SID_TEXT, SfxCallMode::RECORD,
845 { &aTextToFlush });
846 }
847 }
849 {
851 CursorMoveTimerHdl(&aCursorMoveIdle);
852 }
853}
854
856{
857 if (EditView* pEditView = GetEditView())
858 {
859 if (EditEngine* pEditEngine = pEditView->GetEditEngine())
860 {
861 pEditEngine->SetStatusEventHdl( Link<EditStatus&,void>() );
862 pEditEngine->RemoveView(pEditView);
863 }
864 mxTextControlWin.reset();
865 mxTextControl.reset();
866 }
867}
868
869/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
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 Clear()
void SetText(const OUString &rStr)
sal_Int32 GetParagraphCount() const
sal_uInt32 GetTextHeight() const
sal_Int32 GetTextLen() const
void ClearModifyFlag()
bool IsModified() 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
void SetBackground()
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
SmViewShell * GetView()
Definition: view.cxx:1002
Point WidgetToWindowPos(const weld::Widget &rWidget, const Point &rPos)
Definition: view.cxx:959
void ShowContextMenu(const Point &rPos)
Definition: view.cxx:969
EditEngine & GetEditEngine()
Definition: document.cxx:287
virtual void SetModified(bool bModified=true) override
Definition: document.cxx:1210
void UpdateEditEngineDefaultFonts()
Definition: document.cxx:282
void Flush()
Definition: edit.cxx:834
void UserPossiblyChangedText()
Definition: edit.cxx:408
void SetText(const OUString &rText)
Definition: edit.cxx:530
virtual bool MouseButtonUp(const MouseEvent &rEvt) override
Definition: edit.cxx:254
virtual void StyleUpdated() override
Definition: edit.cxx:192
virtual EditEngine * GetEditEngine() const override
Definition: edit.cxx:87
Idle aModifyIdle
Definition: edit.hxx:44
virtual bool Command(const CommandEvent &rCEvt) override
Definition: edit.cxx:263
SmEditTextWindow(SmEditWindow &rEditWindow)
Definition: edit.cxx:64
virtual void LoseFocus() override
Definition: edit.cxx:565
SmEditWindow & mrEditWindow
Definition: edit.hxx:42
virtual void EditViewScrollStateChange() override
Definition: edit.cxx:94
void InsertText(const OUString &rText)
Definition: edit.cxx:780
virtual bool KeyInput(const KeyEvent &rKeyEvt) override
Definition: edit.cxx:289
virtual void GetFocus() override
Definition: edit.cxx:552
Idle aCursorMoveIdle
Definition: edit.hxx:45
ESelection GetSelection() const
Definition: edit.cxx:694
virtual void SetDrawingArea(weld::DrawingArea *pDrawingArea) override
Definition: edit.cxx:99
void SelNextMark()
Definition: edit.cxx:626
void UpdateStatus(bool bSetDocModified)
Definition: edit.cxx:723
virtual ~SmEditTextWindow() override
Definition: edit.cxx:81
void StartCursorMove()
Definition: edit.cxx:155
std::unique_ptr< weld::ScrolledWindow > mxScrolledWindow
Definition: edit.hxx:83
void SetText(const OUString &rText)
Definition: edit.cxx:509
void InsertText(const OUString &rText)
Definition: edit.cxx:773
SmViewShell * GetView()
Definition: edit.cxx:169
void Flush()
Definition: edit.cxx:516
weld::Window * GetFrameWeld() const
Definition: edit.cxx:150
void GrabFocus()
Definition: edit.cxx:523
SmCmdBoxWindow & rCmdBox
Definition: edit.hxx:82
tools::Rectangle AdjustScrollBars()
Definition: edit.cxx:452
void CreateEditView(weld::Builder &rBuilder)
Definition: edit.cxx:419
EditView * GetEditView() const
Definition: edit.cxx:180
EditEngine * GetEditEngine()
Definition: edit.cxx:185
SmEditWindow(SmCmdBoxWindow &rMyCmdBoxWin, weld::Builder &rBuilder)
Definition: edit.cxx:135
~SmEditWindow() COVERITY_NOEXCEPT_FALSE
Definition: edit.cxx:144
void Paste()
Definition: edit.cxx:755
void Delete()
Definition: edit.cxx:764
SmCmdBoxWindow & GetCmdBox() const
Definition: edit.hxx:101
void DeleteEditView()
Definition: edit.cxx:855
void Cut()
Definition: edit.cxx:740
void MarkError(const Point &rPos)
Definition: edit.cxx:606
bool IsSelected() const
Definition: edit.cxx:717
bool IsAllSelected() const
Definition: edit.cxx:574
ESelection GetSelection() const
Definition: edit.cxx:687
bool IsEmpty() const
Definition: edit.cxx:710
SmDocShell * GetDoc()
Definition: edit.cxx:174
void SelPrevMark()
Definition: edit.cxx:655
void SelectAll()
Definition: edit.cxx:597
std::unique_ptr< SmEditTextWindow > mxTextControl
Definition: edit.hxx:84
void UpdateStatus()
Definition: edit.cxx:735
OUString GetText() const
Definition: edit.cxx:499
std::unique_ptr< weld::CustomWeld > mxTextControlWin
Definition: edit.hxx:85
void SetSelection(const ESelection &rSel)
Definition: edit.cxx:703
void SetScrollBarRanges()
Definition: edit.cxx:467
void InvalidateSlots()
Definition: edit.cxx:161
void Copy()
Definition: edit.cxx:749
void SelNextMark()
Definition: edit.cxx:618
bool IsAutoCloseBrackets() const
Definition: cfgitem.cxx:1237
bool IsAutoRedraw() const
Definition: cfgitem.cxx:1319
SmMathConfig * GetConfig()
Definition: smmod.cxx:162
void SetInsertIntoEditWindow(bool bEditWindowHadFocusLast)
Set bInsertIntoEditWindow so we know where to insert.
Definition: view.hxx:346
static bool IsInlineEditEnabled()
Definition: view.cxx:2333
SmDocShell * GetDoc() const
Definition: view.hxx:297
SmGraphicWidget & GetGraphicWidget()
Definition: view.hxx:304
void StartMainHelp()
Definition: view.cxx:2339
const Color & GetWindowColor() const
const Color & GetFieldColor() const
bool IsActive() const
void SetPriority(TaskPriority ePriority)
void Stop()
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)
OUString GetText() const
virtual EditView * GetEditView() const
void InitAccessible()
virtual bool MouseButtonUp(const MouseEvent &rMEvt) override
virtual void GetFocus() override
virtual bool KeyInput(const KeyEvent &rKEvt) override
virtual void LoseFocus() override
constexpr tools::Long Top() const
constexpr Size GetSize() const
tools::Long AdjustRight(tools::Long nHorzMoveDelta)
tools::Long AdjustBottom(tools::Long nVertMoveDelta)
sal_uInt16 GetCode() const
virtual void SetDrawingArea(weld::DrawingArea *pDrawingArea)
virtual OutputDevice & get_ref_device()=0
virtual void set_cursor(PointerStyle ePointerStyle)=0
virtual void SetHelpId(const OUString &) override
float u
IMPL_LINK_NOARG(SmEditTextWindow, ModifyTimerHdl, Timer *, void)
Definition: edit.cxx:223
static bool HasMark(std::u16string_view rText)
Definition: edit.cxx:682
void SmGetLeftSelectionPart(const ESelection &rSel, sal_Int32 &nPara, sal_uInt16 &nPos)
Definition: edit.cxx:48
ESelection aNewSelection(GetSelection())
IMPL_LINK(SmEditWindow, ScrollHdl, weld::ScrolledWindow &, rScrolledWindow, void)
Definition: edit.cxx:440
#define EE_PARA_ALL
#define EE_TEXTPOS_ALL
constexpr OUStringLiteral HID_SMA_COMMAND_WIN_EDIT
Definition: helpids.h:26
constexpr sal_uInt16 KEY_ESCAPE
constexpr sal_uInt16 KEY_F1
sal_uInt16 nPos
index
std::basic_string_view< charT, traits > trim(std::basic_string_view< charT, traits > str)
#define SM_MOD()
Definition: smmod.hxx:98
bool HasRange() const
sal_Int32 nStartPara
sal_Int32 nEndPos
sal_Int32 nStartPos
void Adjust()
sal_Int32 nEndPara
sal_uInt16 sal_Unicode
void GetSelection(struct ESelection &rSel, SvxTextForwarder const *pForwarder) noexcept