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