xref: /trunk/main/starmath/inc/view.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef VIEW_HXX
28 #define VIEW_HXX
29 
30 #include <sfx2/dockwin.hxx>
31 #include <sfx2/viewsh.hxx>
32 #include <svtools/scrwin.hxx>
33 #include <sfx2/ctrlitem.hxx>
34 #include <sfx2/shell.hxx>
35 #include <sfx2/viewfac.hxx>
36 #include <sfx2/viewfrm.hxx>
37 #include <svtools/colorcfg.hxx>
38 #include "edit.hxx"
39 #include "node.hxx"
40 #include "accessibility.hxx"
41 
42 class Menu;
43 class DataChangedEvent;
44 class SmClipboardChangeListener;
45 class SmDocShell;
46 class SmViewShell;
47 class SmPrintUIOptions;
48 
49 /**************************************************************************/
50 
51 class SmGraphicWindow : public ScrollableWindow
52 {
53     Point           aFormulaDrawPos;
54     Rectangle       aCursorRect;
55 
56     ::com::sun::star::uno::Reference<
57         ::com::sun::star::accessibility::XAccessible >  xAccessible;
58     SmGraphicAccessible *                                       pAccessible;
59 
60     SmViewShell    *pViewShell;
61     sal_uInt16          nZoom;
62     short           nModifyCount;
63     sal_Bool            bIsCursorVisible;
64 
65 protected:
66     void        SetFormulaDrawPos(const Point &rPos) { aFormulaDrawPos = rPos; }
67     void        SetIsCursorVisible(sal_Bool bVis) { bIsCursorVisible = bVis; }
68     using   Window::SetCursor;
69     void        SetCursor(const SmNode *pNode);
70     void        SetCursor(const Rectangle &rRect);
71 
72     virtual void DataChanged( const DataChangedEvent& );
73     virtual void Paint(const Rectangle&);
74     virtual void KeyInput(const KeyEvent& rKEvt);
75     virtual void Command(const CommandEvent& rCEvt);
76     virtual void StateChanged( StateChangedType eChanged );
77     DECL_LINK(MenuSelectHdl, Menu *);
78 
79 public:
80     SmGraphicWindow(SmViewShell* pShell);
81     ~SmGraphicWindow();
82 
83     // Window
84     virtual void    MouseButtonDown(const MouseEvent &rMEvt);
85     virtual void    GetFocus();
86     virtual void    LoseFocus();
87 
88     SmViewShell *   GetView()   { return pViewShell; }
89 
90     using   Window::SetZoom;
91     void   SetZoom(sal_uInt16 Factor);
92     using   Window::GetZoom;
93     sal_uInt16 GetZoom() const { return nZoom; }
94 
95     const Point &   GetFormulaDrawPos() const { return aFormulaDrawPos; }
96 
97     void ZoomToFitInWindow();
98     using   ScrollableWindow::SetTotalSize;
99     void SetTotalSize();
100 
101     sal_Bool IsCursorVisible() const { return bIsCursorVisible; }
102     void ShowCursor(sal_Bool bShow);
103     const SmNode * SetCursorPos(sal_uInt16 nRow, sal_uInt16 nCol);
104 
105     void ApplyColorConfigValues( const svtools::ColorConfig &rColorCfg );
106 
107     // for Accessibility
108     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
109 
110     using   Window::GetAccessible;
111     SmGraphicAccessible *   GetAccessible_Impl()  { return pAccessible; }
112 };
113 
114 /**************************************************************************/
115 
116 class SmGraphicController: public SfxControllerItem
117 {
118 protected:
119     SmGraphicWindow &rGraphic;
120 public:
121     SmGraphicController(SmGraphicWindow &, sal_uInt16, SfxBindings & );
122     virtual void StateChanged(sal_uInt16             nSID,
123                               SfxItemState       eState,
124                               const SfxPoolItem* pState);
125 };
126 
127 /**************************************************************************/
128 
129 class SmEditController: public SfxControllerItem
130 {
131 protected:
132     SmEditWindow &rEdit;
133 
134 public:
135     SmEditController(SmEditWindow &, sal_uInt16, SfxBindings  & );
136 #if OSL_DEBUG_LEVEL > 1
137     virtual ~SmEditController();
138 #endif
139 
140     virtual void StateChanged(sal_uInt16             nSID,
141                               SfxItemState       eState,
142                               const SfxPoolItem* pState);
143 };
144 
145 /**************************************************************************/
146 
147 class SmCmdBoxWindow : public SfxDockingWindow
148 {
149     SmEditWindow        aEdit;
150     SmEditController    aController;
151     sal_Bool                bExiting;
152 
153     Timer               aInitialFocusTimer;
154 
155     DECL_LINK(InitialFocusTimerHdl, Timer *);
156 
157 protected :
158 
159     // Window
160     virtual void    GetFocus();
161     virtual void Resize();
162     virtual void Paint(const Rectangle& rRect);
163     virtual void StateChanged( StateChangedType nStateChange );
164 
165     virtual Size CalcDockingSize(SfxChildAlignment eAlign);
166     virtual SfxChildAlignment CheckAlignment(SfxChildAlignment eActual,
167                                              SfxChildAlignment eWish);
168 
169     virtual void    ToggleFloatingMode();
170 
171 public:
172     SmCmdBoxWindow(SfxBindings    *pBindings,
173                    SfxChildWindow *pChildWindow,
174                    Window         *pParent);
175 
176     virtual ~SmCmdBoxWindow ();
177 
178     void AdjustPosition();
179 
180     SmEditWindow *GetEditWindow() { return (&aEdit); }
181     SmViewShell  *GetView();
182 };
183 
184 /**************************************************************************/
185 
186 class SmCmdBoxWrapper : public SfxChildWindow
187 {
188     SFX_DECL_CHILDWINDOW(SmCmdBoxWrapper);
189 
190 protected:
191     SmCmdBoxWrapper(Window          *pParentWindow,
192                     sal_uInt16           nId,
193                     SfxBindings     *pBindings,
194                     SfxChildWinInfo *pInfo);
195 
196 #if OSL_DEBUG_LEVEL > 1
197     virtual ~SmCmdBoxWrapper();
198 #endif
199 
200 public:
201 
202     SmEditWindow *GetEditWindow()
203     {
204         return (((SmCmdBoxWindow *)pWindow)->GetEditWindow());
205     }
206 
207 };
208 
209 /**************************************************************************/
210 
211 namespace sfx2 { class FileDialogHelper; }
212 struct SmViewShell_Impl;
213 
214 class SmViewShell: public SfxViewShell
215 {
216     // for handling the PasteClipboardState
217     friend class SmClipboardChangeListener;
218 
219     SmGraphicWindow     aGraphic;
220     SmGraphicController aGraphicController;
221     String              StatusText;
222 
223     ::com::sun::star::uno:: Reference <
224             ::com::sun::star::lang:: XEventListener > xClipEvtLstnr;
225     SmClipboardChangeListener*  pClipEvtLstnr;
226     SmViewShell_Impl*   pImpl;
227     sal_Bool                bPasteState;
228 
229     DECL_LINK( DialogClosedHdl, sfx2::FileDialogHelper* );
230     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
231 
232 protected:
233 
234     Size GetTextLineSize(OutputDevice& rDevice,
235                          const String& rLine);
236     Size GetTextSize(OutputDevice& rDevice,
237                      const String& rText,
238                      long          MaxWidth);
239     void DrawTextLine(OutputDevice& rDevice,
240                       const Point&  rPosition,
241                       const String& rLine);
242     void DrawText(OutputDevice& rDevice,
243                   const Point&  rPosition,
244                   const String& rText,
245                   sal_uInt16        MaxWidth);
246 
247     virtual sal_uInt16 Print(SfxProgress &rProgress, sal_Bool bIsAPI);
248     virtual SfxPrinter *GetPrinter(sal_Bool bCreate = sal_False);
249     virtual sal_uInt16 SetPrinter(SfxPrinter *pNewPrinter,
250                               sal_uInt16     nDiffFlags = SFX_PRINTER_ALL, bool bIsAPI=false);
251 
252     sal_Bool        Insert( SfxMedium& rMedium );
253     sal_Bool        InsertFrom(SfxMedium &rMedium);
254 
255     virtual SfxTabPage *CreatePrintOptionsPage(Window           *pParent,
256                                                const SfxItemSet &rOptions);
257     virtual void Deactivate(sal_Bool IsMDIActivate);
258     virtual void Activate(sal_Bool IsMDIActivate);
259     virtual Size GetOptimalSizePixel() const;
260     virtual void AdjustPosSizePixel(const Point &rPos, const Size &rSize);
261     virtual void InnerResizePixel(const Point &rOfs, const Size  &rSize);
262     virtual void OuterResizePixel(const Point &rOfs, const Size  &rSize);
263     virtual void QueryObjAreaPixel( Rectangle& rRect ) const;
264     virtual void SetZoomFactor( const Fraction &rX, const Fraction &rY );
265 
266 public:
267     TYPEINFO();
268 
269     SmViewShell(SfxViewFrame *pFrame, SfxViewShell *pOldSh);
270     ~SmViewShell();
271 
272     SmDocShell * GetDoc()
273     {
274         return (SmDocShell *) GetViewFrame()->GetObjectShell();
275     }
276 
277     SmEditWindow * GetEditWindow();
278           SmGraphicWindow & GetGraphicWindow()       { return aGraphic; }
279     const SmGraphicWindow & GetGraphicWindow() const { return aGraphic; }
280 
281     void        SetStatusText(const String& Text);
282 
283     void        ShowError( const SmErrorDesc *pErrorDesc );
284     void        NextError();
285     void        PrevError();
286 
287     SFX_DECL_INTERFACE(SFX_INTERFACE_SMA_START+2)
288     SFX_DECL_VIEWFACTORY(SmViewShell);
289 
290     virtual void Execute( SfxRequest& rReq );
291     virtual void GetState(SfxItemSet &);
292 
293     void Impl_Print( OutputDevice &rOutDev, const SmPrintUIOptions &rPrintUIOptions,
294             Rectangle aOutRect, Point aZeroPoint );
295 };
296 
297 #endif
298 
299