LibreOffice Module starmath (master) 1
view.hxx
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#pragma once
21
22#include <sal/config.h>
23#include <rtl/ref.hxx>
24#include <sfx2/docinsert.hxx>
25#include <sfx2/dockwin.hxx>
26#include <sfx2/viewsh.hxx>
27#include <sfx2/ctrlitem.hxx>
28#include <sfx2/shell.hxx>
29#include <sfx2/viewfrm.hxx>
31#include <vcl/timer.hxx>
32#include "document.hxx"
33#include "edit.hxx"
34
35class SmViewShell;
38class SmGraphicWidget;
39
41{
42private:
43 Point aPixOffset; // offset to virtual window (pixel)
44 Size aTotPixSz; // total size of virtual window (pixel)
45 tools::Long nLinePixH; // size of a line/column (pixel)
47 sal_uInt16 nZoom;
48
49 std::unique_ptr<weld::ScrolledWindow> mxScrolledWindow;
50 std::unique_ptr<SmGraphicWidget> mxGraphic;
51 std::unique_ptr<weld::CustomWeld> mxGraphicWin;
52
53 DECL_LINK(ScrollHdl, weld::ScrolledWindow&, void);
54
55public:
56 explicit SmGraphicWindow(SmViewShell& rShell);
57 virtual void dispose() override;
58 virtual ~SmGraphicWindow() override;
59
60 virtual bool IsStarMath() const override { return true; }
61
62 void SetTotalSize(const Size& rNewSize);
63 Size GetTotalSize() const;
64
65 void SetZoom(sal_uInt16 Factor);
66 sal_uInt16 GetZoom() const { return nZoom; }
67
68 void ZoomToFitInWindow();
69
70 virtual void Resize() override;
71 void ShowContextMenu(const CommandEvent& rCEvt);
72
73 void SetGraphicMapMode(const MapMode& rNewMapMode);
75
77 {
78 return *mxGraphic;
79 }
80
82 {
83 return *mxGraphic;
84 }
85};
86
88{
89public:
90 bool IsCursorVisible() const
91 {
92 return bIsCursorVisible;
93 }
94 void ShowCursor(bool bShow);
95 bool IsLineVisible() const
96 {
97 return bIsLineVisible;
98 }
99 void ShowLine(bool bShow);
100 const SmNode * SetCursorPos(sal_uInt16 nRow, sal_uInt16 nCol);
101
102 explicit SmGraphicWidget(SmViewShell& rShell, SmGraphicWindow& rGraphicWindow);
103 virtual ~SmGraphicWidget() override;
104
105 // CustomWidgetController
106 virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
107 virtual bool MouseButtonDown(const MouseEvent &rMEvt) override;
108 virtual bool MouseMove(const MouseEvent &rMEvt) override;
109 virtual void GetFocus() override;
110 virtual void LoseFocus() override;
111 virtual bool KeyInput(const KeyEvent& rKEvt) override;
112
113 void SetTotalSize();
114
118
120 {
121 return aFormulaDrawPos;
122 }
123
124 // for Accessibility
125 virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
126
128 {
129 return mxAccessible.get();
130 }
131
133 {
134 assert(GetDrawingArea());
135 return GetDrawingArea()->get_ref_device();
136 }
137
138private:
139 void SetIsCursorVisible(bool bVis);
140 void SetCursor(const SmNode *pNode);
141 void SetCursor(const tools::Rectangle &rRect);
142
143 virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&) override;
144 virtual bool Command(const CommandEvent& rCEvt) override;
145
146 void RepaintViewShellDoc();
147 DECL_LINK(CaretBlinkTimerHdl, Timer *, void);
148 void CaretBlinkInit();
149 void CaretBlinkStart();
150 void CaretBlinkStop();
151
153
155 // old style editing pieces
162 double mfLastZoomScale = 0;
164};
165
167{
169public:
171 virtual void StateChangedAtToolBoxControl(sal_uInt16 nSID,
172 SfxItemState eState,
173 const SfxPoolItem* pState) override;
174};
175
177{
179
180public:
181 SmEditController(SmEditWindow &, sal_uInt16, SfxBindings & );
182
183 virtual void StateChangedAtToolBoxControl(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState) override;
184};
185
187{
188 std::unique_ptr<SmEditWindow, o3tl::default_delete<SmEditWindow>> m_xEdit;
191
193
194 DECL_LINK(InitialFocusTimerHdl, Timer *, void);
195
196 virtual Size CalcDockingSize(SfxChildAlignment eAlign) override;
198 SfxChildAlignment eWish) override;
199
200 virtual void ToggleFloatingMode() override;
201
202public:
204 SfxChildWindow *pChildWindow,
205 Window *pParent);
206
207 virtual ~SmCmdBoxWindow () override;
208 virtual void dispose() override;
209
210 // Window
211 virtual void GetFocus() override;
212 virtual void StateChanged( StateChangedType nStateChange ) override;
213 virtual void Command(const CommandEvent& rCEvt) override;
214
215 Point WidgetToWindowPos(const weld::Widget& rWidget, const Point& rPos);
216
217 void ShowContextMenu(const Point& rPos);
218
219 void AdjustPosition();
220
222 {
223 return *m_xEdit;
224 }
226};
227
228class SmCmdBoxWrapper final : public SfxChildWindow
229{
231
232 SmCmdBoxWrapper(vcl::Window* pParentWindow, sal_uInt16 nId, SfxBindings* pBindings, SfxChildWinInfo* pInfo);
233
234public:
235
237 {
238 return static_cast<SmCmdBoxWindow *>(GetWindow())->GetEditWindow();
239 }
240};
241
242namespace sfx2 { class FileDialogHelper; }
243
244class SmViewShell final : public SfxViewShell
245{
246 std::unique_ptr<sfx2::DocumentInserter> mpDocInserter;
247 std::unique_ptr<SfxRequest> mpRequest;
250 OUString maStatusText;
257
258 DECL_LINK( DialogClosedHdl, sfx2::FileDialogHelper*, void );
259 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
260
261 static Size GetTextLineSize(OutputDevice const & rDevice,
262 const OUString& rLine);
263 static Size GetTextSize(OutputDevice const & rDevice,
264 std::u16string_view rText,
265 tools::Long MaxWidth);
266 static void DrawTextLine(OutputDevice& rDevice,
267 const Point& rPosition,
268 const OUString& rLine);
269 static void DrawText(OutputDevice& rDevice,
270 const Point& rPosition,
271 std::u16string_view rText,
272 sal_uInt16 MaxWidth);
273
274 virtual SfxPrinter *GetPrinter(bool bCreate = false) override;
275 virtual sal_uInt16 SetPrinter(SfxPrinter *pNewPrinter,
276 SfxPrinterChangeFlags nDiffFlags = SFX_PRINTER_ALL) override;
277
278 void Insert( SfxMedium& rMedium );
279 void InsertFrom(SfxMedium &rMedium);
280
281 virtual bool HasPrintOptionsPage() const override;
282 virtual std::unique_ptr<SfxTabPage> CreatePrintOptionsPage(weld::Container* pPage, weld::DialogController* pController,
283 const SfxItemSet &rOptions) override;
284 virtual void Deactivate(bool IsMDIActivate) override;
285 virtual void Activate(bool IsMDIActivate) override;
286 virtual void InnerResizePixel(const Point &rOfs, const Size &rSize, bool inplaceEditModeChange) override;
287 virtual void OuterResizePixel(const Point &rOfs, const Size &rSize) override;
288 virtual void QueryObjAreaPixel( tools::Rectangle& rRect ) const override;
289 virtual void SetZoomFactor( const Fraction &rX, const Fraction &rY ) override;
290 virtual std::optional<OString> getLOKPayload(int nType, int nViewId) const override;
291
292public:
293
295 virtual ~SmViewShell() override;
296
298 {
299 return static_cast<SmDocShell *>( GetViewFrame().GetObjectShell() );
300 }
301
303
305 {
306 return mxGraphicWindow->GetGraphicWidget();
307 }
309 {
310 return mxGraphicWindow->GetGraphicWidget();
311 }
312
314 {
315 return *mxGraphicWindow;
316 }
317
318 void SetStatusText(const OUString& rText);
319
320 void ShowError( const SmErrorDesc *pErrorDesc );
321 void NextError();
322 void PrevError();
323
324 SFX_DECL_INTERFACE(SFX_INTERFACE_SMA_START+SfxInterfaceId(2))
326
327 void SendCaretToLOK() const;
328
329private:
331 static void InitInterface_Impl();
332
333public:
334 void Execute( SfxRequest& rReq );
335 void GetState(SfxItemSet &);
336
337 void Impl_Print( OutputDevice &rOutDev, const SmPrintUIOptions &rPrintUIOptions,
338 tools::Rectangle aOutRect );
339
346 void SetInsertIntoEditWindow(bool bEditWindowHadFocusLast){
347 mbInsertIntoEditWindow = bEditWindowHadFocusLast;
348 }
349 static bool IsInlineEditEnabled();
350
351 // Opens the main help page for the Math module
352 void StartMainHelp();
353
354private:
355 void ZoomByItemSet(const SfxItemSet *pSet);
356};
357
358/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
SfxChildAlignment
vcl::Window * GetWindow() const
SfxBindings * pBindings
virtual SfxObjectShell * GetObjectShell() override
SfxViewFrame & GetViewFrame() const
SfxViewFrame & rFrame
SmViewShell * GetView()
Definition: view.cxx:1002
virtual void StateChanged(StateChangedType nStateChange) override
Definition: view.cxx:1038
virtual void dispose() override
Definition: view.cxx:993
virtual ~SmCmdBoxWindow() override
Definition: view.cxx:988
SmEditController aController
Definition: view.hxx:189
std::unique_ptr< SmEditWindow, o3tl::default_delete< SmEditWindow > > m_xEdit
Definition: view.hxx:188
Point WidgetToWindowPos(const weld::Widget &rWidget, const Point &rPos)
Definition: view.cxx:959
virtual void Command(const CommandEvent &rCEvt) override
Definition: view.cxx:977
void ShowContextMenu(const Point &rPos)
Definition: view.cxx:969
SmEditWindow & GetEditWindow()
Definition: view.hxx:221
virtual Size CalcDockingSize(SfxChildAlignment eAlign) override
Definition: view.cxx:1009
SmCmdBoxWindow(SfxBindings *pBindings, SfxChildWindow *pChildWindow, Window *pParent)
Definition: view.cxx:935
bool bExiting
Definition: view.hxx:190
virtual void ToggleFloatingMode() override
Definition: view.cxx:1109
virtual void GetFocus() override
Definition: view.cxx:1117
DECL_LINK(InitialFocusTimerHdl, Timer *, void)
virtual SfxChildAlignment CheckAlignment(SfxChildAlignment eActual, SfxChildAlignment eWish) override
Definition: view.cxx:1022
void AdjustPosition()
Definition: view.cxx:1096
Timer aInitialFocusTimer
Definition: view.hxx:192
SmCmdBoxWrapper(vcl::Window *pParentWindow, sal_uInt16 nId, SfxBindings *pBindings, SfxChildWinInfo *pInfo)
Definition: view.cxx:1125
SmEditWindow & GetEditWindow()
Definition: view.hxx:236
SFX_DECL_CHILDWINDOW_WITHID(SmCmdBoxWrapper)
Formula cursor.
Definition: cursor.hxx:69
SmEditWindow & rEdit
Definition: view.hxx:178
virtual void StateChangedAtToolBoxControl(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem *pState) override
Definition: view.cxx:925
SmEditController(SmEditWindow &, sal_uInt16, SfxBindings &)
Definition: view.cxx:917
SmGraphicController(SmGraphicWidget &, sal_uInt16, SfxBindings &)
Definition: view.cxx:901
SmGraphicWidget & rGraphic
Definition: view.hxx:168
virtual void StateChangedAtToolBoxControl(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem *pState) override
Definition: view.cxx:909
virtual bool Command(const CommandEvent &rCEvt) override
Definition: view.cxx:777
void CaretBlinkInit()
Definition: view.cxx:463
const Point & GetFormulaDrawPos() const
Definition: view.hxx:119
SmGraphicWindow & mrGraphicWindow
Definition: view.hxx:152
virtual void SetDrawingArea(weld::DrawingArea *pDrawingArea) override
Definition: view.cxx:306
virtual void GetFocus() override
Definition: view.cxx:415
void ShowCursor(bool bShow)
Definition: view.cxx:487
SmViewShell & GetView()
Definition: view.hxx:115
virtual bool KeyInput(const KeyEvent &rKEvt) override
Definition: view.cxx:702
DECL_LINK(CaretBlinkTimerHdl, Timer *, void)
SmGraphicWidget(SmViewShell &rShell, SmGraphicWindow &rGraphicWindow)
Definition: view.cxx:297
const SmNode * SetCursorPos(sal_uInt16 nRow, sal_uInt16 nCol)
Definition: view.cxx:551
virtual bool MouseMove(const MouseEvent &rMEvt) override
Definition: view.cxx:399
tools::Rectangle aCursorRect
Definition: view.hxx:156
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override
Definition: view.cxx:891
SmViewShell & mrViewShell
Definition: view.hxx:161
OutputDevice & GetOutputDevice()
Definition: view.hxx:132
SmGraphicAccessible * GetAccessible_Impl()
Definition: view.hxx:127
virtual ~SmGraphicWidget() override
Definition: view.cxx:334
void SetTotalSize()
Definition: view.cxx:609
double mfLastZoomScale
Definition: view.hxx:162
void CaretBlinkStart()
Definition: view.cxx:471
bool bIsCursorVisible
Definition: view.hxx:157
bool bIsLineVisible
Definition: view.hxx:158
void SetIsCursorVisible(bool bVis)
Definition: view.cxx:507
virtual void LoseFocus() override
Definition: view.cxx:429
void SetCursor(const SmNode *pNode)
Definition: view.cxx:518
bool IsCursorVisible() const
Definition: view.hxx:90
SmCursor & GetCursor()
Definition: view.cxx:344
bool IsLineVisible() const
Definition: view.hxx:95
rtl::Reference< SmGraphicAccessible > mxAccessible
Definition: view.hxx:160
void CaretBlinkStop()
Definition: view.cxx:479
Point aFormulaDrawPos
Definition: view.hxx:154
virtual bool MouseButtonDown(const MouseEvent &rMEvt) override
Definition: view.cxx:350
AutoTimer aCaretBlinkTimer
Definition: view.hxx:159
SmDocShell * GetDoc()
Definition: view.cxx:342
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &) override
Definition: view.cxx:576
double mfAccumulatedZoom
Definition: view.hxx:163
void ShowLine(bool bShow)
Definition: view.cxx:499
void RepaintViewShellDoc()
Definition: view.cxx:447
void SetZoom(sal_uInt16 Factor)
Definition: view.cxx:861
Size aTotPixSz
Definition: view.hxx:44
SmGraphicWidget & GetGraphicWidget()
Definition: view.hxx:76
tools::Long nLinePixH
Definition: view.hxx:45
virtual ~SmGraphicWindow() override
Definition: view.cxx:138
tools::Long nColumnPixW
Definition: view.hxx:46
sal_uInt16 GetZoom() const
Definition: view.hxx:66
DECL_LINK(ScrollHdl, weld::ScrolledWindow &, void)
virtual void Resize() override
Definition: view.cxx:143
void ZoomToFitInWindow()
Definition: view.cxx:874
MapMode GetGraphicMapMode() const
Definition: view.cxx:267
void SetTotalSize(const Size &rNewSize)
Definition: view.cxx:275
std::unique_ptr< weld::CustomWeld > mxGraphicWin
Definition: view.hxx:51
std::unique_ptr< weld::ScrolledWindow > mxScrolledWindow
Definition: view.hxx:49
Point aPixOffset
Definition: view.hxx:43
sal_uInt16 nZoom
Definition: view.hxx:47
Size GetTotalSize() const
Definition: view.cxx:281
void SetGraphicMapMode(const MapMode &rNewMapMode)
Definition: view.cxx:258
SmGraphicWindow(SmViewShell &rShell)
Definition: view.cxx:109
void ShowContextMenu(const CommandEvent &rCEvt)
Definition: view.cxx:286
const SmGraphicWidget & GetGraphicWidget() const
Definition: view.hxx:81
std::unique_ptr< SmGraphicWidget > mxGraphic
Definition: view.hxx:50
virtual bool IsStarMath() const override
Definition: view.hxx:60
virtual void dispose() override
Definition: view.cxx:129
Definition: node.hxx:125
virtual void QueryObjAreaPixel(tools::Rectangle &rRect) const override
Definition: view.cxx:1186
void SetInsertIntoEditWindow(bool bEditWindowHadFocusLast)
Set bInsertIntoEditWindow so we know where to insert.
Definition: view.hxx:346
bool mbInsertIntoEditWindow
Used to determine whether insertions using SID_INSERTSPECIAL and SID_INSERTCOMMANDTEXT should be inse...
Definition: view.hxx:256
void ZoomByItemSet(const SfxItemSet *pSet)
Definition: view.cxx:2346
void Execute(SfxRequest &rReq)
Definition: view.cxx:1671
bool mbPasteState
Definition: view.hxx:251
virtual sal_uInt16 SetPrinter(SfxPrinter *pNewPrinter, SfxPrinterChangeFlags nDiffFlags=SFX_PRINTER_ALL) override
Definition: view.cxx:1523
void InsertFrom(SfxMedium &rMedium)
Definition: view.cxx:1637
virtual SfxPrinter * GetPrinter(bool bCreate=false) override
Definition: view.cxx:1515
static bool IsInlineEditEnabled()
Definition: view.cxx:2333
SmEditWindow * GetEditWindow()
Definition: view.cxx:1551
SmGraphicController maGraphicController
Definition: view.hxx:249
VclPtr< SmGraphicWindow > mxGraphicWindow
Definition: view.hxx:248
DECL_LINK(DialogClosedHdl, sfx2::FileDialogHelper *, void)
static void InitInterface_Impl()
SfxInterface initializer.
Definition: view.cxx:1142
virtual void Deactivate(bool IsMDIActivate) override
Definition: view.cxx:2259
void SendCaretToLOK() const
Definition: view.cxx:2432
void Impl_Print(OutputDevice &rOutDev, const SmPrintUIOptions &rPrintUIOptions, tools::Rectangle aOutRect)
Definition: view.cxx:1368
SmGraphicWindow & GetGraphicWindow()
Definition: view.hxx:313
OUString maStatusText
Definition: view.hxx:250
SmDocShell * GetDoc() const
Definition: view.hxx:297
SmViewShell(SfxViewFrame &rFrame, SfxViewShell *pOldSh)
Definition: view.cxx:2235
void SetStatusText(const OUString &rText)
Definition: view.cxx:1565
void ShowError(const SmErrorDesc *pErrorDesc)
Definition: view.cxx:1571
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Definition: view.cxx:2320
void PrevError()
Definition: view.cxx:1592
virtual void SetZoomFactor(const Fraction &rX, const Fraction &rY) override
Definition: view.cxx:1191
std::unique_ptr< sfx2::DocumentInserter > mpDocInserter
Definition: view.hxx:246
void NextError()
Definition: view.cxx:1583
SmGraphicWidget & GetGraphicWidget()
Definition: view.hxx:304
void GetState(SfxItemSet &)
Definition: view.cxx:2076
virtual ~SmViewShell() override
Definition: view.cxx:2249
virtual bool HasPrintOptionsPage() const override
Definition: view.cxx:1540
virtual void InnerResizePixel(const Point &rOfs, const Size &rSize, bool inplaceEditModeChange) override
Definition: view.cxx:1160
static void DrawTextLine(OutputDevice &rDevice, const Point &rPosition, const OUString &rLine)
Definition: view.cxx:1283
std::unique_ptr< SfxRequest > mpRequest
Definition: view.hxx:247
void Insert(SfxMedium &rMedium)
Definition: view.cxx:1601
SFX_DECL_VIEWFACTORY(SmViewShell)
const SmGraphicWidget & GetGraphicWidget() const
Definition: view.hxx:308
static void DrawText(OutputDevice &rDevice, const Point &rPosition, std::u16string_view rText, sal_uInt16 MaxWidth)
Definition: view.cxx:1306
static Size GetTextSize(OutputDevice const &rDevice, std::u16string_view rText, tools::Long MaxWidth)
Definition: view.cxx:1224
virtual std::optional< OString > getLOKPayload(int nType, int nViewId) const override
Definition: view.cxx:2381
static Size GetTextLineSize(OutputDevice const &rDevice, const OUString &rLine)
Definition: view.cxx:1201
virtual std::unique_ptr< SfxTabPage > CreatePrintOptionsPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rOptions) override
Definition: view.cxx:1545
virtual void OuterResizePixel(const Point &rOfs, const Size &rSize) override
Definition: view.cxx:1179
virtual void Activate(bool IsMDIActivate) override
Definition: view.cxx:2267
void StartMainHelp()
Definition: view.cxx:2339
weld::DrawingArea * GetDrawingArea() const
virtual OutputDevice & get_ref_device()=0
long Long
SfxItemState
#define SFX_DECL_INTERFACE(nId)
SfxPrinterChangeFlags
StateChangedType