Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <vcl/builder.hxx>
21 : #include <vcl/svapp.hxx>
22 : #include <vcl/scrbar.hxx>
23 :
24 : #include "formula/funcutl.hxx"
25 : #include "formula/IControlReferenceHandler.hxx"
26 : #include "ControlHelper.hxx"
27 : #include "ModuleHelper.hxx"
28 : #include "ForResId.hrc"
29 : #include "com/sun/star/accessibility/AccessibleRole.hpp"
30 :
31 :
32 : namespace formula
33 : {
34 :
35 : // class ValWnd
36 0 : ValWnd::ValWnd( Window* pParent, const ResId& rId ) : Window( pParent, rId )
37 : {
38 0 : Font aFnt( GetFont() );
39 0 : aFnt.SetTransparent( true );
40 0 : aFnt.SetWeight( WEIGHT_LIGHT );
41 0 : if ( pParent->IsBackground() )
42 : {
43 0 : Wallpaper aBack = pParent->GetBackground();
44 0 : SetFillColor( aBack.GetColor() );
45 0 : SetBackground( aBack );
46 0 : aFnt.SetFillColor( aBack.GetColor() );
47 : }
48 : else
49 : {
50 0 : SetFillColor();
51 0 : SetBackground();
52 : }
53 0 : SetFont( aFnt );
54 0 : SetLineColor();
55 :
56 0 : Size aSzWnd = GetOutputSizePixel();
57 0 : long nHeight = GetTextHeight();
58 0 : long nDiff = aSzWnd.Height()-nHeight;
59 :
60 : aRectOut = Rectangle( Point( 1, ( nDiff<2 ) ? 1 : nDiff/2),
61 0 : Size ( aSzWnd.Width()-2, nHeight ) );
62 0 : SetClipRegion( Region( aRectOut ) );
63 0 : SetAccessibleRole( ::com::sun::star::accessibility::AccessibleRole::LABEL );
64 0 : }
65 :
66 0 : void ValWnd::Paint( const Rectangle& )
67 : {
68 0 : DrawText( aRectOut.TopLeft(), aStrValue );
69 0 : }
70 :
71 0 : void ValWnd::SetValue( const OUString& rStrVal )
72 : {
73 0 : if ( aStrValue != rStrVal )
74 : {
75 0 : aStrValue = rStrVal;
76 0 : DrawRect( aRectOut ); // delete old text
77 0 : Paint( aRectOut ); // repaint
78 : }
79 0 : }
80 :
81 : // class ArgEdit
82 :
83 0 : ArgEdit::ArgEdit( Window* pParent, const ResId& rResId )
84 : : RefEdit( pParent, NULL, NULL, rResId ),
85 : pEdPrev ( NULL ),
86 : pEdNext ( NULL ),
87 : pSlider ( NULL ),
88 0 : nArgs ( 0 )
89 : {
90 0 : }
91 :
92 0 : void ArgEdit::Init( ArgEdit* pPrevEdit, ArgEdit* pNextEdit,
93 : ScrollBar& rArgSlider, sal_uInt16 nArgCount )
94 : {
95 0 : pEdPrev = pPrevEdit;
96 0 : pEdNext = pNextEdit;
97 0 : pSlider = &rArgSlider;
98 0 : nArgs = nArgCount;
99 0 : }
100 :
101 : // Cursor control for Edit Fields in Argument Dialog
102 0 : void ArgEdit::KeyInput( const KeyEvent& rKEvt )
103 : {
104 0 : KeyCode aCode = rKEvt.GetKeyCode();
105 0 : sal_Bool bUp = (aCode.GetCode() == KEY_UP);
106 0 : sal_Bool bDown = (aCode.GetCode() == KEY_DOWN);
107 :
108 0 : if ( pSlider
109 0 : && ( !aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
110 0 : && ( bUp || bDown ) )
111 : {
112 0 : if ( nArgs > 1 )
113 : {
114 0 : ArgEdit* pEd = NULL;
115 0 : long nThumb = pSlider->GetThumbPos();
116 0 : sal_Bool bDoScroll = sal_False;
117 0 : sal_Bool bChangeFocus = sal_False;
118 :
119 0 : if ( bDown )
120 : {
121 0 : if ( nArgs > 4 )
122 : {
123 0 : if ( !pEdNext )
124 : {
125 0 : nThumb++;
126 0 : bDoScroll = ( nThumb+3 < (long)nArgs );
127 : }
128 : else
129 : {
130 0 : pEd = pEdNext;
131 0 : bChangeFocus = sal_True;
132 : }
133 : }
134 0 : else if ( pEdNext )
135 : {
136 0 : pEd = pEdNext;
137 0 : bChangeFocus = sal_True;
138 : }
139 : }
140 : else // if ( bUp )
141 : {
142 0 : if ( nArgs > 4 )
143 : {
144 0 : if ( !pEdPrev )
145 : {
146 0 : nThumb--;
147 0 : bDoScroll = ( nThumb >= 0 );
148 : }
149 : else
150 : {
151 0 : pEd = pEdPrev;
152 0 : bChangeFocus = sal_True;
153 : }
154 : }
155 0 : else if ( pEdPrev )
156 : {
157 0 : pEd = pEdPrev;
158 0 : bChangeFocus = sal_True;
159 : }
160 : }
161 :
162 0 : if ( bDoScroll )
163 : {
164 0 : pSlider->SetThumbPos( nThumb );
165 0 : ((Link&)pSlider->GetEndScrollHdl()).Call( pSlider );
166 : }
167 0 : else if ( bChangeFocus )
168 : {
169 0 : pEd->GrabFocus();
170 : }
171 : }
172 : }
173 : else
174 0 : RefEdit::KeyInput( rKEvt );
175 0 : }
176 :
177 : // class ArgInput
178 0 : ArgInput::ArgInput()
179 : {
180 0 : pFtArg=NULL;
181 0 : pBtnFx=NULL;
182 0 : pEdArg=NULL;
183 0 : pRefBtn=NULL;
184 0 : }
185 :
186 0 : void ArgInput::InitArgInput( FixedText* pftArg, ImageButton* pbtnFx,
187 : ArgEdit* pedArg, RefButton* prefBtn)
188 : {
189 0 : pFtArg =pftArg;
190 0 : pBtnFx =pbtnFx;
191 0 : pEdArg =pedArg;
192 0 : pRefBtn=prefBtn;
193 :
194 0 : if(pBtnFx!=NULL)
195 : {
196 0 : pBtnFx->SetClickHdl ( LINK( this, ArgInput, FxBtnClickHdl ) );
197 0 : pBtnFx->SetGetFocusHdl( LINK( this, ArgInput, FxBtnFocusHdl ) );
198 : }
199 0 : if(pRefBtn!=NULL)
200 : {
201 0 : pRefBtn->SetClickHdl ( LINK( this, ArgInput, RefBtnClickHdl ) );
202 0 : pRefBtn->SetGetFocusHdl( LINK( this, ArgInput, RefBtnFocusHdl ) );
203 : }
204 0 : if(pEdArg!=NULL)
205 : {
206 0 : pEdArg->SetGetFocusHdl ( LINK( this, ArgInput, EdFocusHdl ) );
207 0 : pEdArg->SetModifyHdl ( LINK( this, ArgInput, EdModifyHdl ) );
208 : }
209 :
210 0 : }
211 :
212 : // Sets the Name for the Argument
213 0 : void ArgInput::SetArgName(const OUString &aArg)
214 : {
215 0 : if(pFtArg !=NULL) pFtArg->SetText(aArg );
216 0 : }
217 :
218 : // Returns the Name for the Argument
219 0 : OUString ArgInput::GetArgName()
220 : {
221 0 : OUString aPrivArgName;
222 0 : if(pFtArg !=NULL)
223 0 : aPrivArgName=pFtArg->GetText();
224 :
225 0 : return aPrivArgName;
226 : }
227 :
228 : //Sets the Name for the Argument
229 0 : void ArgInput::SetArgNameFont (const Font &aFont)
230 : {
231 0 : if(pFtArg !=NULL) pFtArg->SetFont(aFont);
232 0 : }
233 :
234 : //Sets up the Selection for the EditBox.
235 0 : void ArgInput::SetArgSelection (const Selection& rSel )
236 : {
237 0 : if(pEdArg !=NULL) pEdArg ->SetSelection(rSel );
238 0 : }
239 :
240 : //Sets the Value for the Argument
241 0 : void ArgInput::SetArgVal(const OUString &rVal)
242 : {
243 0 : if(pEdArg !=NULL)
244 : {
245 0 : pEdArg ->SetRefString(rVal);
246 : }
247 0 : }
248 :
249 : //Returns the Value for the Argument
250 0 : OUString ArgInput::GetArgVal()
251 : {
252 0 : OUString aResult;
253 0 : if(pEdArg!=NULL)
254 : {
255 0 : aResult=pEdArg->GetText();
256 : }
257 0 : return aResult;
258 : }
259 :
260 : //Hides the Controls
261 0 : void ArgInput::Hide()
262 : {
263 0 : if ( pFtArg && pBtnFx && pEdArg && pRefBtn)
264 : {
265 0 : pFtArg->Hide();
266 0 : pBtnFx->Hide();
267 0 : pEdArg->Hide();
268 0 : pRefBtn->Hide();
269 : }
270 0 : }
271 :
272 : //Casts the Controls again.
273 0 : void ArgInput::Show()
274 : {
275 0 : if ( pFtArg && pBtnFx && pEdArg && pRefBtn)
276 : {
277 0 : pFtArg->Show();
278 0 : pBtnFx->Show();
279 0 : pEdArg->Show();
280 0 : pRefBtn->Show();
281 : }
282 0 : }
283 :
284 0 : void ArgInput::UpdateAccessibleNames()
285 : {
286 0 : OUString aArgName(":");
287 0 : aArgName += pFtArg->GetText();
288 :
289 0 : OUString aName = pBtnFx->GetQuickHelpText();
290 0 : aName += aArgName;
291 0 : pBtnFx->SetAccessibleName(aName);
292 :
293 0 : aName = pRefBtn->GetQuickHelpText();
294 0 : aName += aArgName;
295 0 : pRefBtn->SetAccessibleName(aName);
296 0 : }
297 :
298 0 : void ArgInput::FxClick()
299 : {
300 0 : aFxClickLink.Call(this);
301 0 : }
302 :
303 0 : void ArgInput::RefClick()
304 : {
305 0 : aRefClickLink.Call(this);
306 0 : }
307 :
308 0 : void ArgInput::FxFocus()
309 : {
310 0 : aFxFocusLink.Call(this);
311 0 : }
312 :
313 0 : void ArgInput::RefFocus()
314 : {
315 0 : aRefFocusLink.Call(this);
316 0 : }
317 :
318 0 : void ArgInput::EdFocus()
319 : {
320 0 : aEdFocusLink.Call(this);
321 0 : }
322 :
323 0 : void ArgInput::EdModify()
324 : {
325 0 : aEdModifyLink.Call(this);
326 0 : }
327 :
328 0 : IMPL_LINK( ArgInput, FxBtnClickHdl, ImageButton*, pBtn )
329 : {
330 0 : if(pBtn == pBtnFx)
331 0 : FxClick();
332 :
333 0 : return 0;
334 : }
335 :
336 0 : IMPL_LINK( ArgInput, RefBtnClickHdl,RefButton*, pBtn )
337 : {
338 0 : if(pRefBtn == pBtn)
339 0 : RefClick();
340 :
341 0 : return 0;
342 : }
343 :
344 0 : IMPL_LINK( ArgInput, FxBtnFocusHdl, ImageButton*, pBtn )
345 : {
346 0 : if(pBtn == pBtnFx)
347 0 : FxFocus();
348 :
349 0 : return 0;
350 : }
351 :
352 0 : IMPL_LINK( ArgInput, RefBtnFocusHdl,RefButton*, pBtn )
353 : {
354 0 : if(pRefBtn == pBtn)
355 0 : RefFocus();
356 :
357 0 : return 0;
358 : }
359 :
360 0 : IMPL_LINK( ArgInput, EdFocusHdl, ArgEdit*, pEd )
361 : {
362 0 : if(pEd == pEdArg)
363 0 : EdFocus();
364 :
365 0 : return 0;
366 : }
367 :
368 0 : IMPL_LINK( ArgInput, EdModifyHdl,ArgEdit*, pEd )
369 : {
370 0 : if(pEd == pEdArg)
371 0 : EdModify();
372 :
373 0 : return 0;
374 : }
375 :
376 : // class EditBox
377 0 : EditBox::EditBox( Window* pParent, const ResId& rResId )
378 : :Control(pParent,rResId),
379 0 : bMouseFlag(sal_False)
380 : {
381 0 : WinBits nStyle=GetStyle();
382 0 : SetStyle( nStyle| WB_DIALOGCONTROL);
383 :
384 0 : pMEdit=new MultiLineEdit(this,WB_LEFT | WB_VSCROLL | (nStyle & WB_TABSTOP) |
385 0 : WB_NOBORDER | WB_NOHIDESELECTION | WB_IGNORETAB);
386 0 : pMEdit->Show();
387 0 : aOldSel=pMEdit->GetSelection();
388 0 : Resize();
389 0 : WinBits nWinStyle=GetStyle() | WB_DIALOGCONTROL;
390 0 : SetStyle(nWinStyle);
391 :
392 : // #105582# the HelpId from the resource must be set for the MultiLineEdit,
393 : // not for the control that contains it.
394 0 : pMEdit->SetHelpId( GetHelpId() );
395 0 : SetHelpId( "" );
396 0 : }
397 :
398 0 : EditBox::~EditBox()
399 : {
400 0 : MultiLineEdit* pTheEdit=pMEdit;
401 0 : pMEdit->Disable();
402 0 : pMEdit=NULL;
403 0 : delete pTheEdit;
404 0 : }
405 :
406 : // When the selection is changed this function will be called
407 0 : void EditBox::SelectionChanged()
408 : {
409 0 : aSelChangedLink.Call(this);
410 0 : }
411 :
412 : // When the size is changed, MultiLineEdit must be adapted..
413 0 : void EditBox::Resize()
414 : {
415 0 : Size aSize=GetOutputSizePixel();
416 0 : if(pMEdit!=NULL) pMEdit->SetOutputSizePixel(aSize);
417 0 : }
418 :
419 : // When the Control is activated, the Selection is repealed
420 : // and the Cursor set at the end.
421 0 : void EditBox::GetFocus()
422 : {
423 0 : if(pMEdit!=NULL)
424 : {
425 0 : pMEdit->GrabFocus();
426 : }
427 0 : }
428 :
429 : //When an Event is cleared, this Routine is
430 : //first called and a PostUserEvent is sent.
431 0 : bool EditBox::PreNotify( NotifyEvent& rNEvt )
432 : {
433 0 : bool nResult = true;
434 :
435 0 : if(pMEdit==NULL) return nResult;
436 :
437 0 : sal_uInt16 nSwitch=rNEvt.GetType();
438 0 : if(nSwitch==EVENT_KEYINPUT)// || nSwitch==EVENT_KEYUP)
439 : {
440 0 : const KeyCode& aKeyCode=rNEvt.GetKeyEvent()->GetKeyCode();
441 0 : sal_uInt16 nKey=aKeyCode.GetCode();
442 0 : if( (nKey==KEY_RETURN && !aKeyCode.IsShift()) || nKey==KEY_TAB )
443 : {
444 0 : nResult = GetParent()->Notify(rNEvt);
445 : }
446 : else
447 : {
448 0 : nResult=Control::PreNotify(rNEvt);
449 0 : Application::PostUserEvent( LINK( this, EditBox, ChangedHdl ) );
450 : }
451 :
452 : }
453 : else
454 : {
455 0 : nResult=Control::PreNotify(rNEvt);
456 :
457 0 : if(nSwitch==EVENT_MOUSEBUTTONDOWN || nSwitch==EVENT_MOUSEBUTTONUP)
458 : {
459 0 : bMouseFlag=sal_True;
460 0 : Application::PostUserEvent( LINK( this, EditBox, ChangedHdl ) );
461 : }
462 : }
463 0 : return nResult;
464 : }
465 :
466 : //When an Event cleared wurde, this routine is
467 : //first called.
468 0 : IMPL_LINK_NOARG(EditBox, ChangedHdl)
469 : {
470 0 : if(pMEdit!=NULL)
471 : {
472 0 : Selection aNewSel=pMEdit->GetSelection();
473 :
474 0 : if(aNewSel.Min()!=aOldSel.Min() || aNewSel.Max()!=aOldSel.Max())
475 : {
476 0 : SelectionChanged();
477 0 : aOldSel=aNewSel;
478 : }
479 : }
480 0 : return 0;
481 : }
482 :
483 0 : void EditBox::UpdateOldSel()
484 : {
485 : // if selection is set for editing a function, store it as aOldSel,
486 : // so SelectionChanged isn't called in the next ChangedHdl call
487 :
488 0 : if (pMEdit)
489 0 : aOldSel = pMEdit->GetSelection();
490 0 : }
491 :
492 : // class RefEdit
493 :
494 : #define SC_ENABLE_TIME 100
495 :
496 0 : RefEdit::RefEdit( Window* _pParent,IControlReferenceHandler* pParent,
497 : Window* pShrinkModeLabel, const ResId& rResId )
498 : : Edit( _pParent, rResId )
499 : , pAnyRefDlg( pParent )
500 0 : , pLabelWidget(pShrinkModeLabel)
501 : {
502 0 : aTimer.SetTimeoutHdl( LINK( this, RefEdit, UpdateHdl ) );
503 0 : aTimer.SetTimeout( SC_ENABLE_TIME );
504 0 : }
505 :
506 0 : RefEdit::RefEdit( Window* _pParent, Window* pShrinkModeLabel, WinBits nStyle )
507 : : Edit( _pParent, nStyle )
508 : , pAnyRefDlg( NULL )
509 0 : , pLabelWidget(pShrinkModeLabel)
510 : {
511 0 : aTimer.SetTimeoutHdl( LINK( this, RefEdit, UpdateHdl ) );
512 0 : aTimer.SetTimeout( SC_ENABLE_TIME );
513 0 : }
514 :
515 0 : extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeRefEdit(Window *pParent, VclBuilder::stringmap &)
516 : {
517 0 : return new RefEdit(pParent, NULL, WB_BORDER);
518 : }
519 :
520 0 : RefEdit::~RefEdit()
521 : {
522 0 : aTimer.SetTimeoutHdl( Link() );
523 0 : aTimer.Stop();
524 0 : }
525 :
526 0 : void RefEdit::SetRefString( const OUString& rStr )
527 : {
528 0 : Edit::SetText( rStr );
529 0 : }
530 :
531 0 : void RefEdit::SetRefValid(bool bValid)
532 : {
533 0 : if (bValid)
534 : {
535 0 : SetControlForeground();
536 0 : SetControlBackground();
537 : }
538 : else
539 : {
540 0 : SetControlForeground(COL_WHITE);
541 0 : SetControlBackground(0xff6563);
542 : }
543 0 : }
544 :
545 0 : void RefEdit::SetText(const OUString& rStr)
546 : {
547 0 : Edit::SetText( rStr );
548 0 : UpdateHdl( &aTimer );
549 0 : }
550 :
551 0 : void RefEdit::StartUpdateData()
552 : {
553 0 : aTimer.Start();
554 0 : }
555 :
556 0 : void RefEdit::SetReferences( IControlReferenceHandler* pDlg, Window* pLabel )
557 : {
558 0 : pAnyRefDlg = pDlg;
559 0 : pLabelWidget = pLabel;
560 :
561 0 : if( pDlg )
562 : {
563 0 : aTimer.SetTimeoutHdl( LINK( this, RefEdit, UpdateHdl ) );
564 0 : aTimer.SetTimeout( SC_ENABLE_TIME );
565 : }
566 : else
567 : {
568 0 : aTimer.SetTimeoutHdl( Link() );
569 0 : aTimer.Stop();
570 : }
571 0 : }
572 :
573 0 : void RefEdit::Modify()
574 : {
575 0 : Edit::Modify();
576 0 : if( pAnyRefDlg )
577 0 : pAnyRefDlg->HideReference();
578 0 : }
579 :
580 0 : void RefEdit::KeyInput( const KeyEvent& rKEvt )
581 : {
582 0 : const KeyCode& rKeyCode = rKEvt.GetKeyCode();
583 0 : if( pAnyRefDlg && !rKeyCode.GetModifier() && (rKeyCode.GetCode() == KEY_F2) )
584 0 : pAnyRefDlg->ReleaseFocus( this );
585 : else
586 0 : Edit::KeyInput( rKEvt );
587 0 : }
588 :
589 0 : void RefEdit::GetFocus()
590 : {
591 0 : Edit::GetFocus();
592 0 : StartUpdateData();
593 0 : }
594 :
595 0 : void RefEdit::LoseFocus()
596 : {
597 0 : Edit::LoseFocus();
598 0 : if( pAnyRefDlg )
599 0 : pAnyRefDlg->HideReference();
600 0 : }
601 :
602 0 : IMPL_LINK_NOARG(RefEdit, UpdateHdl)
603 : {
604 0 : if( pAnyRefDlg )
605 0 : pAnyRefDlg->ShowReference( GetText() );
606 0 : return 0;
607 : }
608 :
609 : //class RefButton
610 :
611 0 : RefButton::RefButton( Window* _pParent, const ResId& rResId) :
612 : ImageButton( _pParent, rResId ),
613 : aImgRefStart( ModuleRes( RID_BMP_REFBTN1 ) ),
614 : aImgRefDone( ModuleRes( RID_BMP_REFBTN2 ) ),
615 : aShrinkQuickHelp( ModuleRes( RID_STR_SHRINK ).toString() ),
616 : aExpandQuickHelp( ModuleRes( RID_STR_EXPAND ).toString() ),
617 : pAnyRefDlg( NULL ),
618 0 : pRefEdit( NULL )
619 : {
620 0 : SetStartImage();
621 0 : }
622 :
623 0 : RefButton::RefButton( Window* _pParent, WinBits nStyle ) :
624 : ImageButton( _pParent, nStyle ),
625 : aImgRefStart( ModuleRes( RID_BMP_REFBTN1 ) ),
626 : aImgRefDone( ModuleRes( RID_BMP_REFBTN2 ) ),
627 : aShrinkQuickHelp( ModuleRes( RID_STR_SHRINK ).toString() ),
628 : aExpandQuickHelp( ModuleRes( RID_STR_EXPAND ).toString() ),
629 : pAnyRefDlg( NULL ),
630 0 : pRefEdit( NULL )
631 : {
632 0 : SetStartImage();
633 0 : }
634 :
635 0 : extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeRefButton(Window *pParent, VclBuilder::stringmap &)
636 : {
637 0 : return new RefButton(pParent, 0);
638 : }
639 :
640 0 : RefButton::RefButton( Window* _pParent, const ResId& rResId, RefEdit* pEdit, IControlReferenceHandler* _pDlg ) :
641 : ImageButton( _pParent, rResId ),
642 : aImgRefStart( ModuleRes( RID_BMP_REFBTN1 ) ),
643 : aImgRefDone( ModuleRes( RID_BMP_REFBTN2 ) ),
644 : aShrinkQuickHelp( ModuleRes( RID_STR_SHRINK ).toString() ),
645 : aExpandQuickHelp( ModuleRes( RID_STR_EXPAND ).toString() ),
646 : pAnyRefDlg( _pDlg ),
647 0 : pRefEdit( pEdit )
648 : {
649 0 : SetStartImage();
650 0 : }
651 :
652 0 : void RefButton::SetStartImage()
653 : {
654 0 : SetModeImage( aImgRefStart );
655 0 : SetQuickHelpText( aShrinkQuickHelp );
656 0 : }
657 :
658 0 : void RefButton::SetEndImage()
659 : {
660 0 : SetModeImage( aImgRefDone );
661 0 : SetQuickHelpText( aExpandQuickHelp );
662 0 : }
663 :
664 0 : void RefButton::SetReferences( IControlReferenceHandler* pDlg, RefEdit* pEdit )
665 : {
666 0 : pAnyRefDlg = pDlg;
667 0 : pRefEdit = pEdit;
668 0 : }
669 :
670 0 : void RefButton::Click()
671 : {
672 0 : if( pAnyRefDlg )
673 0 : pAnyRefDlg->ToggleCollapsed( pRefEdit, this );
674 0 : }
675 :
676 0 : void RefButton::KeyInput( const KeyEvent& rKEvt )
677 : {
678 0 : const KeyCode& rKeyCode = rKEvt.GetKeyCode();
679 0 : if( pAnyRefDlg && !rKeyCode.GetModifier() && (rKeyCode.GetCode() == KEY_F2) )
680 0 : pAnyRefDlg->ReleaseFocus( pRefEdit );
681 : else
682 0 : ImageButton::KeyInput( rKEvt );
683 0 : }
684 :
685 0 : void RefButton::GetFocus()
686 : {
687 0 : ImageButton::GetFocus();
688 0 : if( pRefEdit )
689 0 : pRefEdit->StartUpdateData();
690 0 : }
691 :
692 0 : void RefButton::LoseFocus()
693 : {
694 0 : ImageButton::LoseFocus();
695 0 : if( pRefEdit )
696 0 : pRefEdit->Modify();
697 0 : }
698 :
699 : } // formula
700 :
701 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|