xref: /AOO41X/main/sw/source/ui/docvw/edtwin3.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sw.hxx"
30 
31 
32 
33 #include <hintids.hxx>
34 #include <vcl/settings.hxx>
35 #include <svx/ruler.hxx>
36 #include <viewopt.hxx>
37 #include "view.hxx"
38 #include "wrtsh.hxx"
39 #include "basesh.hxx"
40 #include "pview.hxx"
41 #include "mdiexp.hxx"
42 #include "edtwin.hxx"
43 #include "swmodule.hxx"
44 #include "modcfg.hxx"
45 #include "swtable.hxx"
46 #include "docsh.hxx"
47 #include "pagedesc.hxx"     // Aktuelles Seitenformat
48 #include <frmatr.hxx>
49 #include <editeng/frmdiritem.hxx>
50 
51 
52 /*--------------------------------------------------------------------
53 	Beschreibung:	Core-Notify
54  --------------------------------------------------------------------*/
55 
56 
57 
58 void ScrollMDI( ViewShell* pVwSh, const SwRect &rRect,
59 				sal_uInt16 nRangeX, sal_uInt16 nRangeY)
60 {
61 	SfxViewShell *pSfxVwSh = pVwSh->GetSfxViewShell();
62 	if (pSfxVwSh && pSfxVwSh->ISA(SwView))
63 		((SwView *)pSfxVwSh)->Scroll( rRect.SVRect(), nRangeX, nRangeY );
64 }
65 
66 /*--------------------------------------------------------------------
67 	Beschreibung:	Docmdi - verschiebbar
68  --------------------------------------------------------------------*/
69 
70 
71 
72 sal_Bool IsScrollMDI( ViewShell* pVwSh, const SwRect &rRect )
73 {
74 	SfxViewShell *pSfxVwSh = pVwSh->GetSfxViewShell();
75 	if (pSfxVwSh && pSfxVwSh->ISA(SwView))
76 		return (((SwView *)pSfxVwSh)->IsScroll(rRect.SVRect()));
77 	return sal_False;
78 }
79 
80 /*--------------------------------------------------------------------
81 	Beschreibung:	Notify fuer Groessen-Aenderung
82  --------------------------------------------------------------------*/
83 
84 
85 
86 void SizeNotify(ViewShell* pVwSh, const Size &rSize)
87 {
88 	SfxViewShell *pSfxVwSh = pVwSh->GetSfxViewShell();
89 	if (pSfxVwSh)
90 	{
91 		if (pSfxVwSh->ISA(SwView))
92 			((SwView *)pSfxVwSh)->DocSzChgd(rSize);
93 		else if (pSfxVwSh->ISA(SwPagePreView))
94 			((SwPagePreView *)pSfxVwSh)->DocSzChgd( rSize );
95 	}
96 }
97 
98 /*--------------------------------------------------------------------
99 	Beschreibung:	Notify fuer Seitenzahl-Update
100  --------------------------------------------------------------------*/
101 
102 
103 
104 void PageNumNotify( ViewShell* pVwSh, sal_uInt16 nPhyNum, sal_uInt16 nVirtNum,
105 													const String& rPgStr)
106 {
107 	SfxViewShell *pSfxVwSh = pVwSh->GetSfxViewShell();
108 	if ( pSfxVwSh && pSfxVwSh->ISA(SwView) &&
109 		 ((SwView*)pSfxVwSh)->GetCurShell() )
110 			((SwView *)pSfxVwSh)->UpdatePageNums(nPhyNum, nVirtNum, rPgStr);
111 }
112 
113 /******************************************************************************
114  *	Methode		:	void FrameNotify( DocMDIBase *pWin, FlyMode eMode )
115  *	Beschreibung:
116  *	Erstellt	:	OK 08.02.94 13:49
117  *	Aenderung	:
118  ******************************************************************************/
119 
120 
121 
122 void FrameNotify( ViewShell* pVwSh, FlyMode eMode )
123 {
124 	if ( pVwSh->ISA(SwCrsrShell) )
125 		SwBaseShell::SetFrmMode( eMode, (SwWrtShell*)pVwSh );
126 }
127 
128 /*--------------------------------------------------------------------
129 	Beschreibung:	Notify fuer Seitenzahl-Update
130  --------------------------------------------------------------------*/
131 sal_Bool SwEditWin::RulerColumnDrag( const MouseEvent& rMEvt, sal_Bool bVerticalMode)
132 {
133     SvxRuler& rRuler = bVerticalMode ?  rView.GetVLineal() : rView.GetHLineal();
134     return (!rRuler.StartDocDrag( rMEvt, RULER_TYPE_BORDER ) &&
135             !rRuler.StartDocDrag( rMEvt, RULER_TYPE_MARGIN1) &&
136             !rRuler.StartDocDrag( rMEvt, RULER_TYPE_MARGIN2));
137 }
138 
139 // #i23726#
140 // --> OD 2005-02-18 #i42921# - add 3rd parameter <bVerticalMode> in order
141 // to consider vertical layout
142 sal_Bool SwEditWin::RulerMarginDrag( const MouseEvent& rMEvt,
143                                  const bool bVerticalMode )
144 {
145     SvxRuler& rRuler = bVerticalMode ?  rView.GetVLineal() : rView.GetHLineal();
146     return !rRuler.StartDocDrag( rMEvt, RULER_TYPE_INDENT);
147 }
148 // <--
149 
150 LAYOUT_NS Dialog* GetSearchDialog()
151 {
152 	return SwView::GetSearchDialog();
153 }
154 
155 TblChgMode GetTblChgDefaultMode()
156 {
157 	SwModuleOptions* pOpt = SW_MOD()->GetModuleConfig();
158 	return pOpt ? pOpt->GetTblMode() : TBLVAR_CHGABS;
159 }
160 
161 void RepaintPagePreview( ViewShell* pVwSh, const SwRect& rRect )
162 {
163 	SfxViewShell *pSfxVwSh = pVwSh->GetSfxViewShell();
164 	if (pSfxVwSh && pSfxVwSh->ISA( SwPagePreView ))
165 		((SwPagePreView *)pSfxVwSh)->RepaintCoreRect( rRect );
166 }
167 
168 sal_Bool JumpToSwMark( ViewShell* pVwSh, const String& rMark )
169 {
170 	SfxViewShell *pSfxVwSh = pVwSh->GetSfxViewShell();
171 	if( pSfxVwSh && pSfxVwSh->ISA( SwView ) )
172 		return ((SwView *)pSfxVwSh)->JumpToSwMark( rMark );
173 	return sal_False;
174 }
175 
176 void SwEditWin::DataChanged( const DataChangedEvent& rDCEvt )
177 {
178 	Window::DataChanged( rDCEvt );
179 
180     SwWrtShell* pSh = GetView().GetWrtShellPtr();
181     //#99906#   DataChanged() is sometimes called prior to creating
182     //          the SwWrtShell
183     if(!pSh)
184         return;
185     sal_Bool bViewWasLocked = pSh->IsViewLocked(), bUnlockPaint = sal_False;
186     pSh->LockView( sal_True );
187 	switch( rDCEvt.GetType() )
188 	{
189 	case DATACHANGED_SETTINGS:
190 		// ScrollBars neu anordnen bzw. Resize ausloesen, da sich
191 		// ScrollBar-Groesse geaendert haben kann. Dazu muss dann im
192 		// Resize-Handler aber auch die Groesse der ScrollBars aus
193 		// den Settings abgefragt werden.
194 		if( rDCEvt.GetFlags() & SETTINGS_STYLE )
195 		{
196             pSh->LockPaint();
197 			bUnlockPaint = sal_True;
198             ViewShell::DeleteReplacementBitmaps();
199 			GetView().InvalidateBorder();				//Scrollbarbreiten
200 		}
201 		break;
202 
203 	case DATACHANGED_PRINTER:
204 	case DATACHANGED_DISPLAY:
205 	case DATACHANGED_FONTS:
206 	case DATACHANGED_FONTSUBSTITUTION:
207         pSh->LockPaint();
208 		bUnlockPaint = sal_True;
209 		GetView().GetDocShell()->UpdateFontList();	//z.B. Druckerwechsel
210 		break;
211 	}
212     pSh->LockView( bViewWasLocked );
213 	if( bUnlockPaint )
214         pSh->UnlockPaint();
215 }
216 
217