summaryrefslogtreecommitdiff
path: root/starmath/inc/view.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'starmath/inc/view.hxx')
-rw-r--r--starmath/inc/view.hxx333
1 files changed, 333 insertions, 0 deletions
diff --git a/starmath/inc/view.hxx b/starmath/inc/view.hxx
new file mode 100644
index 000000000000..d716e72f9c07
--- /dev/null
+++ b/starmath/inc/view.hxx
@@ -0,0 +1,333 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef VIEW_HXX
+#define VIEW_HXX
+
+#include <sfx2/dockwin.hxx>
+#include <sfx2/viewsh.hxx>
+#include <svtools/scrwin.hxx>
+#include <sfx2/ctrlitem.hxx>
+#include <sfx2/shell.hxx>
+#include <sfx2/viewfac.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <vcl/timer.hxx>
+#include <svtools/colorcfg.hxx>
+#include "edit.hxx"
+#include "node.hxx"
+
+class Menu;
+class DataChangedEvent;
+class SmClipboardChangeListener;
+class SmDocShell;
+class SmViewShell;
+class SmPrintUIOptions;
+class SmGraphicAccessible;
+
+/**************************************************************************/
+
+class SmGraphicWindow : public ScrollableWindow
+{
+ Point aFormulaDrawPos;
+
+ // old style editing pieces
+ Rectangle aCursorRect;
+ bool bIsCursorVisible;
+ bool bIsLineVisible;
+ AutoTimer aCaretBlinkTimer;
+public:
+ bool IsCursorVisible() const { return bIsCursorVisible; }
+ void ShowCursor(bool bShow);
+ bool IsLineVisible() const { return bIsLineVisible; }
+ void ShowLine(bool bShow);
+ const SmNode * SetCursorPos(sal_uInt16 nRow, sal_uInt16 nCol);
+protected:
+ void SetIsCursorVisible(bool bVis) { bIsCursorVisible = bVis; }
+ using Window::SetCursor;
+ void SetCursor(const SmNode *pNode);
+ void SetCursor(const Rectangle &rRect);
+ bool IsInlineEditEnabled() const;
+
+private:
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::accessibility::XAccessible > xAccessible;
+ SmGraphicAccessible * pAccessible;
+
+ SmViewShell *pViewShell;
+ sal_uInt16 nZoom;
+ short nModifyCount;
+
+protected:
+ void SetFormulaDrawPos(const Point &rPos) { aFormulaDrawPos = rPos; }
+
+ virtual void DataChanged( const DataChangedEvent& );
+ virtual void Paint(const Rectangle&);
+ virtual void KeyInput(const KeyEvent& rKEvt);
+ virtual void Command(const CommandEvent& rCEvt);
+ virtual void StateChanged( StateChangedType eChanged );
+ DECL_LINK(MenuSelectHdl, Menu *);
+
+private:
+ void RepaintViewShellDoc();
+ DECL_LINK(CaretBlinkTimerHdl, AutoTimer *);
+ void CaretBlinkInit();
+ void CaretBlinkStart();
+ void CaretBlinkStop();
+public:
+ SmGraphicWindow(SmViewShell* pShell);
+ ~SmGraphicWindow();
+
+ // Window
+ virtual void MouseButtonDown(const MouseEvent &rMEvt);
+ virtual void GetFocus();
+ virtual void LoseFocus();
+
+ SmViewShell * GetView() { return pViewShell; }
+
+ using Window::SetZoom;
+ void SetZoom(sal_uInt16 Factor);
+ using Window::GetZoom;
+ sal_uInt16 GetZoom() const { return nZoom; }
+
+ const Point & GetFormulaDrawPos() const { return aFormulaDrawPos; }
+
+ void ZoomToFitInWindow();
+ using ScrollableWindow::SetTotalSize;
+ void SetTotalSize();
+
+ void ApplyColorConfigValues( const svtools::ColorConfig &rColorCfg );
+
+ // for Accessibility
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
+
+ using Window::GetAccessible;
+ SmGraphicAccessible * GetAccessible_Impl() { return pAccessible; }
+};
+
+/**************************************************************************/
+
+class SmGraphicController: public SfxControllerItem
+{
+protected:
+ SmGraphicWindow &rGraphic;
+public:
+ SmGraphicController(SmGraphicWindow &, sal_uInt16, SfxBindings & );
+ virtual void StateChanged(sal_uInt16 nSID,
+ SfxItemState eState,
+ const SfxPoolItem* pState);
+};
+
+/**************************************************************************/
+
+class SmEditController: public SfxControllerItem
+{
+protected:
+ SmEditWindow &rEdit;
+
+public:
+ SmEditController(SmEditWindow &, sal_uInt16, SfxBindings & );
+#if OSL_DEBUG_LEVEL > 1
+ virtual ~SmEditController();
+#endif
+
+ virtual void StateChanged(sal_uInt16 nSID,
+ SfxItemState eState,
+ const SfxPoolItem* pState);
+};
+
+/**************************************************************************/
+
+class SmCmdBoxWindow : public SfxDockingWindow
+{
+ SmEditWindow aEdit;
+ SmEditController aController;
+ bool bExiting;
+
+ Timer aInitialFocusTimer;
+
+ DECL_LINK(InitialFocusTimerHdl, Timer *);
+
+protected :
+
+ // Window
+ virtual void GetFocus();
+ virtual void Resize();
+ virtual void Paint(const Rectangle& rRect);
+ virtual void StateChanged( StateChangedType nStateChange );
+
+ virtual Size CalcDockingSize(SfxChildAlignment eAlign);
+ virtual SfxChildAlignment CheckAlignment(SfxChildAlignment eActual,
+ SfxChildAlignment eWish);
+
+ virtual void ToggleFloatingMode();
+
+public:
+ SmCmdBoxWindow(SfxBindings *pBindings,
+ SfxChildWindow *pChildWindow,
+ Window *pParent);
+
+ virtual ~SmCmdBoxWindow ();
+
+ void AdjustPosition();
+
+ SmEditWindow *GetEditWindow() { return (&aEdit); }
+ SmViewShell *GetView();
+};
+
+/**************************************************************************/
+
+class SmCmdBoxWrapper : public SfxChildWindow
+{
+ SFX_DECL_CHILDWINDOW(SmCmdBoxWrapper);
+
+protected:
+ SmCmdBoxWrapper(Window *pParentWindow,
+ sal_uInt16 nId,
+ SfxBindings *pBindings,
+ SfxChildWinInfo *pInfo);
+
+#if OSL_DEBUG_LEVEL > 1
+ virtual ~SmCmdBoxWrapper();
+#endif
+
+public:
+
+ SmEditWindow *GetEditWindow()
+ {
+ return (((SmCmdBoxWindow *)pWindow)->GetEditWindow());
+ }
+
+};
+
+/**************************************************************************/
+
+namespace sfx2 { class FileDialogHelper; }
+struct SmViewShell_Impl;
+
+class SmViewShell: public SfxViewShell
+{
+ // for handling the PasteClipboardState
+ friend class SmClipboardChangeListener;
+
+ SmViewShell_Impl* pImpl;
+
+ SmGraphicWindow aGraphic;
+ SmGraphicController aGraphicController;
+ String StatusText;
+
+ ::com::sun::star::uno:: Reference <
+ ::com::sun::star::lang:: XEventListener > xClipEvtLstnr;
+ SmClipboardChangeListener* pClipEvtLstnr;
+ bool bPasteState;
+
+ DECL_LINK( DialogClosedHdl, sfx2::FileDialogHelper* );
+ virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
+
+ /** Used to determine whether insertions using SID_INSERTSYMBOL and SID_INSERTCOMMAND
+ * should be inserted into SmEditWindow or directly into the SmDocShell as done if the
+ * visual editor was last to have focus.
+ */
+ bool bInsertIntoEditWindow;
+protected:
+
+ Size GetTextLineSize(OutputDevice& rDevice,
+ const String& rLine);
+ Size GetTextSize(OutputDevice& rDevice,
+ const String& rText,
+ long MaxWidth);
+ void DrawTextLine(OutputDevice& rDevice,
+ const Point& rPosition,
+ const String& rLine);
+ void DrawText(OutputDevice& rDevice,
+ const Point& rPosition,
+ const String& rText,
+ sal_uInt16 MaxWidth);
+
+ virtual sal_uInt16 Print(SfxProgress &rProgress, sal_Bool bIsAPI);
+ virtual SfxPrinter *GetPrinter(sal_Bool bCreate = sal_False);
+ virtual sal_uInt16 SetPrinter(SfxPrinter *pNewPrinter,
+ sal_uInt16 nDiffFlags = SFX_PRINTER_ALL, bool bIsAPI=false);
+
+ bool Insert( SfxMedium& rMedium );
+ bool InsertFrom(SfxMedium &rMedium);
+
+ virtual SfxTabPage *CreatePrintOptionsPage(Window *pParent,
+ const SfxItemSet &rOptions);
+ virtual void Deactivate(sal_Bool IsMDIActivate);
+ virtual void Activate(sal_Bool IsMDIActivate);
+ virtual Size GetOptimalSizePixel() const;
+ virtual void AdjustPosSizePixel(const Point &rPos, const Size &rSize);
+ virtual void InnerResizePixel(const Point &rOfs, const Size &rSize);
+ virtual void OuterResizePixel(const Point &rOfs, const Size &rSize);
+ virtual void QueryObjAreaPixel( Rectangle& rRect ) const;
+ virtual void SetZoomFactor( const Fraction &rX, const Fraction &rY );
+
+public:
+ TYPEINFO();
+
+ SmViewShell(SfxViewFrame *pFrame, SfxViewShell *pOldSh);
+ ~SmViewShell();
+
+ SmDocShell * GetDoc()
+ {
+ return (SmDocShell *) GetViewFrame()->GetObjectShell();
+ }
+
+ SmEditWindow * GetEditWindow();
+ SmGraphicWindow & GetGraphicWindow() { return aGraphic; }
+ const SmGraphicWindow & GetGraphicWindow() const { return aGraphic; }
+
+ void SetStatusText(const String& Text);
+
+ void ShowError( const SmErrorDesc *pErrorDesc );
+ void NextError();
+ void PrevError();
+
+ SFX_DECL_INTERFACE(SFX_INTERFACE_SMA_START+2)
+ SFX_DECL_VIEWFACTORY(SmViewShell);
+
+ virtual void Execute( SfxRequest& rReq );
+ virtual void GetState(SfxItemSet &);
+
+ void Impl_Print( OutputDevice &rOutDev, const SmPrintUIOptions &rPrintUIOptions,
+ Rectangle aOutRect, Point aZeroPoint );
+
+ /** Set bInsertIntoEditWindow so we know where to insert
+ *
+ * This method is called whenever SmGraphicWindow or SmEditWindow gets focus,
+ * so that when text is inserted from catalog or elsewhere we know whether to
+ * insert for the visual editor, or the text editor.
+ */
+ void SetInsertIntoEditWindow(bool bEditWindowHadFocusLast = true){
+ bInsertIntoEditWindow = bEditWindowHadFocusLast;
+ }
+ bool IsInlineEditEnabled() const;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */