xref: /aoo41x/main/sc/source/ui/pagedlg/tphfedit.cxx (revision cdf0e10c)
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_sc.hxx"
30 
31 
32 
33 //------------------------------------------------------------------
34 
35 #define _TPHFEDIT_CXX
36 #include "scitems.hxx"
37 #include <editeng/eeitem.hxx>
38 
39 
40 //CHINA001 #include <svx/chardlg.hxx>
41 #include <editeng/editobj.hxx>
42 #include <editeng/editstat.hxx>
43 #include <editeng/editview.hxx>
44 #include <editeng/flditem.hxx>
45 #include <editeng/adjitem.hxx>
46 #include <sfx2/basedlgs.hxx>
47 #include <sfx2/objsh.hxx>
48 #include <vcl/msgbox.hxx>
49 #include <vcl/svapp.hxx>
50 
51 #include "tphfedit.hxx"
52 #include "editutil.hxx"
53 #include "global.hxx"
54 #include "attrib.hxx"
55 #include "patattr.hxx"
56 #include "scresid.hxx"
57 #include "sc.hrc"
58 #include "globstr.hrc"
59 #include "tabvwsh.hxx"
60 #include "prevwsh.hxx"
61 #include "hfedtdlg.hrc"
62 //CHINA001 #include "textdlgs.hxx"
63 #include "AccessibleEditObject.hxx"
64 
65 #include "scabstdlg.hxx" //CHINA001
66 
67 
68 // STATIC DATA -----------------------------------------------------------
69 static ScEditWindow* pActiveEdWnd = NULL;
70 
71 ScEditWindow* GetScEditWindow ()
72 {
73 	return pActiveEdWnd;
74 }
75 
76 //CHINA001
77 //CHINA001 static sal_uInt16 pPageRightHeaderRanges[] = { SID_SCATTR_PAGE_HEADERRIGHT,
78 //CHINA001 SID_SCATTR_PAGE_HEADERRIGHT,
79 //CHINA001 0 };
80 //CHINA001
81 //CHINA001 static sal_uInt16 pPageRightFooterRanges[] = { SID_SCATTR_PAGE_FOOTERRIGHT,
82 //CHINA001 SID_SCATTR_PAGE_FOOTERRIGHT,
83 //CHINA001 0 };
84 //CHINA001
85 //CHINA001 static sal_uInt16 pPageLeftHeaderRanges[] =  { SID_SCATTR_PAGE_HEADERLEFT,
86 //CHINA001 SID_SCATTR_PAGE_HEADERLEFT,
87 //CHINA001 0 };
88 //CHINA001
89 //CHINA001 static sal_uInt16 pPageLeftFooterRanges[] =  { SID_SCATTR_PAGE_FOOTERLEFT,
90 //CHINA001 SID_SCATTR_PAGE_FOOTERLEFT,
91 //CHINA001 0 };
92 //CHINA001
93 //CHINA001 static ScEditWindow* pActiveEdWnd = NULL;
94 //CHINA001
95 //CHINA001
96 //CHINA001
97 //CHINA001 //========================================================================
98 //CHINA001 // class ScHFEditPage
99 //CHINA001 //
100 //CHINA001
101 //CHINA001 ScHFEditPage::ScHFEditPage( Window*			pParent,
102 //CHINA001 sal_uInt16				nResId,
103 //CHINA001 const SfxItemSet&	rCoreAttrs,
104 //CHINA001 sal_uInt16				nWhichId )
105 //CHINA001
106 //CHINA001 :	SfxTabPage		( pParent, ScResId( nResId ), rCoreAttrs ),
107 //CHINA001
108 //CHINA001 aWndLeft		( this, ScResId( WND_LEFT ), Left ),
109 //CHINA001 aWndCenter		( this, ScResId( WND_CENTER ), Center ),
110 //CHINA001 aWndRight		( this, ScResId( WND_RIGHT ), Right ),
111 //CHINA001 aFtLeft		( this, ScResId( FT_LEFT ) ),
112 //CHINA001 aFtCenter		( this, ScResId( FT_CENTER ) ),
113 //CHINA001 aFtRight		( this, ScResId( FT_RIGHT ) ),
114 //CHINA001 aFlInfo		( this, ScResId( FL_INFO ) ),
115 //CHINA001 aFtInfo		( this, ScResId( FT_INFO ) ),
116 //CHINA001 aBtnText		( this, ScResId( BTN_TEXT ) ),
117 //CHINA001 aBtnPage		( this, ScResId( BTN_PAGE ) ),
118 //CHINA001 aBtnLastPage	( this, ScResId( BTN_PAGES ) ),
119 //CHINA001 aBtnDate		( this, ScResId( BTN_DATE ) ),
120 //CHINA001 aBtnTime		( this, ScResId( BTN_TIME ) ),
121 //CHINA001 aBtnFile		( this, ScResId( BTN_FILE ) ),
122 //CHINA001 aBtnTable		( this, ScResId( BTN_TABLE ) ),
123 //CHINA001 aPopUpFile		( ScResId( RID_POPUP_FCOMMAND) ),
124 //CHINA001 nWhich			( nWhichId )
125 //CHINA001 {
126 //CHINA001 //!	use default style from current document?
127 //CHINA001 //!	if font color is used, header/footer background color must be set
128 //CHINA001
129 //CHINA001 ScPatternAttr	aPatAttr( rCoreAttrs.GetPool() );
130 //CHINA001
131 //CHINA001 aBtnFile.SetPopupMenu(&aPopUpFile);
132 //CHINA001
133 //CHINA001 aBtnFile.SetMenuHdl( LINK( this, ScHFEditPage, MenuHdl ) );
134 //CHINA001 aBtnText	.SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
135 //CHINA001 aBtnPage	.SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
136 //CHINA001 aBtnLastPage.SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
137 //CHINA001 aBtnDate	.SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
138 //CHINA001 aBtnTime	.SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
139 //CHINA001 aBtnFile	.SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
140 //CHINA001 aBtnTable	.SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
141 //CHINA001
142 //CHINA001 aBtnText    .SetModeImage( Image( ScResId( IMG_TEXT_H  ) ), BMP_COLOR_HIGHCONTRAST );
143 //CHINA001 aBtnFile    .SetModeImage( Image( ScResId( IMG_FILE_H  ) ), BMP_COLOR_HIGHCONTRAST );
144 //CHINA001 aBtnTable   .SetModeImage( Image( ScResId( IMG_TABLE_H ) ), BMP_COLOR_HIGHCONTRAST );
145 //CHINA001 aBtnPage    .SetModeImage( Image( ScResId( IMG_PAGE_H  ) ), BMP_COLOR_HIGHCONTRAST );
146 //CHINA001 aBtnLastPage.SetModeImage( Image( ScResId( IMG_PAGES_H ) ), BMP_COLOR_HIGHCONTRAST );
147 //CHINA001 aBtnDate    .SetModeImage( Image( ScResId( IMG_DATE_H  ) ), BMP_COLOR_HIGHCONTRAST );
148 //CHINA001 aBtnTime    .SetModeImage( Image( ScResId( IMG_TIME_H  ) ), BMP_COLOR_HIGHCONTRAST );
149 //CHINA001
150 //CHINA001 aWndLeft.	SetFont( aPatAttr );
151 //CHINA001 aWndCenter. SetFont( aPatAttr );
152 //CHINA001 aWndRight.	SetFont( aPatAttr );
153 //CHINA001
154 //CHINA001 FillCmdArr();
155 //CHINA001
156 //CHINA001 aWndLeft.GrabFocus();
157 //CHINA001
158 //CHINA001 FreeResource();
159 //CHINA001 }
160 //CHINA001
161 //CHINA001 // -----------------------------------------------------------------------
162 //CHINA001
163 //CHINA001 __EXPORT ScHFEditPage::~ScHFEditPage()
164 //CHINA001 {
165 //CHINA001 }
166 //CHINA001
167 //CHINA001 void ScHFEditPage::SetNumType(SvxNumType eNumType)
168 //CHINA001 {
169 //CHINA001 aWndLeft.SetNumType(eNumType);
170 //CHINA001 aWndCenter.SetNumType(eNumType);
171 //CHINA001 aWndRight.SetNumType(eNumType);
172 //CHINA001 }
173 //CHINA001
174 //CHINA001 // -----------------------------------------------------------------------
175 //CHINA001
176 //CHINA001 #define IS_AVAILABLE(w)(rCoreSet.GetItemState( (w) ) >= SFX_ITEM_AVAILABLE)
177 //CHINA001
178 //CHINA001 void __EXPORT ScHFEditPage::Reset( const SfxItemSet& rCoreSet )
179 //CHINA001 {
180 //CHINA001 if ( IS_AVAILABLE( nWhich ) )
181 //CHINA001	{
182 //CHINA001 const ScPageHFItem& rItem = (const ScPageHFItem&)(rCoreSet.Get( nWhich ));
183 //CHINA001
184 //CHINA001 const EditTextObject* pLeft   = rItem.GetLeftArea();
185 //CHINA001 const EditTextObject* pCenter = rItem.GetCenterArea();
186 //CHINA001 const EditTextObject* pRight  = rItem.GetRightArea();
187 //CHINA001
188 //CHINA001 if ( pLeft && pCenter && pRight )
189 //CHINA001		{
190 //CHINA001 aWndLeft	.SetText( *pLeft );
191 //CHINA001 aWndCenter	.SetText( *pCenter );
192 //CHINA001 aWndRight	.SetText( *pRight );
193 //CHINA001		}
194 //CHINA001	}
195 //CHINA001 }
196 //CHINA001
197 //CHINA001 #undef IS_AVAILABLE
198 //CHINA001
199 //CHINA001 // -----------------------------------------------------------------------
200 //CHINA001
201 //CHINA001 sal_Bool __EXPORT ScHFEditPage::FillItemSet( SfxItemSet& rCoreSet )
202 //CHINA001 {
203 //CHINA001 ScPageHFItem	aItem( nWhich );
204 //CHINA001 EditTextObject* pLeft	= aWndLeft	.CreateTextObject();
205 //CHINA001 EditTextObject* pCenter = aWndCenter.CreateTextObject();
206 //CHINA001 EditTextObject* pRight	= aWndRight .CreateTextObject();
207 //CHINA001
208 //CHINA001 aItem.SetLeftArea  ( *pLeft );
209 //CHINA001 aItem.SetCenterArea( *pCenter );
210 //CHINA001 aItem.SetRightArea ( *pRight );
211 //CHINA001 delete pLeft;
212 //CHINA001 delete pCenter;
213 //CHINA001 delete pRight;
214 //CHINA001
215 //CHINA001 rCoreSet.Put( aItem );
216 //CHINA001
217 //CHINA001 return sal_True;
218 //CHINA001 }
219 //CHINA001
220 //CHINA001 // -----------------------------------------------------------------------
221 //CHINA001
222 //CHINA001 #define SET_CMD(i,id) x
223 //CHINA001 aCmd  = aDel;							x
224 //CHINA001 aCmd += ScGlobal::GetRscString( id );	x
225 //CHINA001 aCmd += aDel;							x
226 //CHINA001 aCmdArr[i] = aCmd;
227 //CHINA001
228 //CHINA001 // -----------------------------------------------------------------------
229 //CHINA001
230 //CHINA001 void ScHFEditPage::FillCmdArr()
231 //CHINA001 {
232 //CHINA001 String aDel( ScGlobal::GetRscString( STR_HFCMD_DELIMITER ) );
233 //CHINA001 String aCmd;
234 //CHINA001
235 //CHINA001 SET_CMD( 0, STR_HFCMD_PAGE )
236 //CHINA001 SET_CMD( 1, STR_HFCMD_PAGES )
237 //CHINA001 SET_CMD( 2, STR_HFCMD_DATE )
238 //CHINA001 SET_CMD( 3, STR_HFCMD_TIME )
239 //CHINA001 SET_CMD( 4, STR_HFCMD_FILE )
240 //CHINA001 SET_CMD( 5, STR_HFCMD_TABLE )
241 //CHINA001 }
242 //CHINA001
243 //CHINA001 #undef SET_CMD
244 //CHINA001
245 //CHINA001 //-----------------------------------------------------------------------
246 //CHINA001 // Handler:
247 //CHINA001 //-----------------------------------------------------------------------
248 //CHINA001
249 //CHINA001 IMPL_LINK( ScHFEditPage, ClickHdl, ImageButton*, pBtn )
250 //CHINA001 {
251 //CHINA001 if ( !pActiveEdWnd )
252 //CHINA001 return 0;
253 //CHINA001
254 //CHINA001 if ( pBtn == &aBtnText )
255 //CHINA001	{
256 //CHINA001 pActiveEdWnd->SetCharAttriutes();
257 //CHINA001	}
258 //CHINA001	else
259 //CHINA001	{
260 //CHINA001 if ( pBtn == &aBtnPage )
261 //CHINA001 pActiveEdWnd->InsertField( SvxFieldItem(SvxPageField()) );
262 //CHINA001		else if ( pBtn == &aBtnLastPage )
263 //CHINA001 pActiveEdWnd->InsertField( SvxFieldItem(SvxPagesField()) );
264 //CHINA001		else if ( pBtn == &aBtnDate )
265 //CHINA001 pActiveEdWnd->InsertField( SvxFieldItem(SvxDateField(Date(),SVXDATETYPE_VAR)) );
266 //CHINA001		else if ( pBtn == &aBtnTime )
267 //CHINA001 pActiveEdWnd->InsertField( SvxFieldItem(SvxTimeField()) );
268 //CHINA001		else if ( pBtn == &aBtnFile )
269 //CHINA001		{
270 //CHINA001 pActiveEdWnd->InsertField( SvxFieldItem( SvxFileField() ) );
271 //CHINA001		}
272 //CHINA001		else if ( pBtn == &aBtnTable )
273 //CHINA001 pActiveEdWnd->InsertField( SvxFieldItem(SvxTableField()) );
274 //CHINA001	}
275 //CHINA001 pActiveEdWnd->GrabFocus();
276 //CHINA001
277 //CHINA001 return 0;
278 //CHINA001 }
279 //CHINA001
280 //CHINA001 IMPL_LINK( ScHFEditPage, MenuHdl, ScExtIButton*, pBtn )
281 //CHINA001 {
282 //CHINA001 if ( !pActiveEdWnd )
283 //CHINA001 return 0;
284 //CHINA001
285 //CHINA001 if(pBtn!=NULL)
286 //CHINA001	{
287 //CHINA001 switch(pBtn->GetSelected())
288 //CHINA001		{
289 //CHINA001			case FILE_COMMAND_TITEL:
290 //CHINA001 pActiveEdWnd->InsertField( SvxFieldItem( SvxFileField() ) );
291 //CHINA001 break;
292 //CHINA001			case FILE_COMMAND_FILENAME:
293 //CHINA001 pActiveEdWnd->InsertField( SvxFieldItem( SvxExtFileField(
294 //CHINA001 EMPTY_STRING, SVXFILETYPE_VAR, SVXFILEFORMAT_NAME_EXT ) ) );
295 //CHINA001 break;
296 //CHINA001			case FILE_COMMAND_PATH:
297 //CHINA001 pActiveEdWnd->InsertField( SvxFieldItem( SvxExtFileField(
298 //CHINA001 EMPTY_STRING, SVXFILETYPE_VAR, SVXFILEFORMAT_FULLPATH ) ) );
299 //CHINA001 break;
300 //CHINA001		}
301 //CHINA001	}
302 //CHINA001 return 0;
303 //CHINA001 }
304 //CHINA001
305 //CHINA001 //========================================================================
306 //CHINA001 // class ScRightHeaderEditPage
307 //CHINA001 //========================================================================
308 //CHINA001
309 //CHINA001 ScRightHeaderEditPage::ScRightHeaderEditPage( Window* pParent, const SfxItemSet& rCoreSet )
310 //CHINA001 : ScHFEditPage( pParent, RID_SCPAGE_HFED_HR, rCoreSet,
311 //CHINA001 rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_HEADERRIGHT) )
312 //CHINA001	{}
313 //CHINA001
314 //CHINA001 // -----------------------------------------------------------------------
315 //CHINA001
316 //CHINA001 sal_uInt16* __EXPORT ScRightHeaderEditPage::GetRanges()
317 //CHINA001	{ return pPageRightHeaderRanges; }
318 //CHINA001
319 //CHINA001 // -----------------------------------------------------------------------
320 //CHINA001
321 //CHINA001 SfxTabPage* __EXPORT ScRightHeaderEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
322 //CHINA001	{ return ( new ScRightHeaderEditPage( pParent, rCoreSet ) ); };
323 //CHINA001
324 //CHINA001
325 //CHINA001 //========================================================================
326 //CHINA001 // class ScLeftHeaderEditPage
327 //CHINA001 //========================================================================
328 //CHINA001
329 //CHINA001 ScLeftHeaderEditPage::ScLeftHeaderEditPage( Window* pParent, const SfxItemSet& rCoreSet )
330 //CHINA001 : ScHFEditPage( pParent, RID_SCPAGE_HFED_HL, rCoreSet,
331 //CHINA001 rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_HEADERLEFT) )
332 //CHINA001	{}
333 //CHINA001
334 //CHINA001 // -----------------------------------------------------------------------
335 //CHINA001
336 //CHINA001 sal_uInt16* __EXPORT ScLeftHeaderEditPage::GetRanges()
337 //CHINA001	{ return pPageLeftHeaderRanges; }
338 //CHINA001
339 //CHINA001 // -----------------------------------------------------------------------
340 //CHINA001
341 //CHINA001 SfxTabPage* __EXPORT ScLeftHeaderEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
342 //CHINA001	{ return ( new ScLeftHeaderEditPage( pParent, rCoreSet ) ); };
343 //CHINA001
344 //CHINA001 //========================================================================
345 //CHINA001 // class ScRightFooterEditPage
346 //CHINA001 //========================================================================
347 //CHINA001
348 //CHINA001 ScRightFooterEditPage::ScRightFooterEditPage( Window* pParent, const SfxItemSet& rCoreSet )
349 //CHINA001 : ScHFEditPage( pParent, RID_SCPAGE_HFED_FR, rCoreSet,
350 //CHINA001 rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_FOOTERRIGHT) )
351 //CHINA001	{}
352 //CHINA001
353 //CHINA001 // -----------------------------------------------------------------------
354 //CHINA001
355 //CHINA001 sal_uInt16* __EXPORT ScRightFooterEditPage::GetRanges()
356 //CHINA001	{ return pPageRightFooterRanges; }
357 //CHINA001
358 //CHINA001 // -----------------------------------------------------------------------
359 //CHINA001
360 //CHINA001 SfxTabPage* __EXPORT ScRightFooterEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
361 //CHINA001	{ return ( new ScRightFooterEditPage( pParent, rCoreSet ) ); };
362 //CHINA001
363 //CHINA001 //========================================================================
364 //CHINA001 // class ScLeftFooterEditPage
365 //CHINA001 //========================================================================
366 //CHINA001
367 //CHINA001 ScLeftFooterEditPage::ScLeftFooterEditPage( Window* pParent, const SfxItemSet& rCoreSet )
368 //CHINA001 : ScHFEditPage( pParent, RID_SCPAGE_HFED_FL, rCoreSet,
369 //CHINA001 rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_FOOTERLEFT) )
370 //CHINA001	{}
371 //CHINA001
372 //CHINA001 // -----------------------------------------------------------------------
373 //CHINA001
374 //CHINA001 sal_uInt16* __EXPORT ScLeftFooterEditPage::GetRanges()
375 //CHINA001	{ return pPageLeftFooterRanges; }
376 //CHINA001
377 //CHINA001 // -----------------------------------------------------------------------
378 //CHINA001
379 //CHINA001 SfxTabPage* __EXPORT ScLeftFooterEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
380 //CHINA001	{ return ( new ScLeftFooterEditPage( pParent, rCoreSet ) ); };
381 
382 //========================================================================
383 
384 void lcl_GetFieldData( ScHeaderFieldData& rData )
385 {
386 	SfxViewShell* pShell = SfxViewShell::Current();
387 	if (pShell)
388 	{
389 		if (pShell->ISA(ScTabViewShell))
390 			((ScTabViewShell*)pShell)->FillFieldData(rData);
391 		else if (pShell->ISA(ScPreviewShell))
392 			((ScPreviewShell*)pShell)->FillFieldData(rData);
393 	}
394 }
395 
396 //========================================================================
397 // class ScEditWindow
398 //========================================================================
399 
400 ScEditWindow::ScEditWindow( Window* pParent, const ResId& rResId, ScEditWindowLocation eLoc )
401 	:	Control( pParent, rResId ),
402     eLocation(eLoc),
403     pAcc(NULL)
404 {
405     EnableRTL(sal_False);
406 
407 	const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
408 	Color aBgColor = rStyleSettings.GetWindowColor();
409 
410 	SetMapMode( MAP_TWIP );
411 	SetPointer( POINTER_TEXT );
412 	SetBackground( aBgColor );
413 
414 	Size aSize( GetOutputSize() );
415 	aSize.Height() *= 4;
416 
417 	pEdEngine = new ScHeaderEditEngine( EditEngine::CreatePool(), sal_True );
418 	pEdEngine->SetPaperSize( aSize );
419 	pEdEngine->SetRefDevice( this );
420 
421 	ScHeaderFieldData aData;
422 	lcl_GetFieldData( aData );
423 
424 		//	Feldbefehle:
425 	pEdEngine->SetData( aData );
426 	pEdEngine->SetControlWord( pEdEngine->GetControlWord() | EE_CNTRL_MARKFIELDS );
427 	mbRTL = ScGlobal::IsSystemRTL();
428 	if (mbRTL)
429 		pEdEngine->SetDefaultHorizontalTextDirection(EE_HTEXTDIR_R2L);
430 
431 	pEdView = new EditView( pEdEngine, this );
432 	pEdView->SetOutputArea( Rectangle( Point(0,0), GetOutputSize() ) );
433 
434 	pEdView->SetBackgroundColor( aBgColor );
435 	pEdEngine->InsertView( pEdView );
436 }
437 
438 // -----------------------------------------------------------------------
439 
440 __EXPORT ScEditWindow::~ScEditWindow()
441 {
442     // delete Accessible object before deleting EditEngine and EditView
443     if (pAcc)
444     {
445         ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > xTemp = xAcc;
446         if (xTemp.is())
447             pAcc->dispose();
448     }
449 	delete pEdEngine;
450 	delete pEdView;
451 }
452 
453 // -----------------------------------------------------------------------
454 
455 void ScEditWindow::SetNumType(SvxNumType eNumType)
456 {
457 	pEdEngine->SetNumType(eNumType);
458 	pEdEngine->UpdateFields();
459 }
460 
461 // -----------------------------------------------------------------------
462 
463 EditTextObject* __EXPORT ScEditWindow::CreateTextObject()
464 {
465 	//	wegen #38841# die Absatzattribute zuruecksetzen
466 	//	(GetAttribs beim Format-Dialog-Aufruf gibt immer gesetzte Items zurueck)
467 
468 	const SfxItemSet& rEmpty = pEdEngine->GetEmptyItemSet();
469 	sal_uInt16 nParCnt = pEdEngine->GetParagraphCount();
470 	for (sal_uInt16 i=0; i<nParCnt; i++)
471 		pEdEngine->SetParaAttribs( i, rEmpty );
472 
473 	return pEdEngine->CreateTextObject();
474 }
475 
476 // -----------------------------------------------------------------------
477 
478 void ScEditWindow::SetFont( const ScPatternAttr& rPattern )
479 {
480 	SfxItemSet*	pSet = new SfxItemSet( pEdEngine->GetEmptyItemSet() );
481 	rPattern.FillEditItemSet( pSet );
482 	//	FillEditItemSet adjusts font height to 1/100th mm,
483 	//	but for header/footer twips is needed, as in the PatternAttr:
484 	pSet->Put( rPattern.GetItem(ATTR_FONT_HEIGHT), EE_CHAR_FONTHEIGHT );
485 	pSet->Put( rPattern.GetItem(ATTR_CJK_FONT_HEIGHT), EE_CHAR_FONTHEIGHT_CJK );
486 	pSet->Put( rPattern.GetItem(ATTR_CTL_FONT_HEIGHT), EE_CHAR_FONTHEIGHT_CTL );
487 	if (mbRTL)
488 		pSet->Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
489 	pEdEngine->SetDefaults( pSet );
490 }
491 
492 // -----------------------------------------------------------------------
493 
494 void ScEditWindow::SetText( const EditTextObject& rTextObject )
495 {
496 	pEdEngine->SetText( rTextObject );
497 }
498 
499 // -----------------------------------------------------------------------
500 
501 void ScEditWindow::InsertField( const SvxFieldItem& rFld )
502 {
503 	pEdView->InsertField( rFld );
504 }
505 
506 // -----------------------------------------------------------------------
507 
508 void ScEditWindow::SetCharAttriutes()
509 {
510 	SfxObjectShell*	pDocSh	= SfxObjectShell::Current();
511 
512 	SfxViewShell*		pViewSh = SfxViewShell::Current();
513 
514 	ScTabViewShell*	pTabViewSh = PTR_CAST(ScTabViewShell, SfxViewShell::Current());
515 
516 
517 	DBG_ASSERT( pDocSh,  "Current DocShell not found" );
518 	DBG_ASSERT( pViewSh, "Current ViewShell not found" );
519 
520 	if ( pDocSh && pViewSh )
521 	{
522 		if(pTabViewSh!=NULL) pTabViewSh->SetInFormatDialog(sal_True);
523 
524 		SfxItemSet aSet( pEdView->GetAttribs() );
525 
526 		//CHINA001 ScCharDlg* pDlg = new ScCharDlg( GetParent(), &aSet, pDocSh );
527 		ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
528 		DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
529 
530 		SfxAbstractTabDialog* pDlg = pFact->CreateScCharDlg(  GetParent(),  &aSet,
531 															pDocSh,RID_SCDLG_CHAR );
532 		DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
533 		pDlg->SetText( ScGlobal::GetRscString( STR_TEXTATTRS ) );
534 		if ( pDlg->Execute() == RET_OK )
535 		{
536 			aSet.ClearItem();
537 			aSet.Put( *pDlg->GetOutputItemSet() );
538 			pEdView->SetAttribs( aSet );
539 		}
540 
541 		if(pTabViewSh!=NULL) pTabViewSh->SetInFormatDialog(sal_False);
542 		delete pDlg;
543 	}
544 }
545 
546 // -----------------------------------------------------------------------
547 
548 void __EXPORT ScEditWindow::Paint( const Rectangle& rRec )
549 {
550 	const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
551 	Color aBgColor = rStyleSettings.GetWindowColor();
552 
553 	pEdView->SetBackgroundColor( aBgColor );
554 
555 	SetBackground( aBgColor );
556 
557 	Control::Paint(	rRec );
558 
559 	pEdView->Paint( rRec );
560 }
561 
562 // -----------------------------------------------------------------------
563 
564 void __EXPORT ScEditWindow::MouseMove( const MouseEvent& rMEvt )
565 {
566 	pEdView->MouseMove( rMEvt );
567 }
568 
569 // -----------------------------------------------------------------------
570 
571 void __EXPORT ScEditWindow::MouseButtonDown( const MouseEvent& rMEvt )
572 {
573 	if ( !HasFocus() )
574 		GrabFocus();
575 
576 	pEdView->MouseButtonDown( rMEvt );
577 }
578 
579 // -----------------------------------------------------------------------
580 
581 void __EXPORT ScEditWindow::MouseButtonUp( const MouseEvent& rMEvt )
582 {
583 	pEdView->MouseButtonUp( rMEvt );
584 }
585 
586 // -----------------------------------------------------------------------
587 
588 void __EXPORT ScEditWindow::KeyInput( const KeyEvent& rKEvt )
589 {
590 	sal_uInt16 nKey =  rKEvt.GetKeyCode().GetModifier()
591 				 + rKEvt.GetKeyCode().GetCode();
592 
593 	if ( nKey == KEY_TAB || nKey == KEY_TAB + KEY_SHIFT )
594 	{
595 		Control::KeyInput( rKEvt );
596 	}
597 	else if ( !pEdView->PostKeyEvent( rKEvt ) )
598 	{
599 		Control::KeyInput( rKEvt );
600 	}
601 }
602 
603 // -----------------------------------------------------------------------
604 
605 void ScEditWindow::Command( const CommandEvent& rCEvt )
606 {
607 	pEdView->Command( rCEvt );
608 }
609 
610 // -----------------------------------------------------------------------
611 
612 void __EXPORT ScEditWindow::GetFocus()
613 {
614 	pActiveEdWnd = this;
615 
616     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > xTemp = xAcc;
617     if (xTemp.is() && pAcc)
618     {
619         pAcc->GotFocus();
620     }
621     else
622         pAcc = NULL;
623 }
624 
625 void __EXPORT ScEditWindow::LoseFocus()
626 {
627     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > xTemp = xAcc;
628     if (xTemp.is() && pAcc)
629     {
630         pAcc->LostFocus();
631     }
632     else
633         pAcc = NULL;
634 }
635 
636 // -----------------------------------------------------------------------
637 
638 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > ScEditWindow::CreateAccessible()
639 {
640     String sName;
641     String sDescription(GetHelpText());
642     switch (eLocation)
643     {
644     case Left:
645         {
646             sName = String(ScResId(STR_ACC_LEFTAREA_NAME));
647 //            sDescription = String(ScResId(STR_ACC_LEFTAREA_DESCR));
648         }
649         break;
650     case Center:
651         {
652             sName = String(ScResId(STR_ACC_CENTERAREA_NAME));
653 //            sDescription = String(ScResId(STR_ACC_CENTERAREA_DESCR));
654         }
655         break;
656     case Right:
657         {
658             sName = String(ScResId(STR_ACC_RIGHTAREA_NAME));
659 //            sDescription = String(ScResId(STR_ACC_RIGHTAREA_DESCR));
660         }
661         break;
662     }
663     pAcc = new ScAccessibleEditObject(GetAccessibleParentWindow()->GetAccessible(), pEdView, this,
664         rtl::OUString(sName), rtl::OUString(sDescription), EditControl);
665     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > xAccessible = pAcc;
666     xAcc = xAccessible;
667     return pAcc;
668 }
669 
670 /*
671 class ScExtIButton : public ImageButton
672 {
673 private:
674 
675 	Timer			aTimer;
676 	ScPopupMenu*	pPopupMenu;
677 
678 	DECL_LINK( TimerHdl, Timer*);
679 
680 	void			DrawArrow();
681 
682 protected:
683 
684 	virtual void	MouseButtonDown( const MouseEvent& rMEvt );
685 	virtual void	MouseButtonUp( const MouseEvent& rMEvt);
686 
687 	virtual void	StartPopup();
688 
689 public:
690 
691 	ScExtIButton(Window* pParent, const ResId& rResId );
692 
693 	void			SetPopupMenu(ScPopupMenu* pPopUp);
694 
695 	sal_uInt16			GetSelected();
696 
697 	void            SetMenuHdl( const Link& rLink ) { aFxLink = rLink; }
698 	const Link&     GetMenuHdl() const { return aFxLink; }
699 
700 }
701 */
702 ScExtIButton::ScExtIButton(Window* pParent, const ResId& rResId )
703 :	ImageButton(pParent,rResId),
704 	pPopupMenu(NULL)
705 {
706 	nSelected=0;
707 	aTimer.SetTimeout(600);
708 	SetDropDown( sal_True);
709 
710 //	DrawArrow();
711 }
712 
713 void ScExtIButton::SetPopupMenu(ScPopupMenu* pPopUp)
714 {
715 	pPopupMenu=pPopUp;
716 }
717 
718 sal_uInt16 ScExtIButton::GetSelected()
719 {
720 	return nSelected;
721 }
722 
723 void ScExtIButton::MouseButtonDown( const MouseEvent& rMEvt )
724 {
725 	if(!aTimer.IsActive())
726 	{
727 		aTimer.Start();
728 		aTimer.SetTimeoutHdl(LINK( this, ScExtIButton, TimerHdl));
729 	}
730 
731 	ImageButton::MouseButtonDown(rMEvt );
732 }
733 void ScExtIButton::MouseButtonUp( const MouseEvent& rMEvt)
734 {
735 	aTimer.Stop();
736 	aTimer.SetTimeoutHdl(Link());
737 	ImageButton::MouseButtonUp(rMEvt );
738 }
739 
740 void ScExtIButton::Click()
741 {
742 	aTimer.Stop();
743 	aTimer.SetTimeoutHdl(Link());
744 	ImageButton::Click();
745 }
746 
747 void ScExtIButton::StartPopup()
748 {
749 	nSelected=0;
750 
751 	if(pPopupMenu!=NULL)
752 	{
753 		SetPressed( sal_True );
754 		EndSelection();
755 		Point aPoint(0,0);
756 		aPoint.Y()=GetOutputSizePixel().Height();
757 
758 		nSelected=pPopupMenu->Execute( this, aPoint );
759 
760 		if(nSelected)
761 		{
762 			aMLink.Call(this);
763 		}
764 		SetPressed( sal_False);
765 	}
766 }
767 
768 long ScExtIButton::PreNotify( NotifyEvent& rNEvt )
769 {
770 	sal_uInt16 nSwitch=rNEvt.GetType();
771 	if(nSwitch==EVENT_MOUSEBUTTONUP)
772 	{
773 		MouseButtonUp(*rNEvt.GetMouseEvent());
774 	}
775 
776 	return ImageButton::PreNotify(rNEvt );
777 }
778 
779 IMPL_LINK( ScExtIButton, TimerHdl, Timer*, EMPTYARG )
780 {
781 	StartPopup();
782 	return 0;
783 }
784 
785 /*
786 static void ImplDrawToolArrow( ToolBox* pBox, long nX, long nY, sal_Bool bBlack,
787 							   sal_Bool bLeft = sal_False, sal_Bool bTop = sal_False )
788 {
789 	Color			aOldFillColor = pBox->GetFillColor();
790 	WindowAlign 	eAlign = pBox->meAlign;
791 	if ( bLeft )
792 		eAlign = WINDOWALIGN_RIGHT;
793 	else if ( bTop )
794 		eAlign = WINDOWALIGN_BOTTOM;
795 
796 	switch ( eAlign )
797 	{
798 		case WINDOWALIGN_LEFT:
799 			if ( bBlack )
800 				pBox->SetFillColor( Color( COL_BLACK ) );
801 			pBox->DrawRect( Rectangle( nX+0, nY+0, nX+0, nY+6 ) );
802 			pBox->DrawRect( Rectangle( nX+1, nY+1, nX+1, nY+5 ) );
803 			pBox->DrawRect( Rectangle( nX+2, nY+2, nX+2, nY+4 ) );
804 			pBox->DrawRect( Rectangle( nX+3, nY+3, nX+3, nY+3 ) );
805 			if ( bBlack )
806 			{
807 				pBox->SetFillColor( aOldFillColor );
808 				pBox->DrawRect( Rectangle( nX+1, nY+2, nX+1, nY+4 ) );
809 				pBox->DrawRect( Rectangle( nX+2, nY+3, nX+2, nY+3 ) );
810 			}
811 			break;
812 		case WINDOWALIGN_TOP:
813 			if ( bBlack )
814 				pBox->SetFillColor( Color( COL_BLACK ) );
815 			pBox->DrawRect( Rectangle( nX+0, nY+0, nX+6, nY+0 ) );
816 			pBox->DrawRect( Rectangle( nX+1, nY+1, nX+5, nY+1 ) );
817 			pBox->DrawRect( Rectangle( nX+2, nY+2, nX+4, nY+2 ) );
818 			pBox->DrawRect( Rectangle( nX+3, nY+3, nX+3, nY+3 ) );
819 			if ( bBlack )
820 			{
821 				pBox->SetFillColor( aOldFillColor );
822 				pBox->DrawRect( Rectangle( nX+2, nY+1, nX+4, nY+1 ) );
823 				pBox->DrawRect( Rectangle( nX+3, nY+2, nX+3, nY+2 ) );
824 			}
825 			break;
826 		case WINDOWALIGN_RIGHT:
827 			if ( bBlack )
828 				pBox->SetFillColor( Color( COL_BLACK ) );
829 			pBox->DrawRect( Rectangle( nX+3, nY+0, nX+3, nY+6 ) );
830 			pBox->DrawRect( Rectangle( nX+2, nY+1, nX+2, nY+5 ) );
831 			pBox->DrawRect( Rectangle( nX+1, nY+2, nX+1, nY+4 ) );
832 			pBox->DrawRect( Rectangle( nX+0, nY+3, nX+0, nY+3 ) );
833 			if ( bBlack )
834 			{
835 				pBox->SetFillColor( aOldFillColor );
836 				pBox->DrawRect( Rectangle( nX+2, nY+2, nX+2, nY+4 ) );
837 				pBox->DrawRect( Rectangle( nX+1, nY+3, nX+1, nY+3 ) );
838 			}
839 			break;
840 		case WINDOWALIGN_BOTTOM:
841 			if ( bBlack )
842 				pBox->SetFillColor( Color( COL_BLACK ) );
843 			pBox->DrawRect( Rectangle( nX+0, nY+3, nX+6, nY+3 ) );
844 			pBox->DrawRect( Rectangle( nX+1, nY+2, nX+5, nY+2 ) );
845 			pBox->DrawRect( Rectangle( nX+2, nY+1, nX+4, nY+1 ) );
846 			pBox->DrawRect( Rectangle( nX+3, nY+0, nX+3, nY+0 ) );
847 			if ( bBlack )
848 			{
849 				pBox->SetFillColor( aOldFillColor );
850 				pBox->DrawRect( Rectangle( nX+2, nY+2, nX+4, nY+2 ) );
851 				pBox->DrawRect( Rectangle( nX+3, nY+1, nX+3, nY+1 ) );
852 			}
853 			break;
854 	}
855 }
856 Down
857 	- Timer starten
858 
859 Click
860 	- Timer abbrechen
861 
862 Timer
863 	if ( ??? )
864 	{
865 	- SetPressed( sal_True );
866 	- EndSelection();
867 	- Menu anzeigen
868 	- SetPressed( sal_False );
869 	}
870 
871 
872 */
873 
874 
875