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/svapp.hxx>
21 : #include <vcl/scrbar.hxx>
22 :
23 : #include "formula/funcutl.hxx"
24 : #include "formula/IControlReferenceHandler.hxx"
25 : #include "ControlHelper.hxx"
26 : #include "ModuleHelper.hxx"
27 : #include "ForResId.hrc"
28 :
29 :
30 : namespace formula
31 : {
32 : //============================================================================
33 : // class ValWnd
34 : //----------------------------------------------------------------------------
35 :
36 0 : ValWnd::ValWnd( Window* pParent, const ResId& rId ) : Window( pParent, rId )
37 : {
38 0 : Font aFnt( GetFont() );
39 0 : aFnt.SetTransparent( sal_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 : }
64 :
65 : //----------------------------------------------------------------------------
66 :
67 0 : void ValWnd::Paint( const Rectangle& )
68 : {
69 0 : DrawText( aRectOut.TopLeft(), aStrValue );
70 0 : }
71 :
72 : //----------------------------------------------------------------------------
73 :
74 0 : void ValWnd::SetValue( const String& rStrVal )
75 : {
76 0 : if ( aStrValue != rStrVal )
77 : {
78 0 : aStrValue = rStrVal;
79 0 : DrawRect( aRectOut ); // alten Text loeschen
80 0 : Paint( aRectOut ); // and neu malen
81 : }
82 0 : }
83 :
84 : //============================================================================
85 : // class ArgEdit
86 : //----------------------------------------------------------------------------
87 :
88 0 : ArgEdit::ArgEdit( Window* pParent, const ResId& rResId )
89 : : RefEdit( pParent, NULL, rResId ),
90 : pEdPrev ( NULL ),
91 : pEdNext ( NULL ),
92 : pSlider ( NULL ),
93 0 : nArgs ( 0 )
94 : {
95 0 : }
96 :
97 : //----------------------------------------------------------------------------
98 :
99 0 : void ArgEdit::Init( ArgEdit* pPrevEdit, ArgEdit* pNextEdit,
100 : ScrollBar& rArgSlider, sal_uInt16 nArgCount )
101 : {
102 0 : pEdPrev = pPrevEdit;
103 0 : pEdNext = pNextEdit;
104 0 : pSlider = &rArgSlider;
105 0 : nArgs = nArgCount;
106 0 : }
107 :
108 : //----------------------------------------------------------------------------
109 :
110 : // Cursor control for Edit Fields in Argument Dialog
111 :
112 0 : void ArgEdit::KeyInput( const KeyEvent& rKEvt )
113 : {
114 0 : KeyCode aCode = rKEvt.GetKeyCode();
115 0 : sal_Bool bUp = (aCode.GetCode() == KEY_UP);
116 0 : sal_Bool bDown = (aCode.GetCode() == KEY_DOWN);
117 :
118 0 : if ( pSlider
119 0 : && ( !aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
120 : && ( bUp || bDown ) )
121 : {
122 0 : if ( nArgs > 1 )
123 : {
124 0 : ArgEdit* pEd = NULL;
125 0 : long nThumb = pSlider->GetThumbPos();
126 0 : sal_Bool bDoScroll = sal_False;
127 0 : sal_Bool bChangeFocus = sal_False;
128 :
129 0 : if ( bDown )
130 : {
131 0 : if ( nArgs > 4 )
132 : {
133 0 : if ( !pEdNext )
134 : {
135 0 : nThumb++;
136 0 : bDoScroll = ( nThumb+3 < (long)nArgs );
137 : }
138 : else
139 : {
140 0 : pEd = pEdNext;
141 0 : bChangeFocus = sal_True;
142 : }
143 : }
144 0 : else if ( pEdNext )
145 : {
146 0 : pEd = pEdNext;
147 0 : bChangeFocus = sal_True;
148 : }
149 : }
150 : else // if ( bUp )
151 : {
152 0 : if ( nArgs > 4 )
153 : {
154 0 : if ( !pEdPrev )
155 : {
156 0 : nThumb--;
157 0 : bDoScroll = ( nThumb >= 0 );
158 : }
159 : else
160 : {
161 0 : pEd = pEdPrev;
162 0 : bChangeFocus = sal_True;
163 : }
164 : }
165 0 : else if ( pEdPrev )
166 : {
167 0 : pEd = pEdPrev;
168 0 : bChangeFocus = sal_True;
169 : }
170 : }
171 :
172 0 : if ( bDoScroll )
173 : {
174 0 : pSlider->SetThumbPos( nThumb );
175 0 : ((Link&)pSlider->GetEndScrollHdl()).Call( pSlider );
176 : }
177 0 : else if ( bChangeFocus )
178 : {
179 0 : pEd->GrabFocus();
180 : }
181 : }
182 : }
183 : else
184 0 : RefEdit::KeyInput( rKEvt );
185 0 : }
186 :
187 :
188 :
189 :
190 : /*************************************************************************
191 : #* Member: ArgInput Date:13.01.97
192 : #*------------------------------------------------------------------------
193 : #*
194 : #* Class: ArgInput
195 : #*
196 : #* Function: ArgInput class constructor
197 : #*
198 : #* Input: ---
199 : #*
200 : #* Output: ---
201 : #*
202 : #************************************************************************/
203 :
204 0 : ArgInput::ArgInput()
205 : {
206 0 : pFtArg=NULL;
207 0 : pBtnFx=NULL;
208 0 : pEdArg=NULL;
209 0 : pRefBtn=NULL;
210 0 : }
211 :
212 : /*************************************************************************
213 : #* Member: InitArgInput Date:13.01.97
214 : #*------------------------------------------------------------------------
215 : #*
216 : #* Class: ArgInput
217 : #*
218 : #* Function: Initializes the class' Pointer
219 : #*
220 : #* Input: ---
221 : #*
222 : #* Output: ---
223 : #*
224 : #************************************************************************/
225 :
226 0 : void ArgInput::InitArgInput(FixedText* pftArg,
227 : ImageButton* pbtnFx,
228 : ArgEdit* pedArg,
229 : RefButton* prefBtn)
230 : {
231 0 : pFtArg =pftArg;
232 0 : pBtnFx =pbtnFx;
233 0 : pEdArg =pedArg;
234 0 : pRefBtn=prefBtn;
235 :
236 0 : if(pBtnFx!=NULL)
237 : {
238 0 : pBtnFx->SetClickHdl ( LINK( this, ArgInput, FxBtnClickHdl ) );
239 0 : pBtnFx->SetGetFocusHdl( LINK( this, ArgInput, FxBtnFocusHdl ) );
240 : }
241 0 : if(pRefBtn!=NULL)
242 : {
243 0 : pRefBtn->SetClickHdl ( LINK( this, ArgInput, RefBtnClickHdl ) );
244 0 : pRefBtn->SetGetFocusHdl( LINK( this, ArgInput, RefBtnFocusHdl ) );
245 : }
246 0 : if(pEdArg!=NULL)
247 : {
248 0 : pEdArg->SetGetFocusHdl ( LINK( this, ArgInput, EdFocusHdl ) );
249 0 : pEdArg->SetModifyHdl ( LINK( this, ArgInput, EdModifyHdl ) );
250 : }
251 :
252 0 : }
253 :
254 : /*************************************************************************
255 : #* Member: SetArgName Date:13.01.97
256 : #*------------------------------------------------------------------------
257 : #*
258 : #* Class: ArgInput
259 : #*
260 : #* Function: Sets the Name for the Argument
261 : #*
262 : #* Input: String
263 : #*
264 : #* Output: ---
265 : #*
266 : #************************************************************************/
267 0 : void ArgInput::SetArgName(const String &aArg)
268 : {
269 0 : if(pFtArg !=NULL) pFtArg->SetText(aArg );
270 0 : }
271 :
272 : /*************************************************************************
273 : #* Member: GetArgName Date:06.02.97
274 : #*------------------------------------------------------------------------
275 : #*
276 : #* Class: ArgInput
277 : #*
278 : #* Function: Returns the Name for the Argument
279 : #*
280 : #* Input: String
281 : #*
282 : #* Output: ---
283 : #*
284 : #************************************************************************/
285 0 : String ArgInput::GetArgName()
286 : {
287 0 : String aPrivArgName;
288 0 : if(pFtArg !=NULL)
289 0 : aPrivArgName=pFtArg->GetText();
290 :
291 0 : return aPrivArgName;
292 : }
293 :
294 : /*************************************************************************
295 : #* Member: SetArgName Date:13.01.97
296 : #*------------------------------------------------------------------------
297 : #*
298 : #* Class: ArgInput
299 : #*
300 : #* Function: Sets the Name for the Argument
301 : #*
302 : #* Input: String
303 : #*
304 : #* Output: ---
305 : #*
306 : #************************************************************************/
307 0 : void ArgInput::SetArgNameFont (const Font &aFont)
308 : {
309 0 : if(pFtArg !=NULL) pFtArg->SetFont(aFont);
310 0 : }
311 :
312 : /*************************************************************************
313 : #* Member: SetArgSelection Date:13.01.97
314 : #*------------------------------------------------------------------------
315 : #*
316 : #* Class: ArgInput
317 : #*
318 : #* Function: Sets up the Selection for the EditBox.
319 : #*
320 : #* Input: String
321 : #*
322 : #* Output: ---
323 : #*
324 : #************************************************************************/
325 0 : void ArgInput::SetArgSelection (const Selection& rSel )
326 : {
327 0 : if(pEdArg !=NULL) pEdArg ->SetSelection(rSel );
328 0 : }
329 :
330 :
331 : /*************************************************************************
332 : #* Member: SetArgVal Date:13.01.97
333 : #*------------------------------------------------------------------------
334 : #*
335 : #* Class: ArgInput
336 : #*
337 : #* Function: Sets the Value for the Argument
338 : #*
339 : #* Input: String
340 : #*
341 : #* Output: ---
342 : #*
343 : #************************************************************************/
344 0 : void ArgInput::SetArgVal(const String &aVal)
345 : {
346 0 : if(pEdArg !=NULL)
347 : {
348 0 : pEdArg ->SetRefString(aVal );
349 : }
350 0 : }
351 :
352 : /*************************************************************************
353 : #* Member: SetArgName Date:13.01.97
354 : #*------------------------------------------------------------------------
355 : #*
356 : #* Class: ArgInput
357 : #*
358 : #* Function: Returns the Value for the Argument
359 : #*
360 : #* Input: ---
361 : #*
362 : #* Output: String
363 : #*
364 : #************************************************************************/
365 0 : String ArgInput::GetArgVal()
366 : {
367 0 : String aResult;
368 0 : if(pEdArg!=NULL)
369 : {
370 0 : aResult=pEdArg->GetText();
371 : }
372 0 : return aResult;
373 : }
374 :
375 : /*************************************************************************
376 : #* Member: SetArgName Date:13.01.97
377 : #*------------------------------------------------------------------------
378 : #*
379 : #* Class: ArgInput
380 : #*
381 : #* Function: Hides the Controls
382 : #*
383 : #* Input: ---
384 : #*
385 : #* Output: ---
386 : #*
387 : #************************************************************************/
388 0 : void ArgInput::Hide()
389 : {
390 0 : if ( pFtArg && pBtnFx && pEdArg && pRefBtn)
391 : {
392 0 : pFtArg->Hide();
393 0 : pBtnFx->Hide();
394 0 : pEdArg->Hide();
395 0 : pRefBtn->Hide();
396 : }
397 0 : }
398 :
399 : /*************************************************************************
400 : #* Member: SetArgName Date:13.01.97
401 : #*------------------------------------------------------------------------
402 : #*
403 : #* Class: ArgInput
404 : #*
405 : #* Function: Casts the Controls again.
406 : #*
407 : #* Input: ---
408 : #*
409 : #* Output: ---
410 : #*
411 : #************************************************************************/
412 0 : void ArgInput::Show()
413 : {
414 0 : if ( pFtArg && pBtnFx && pEdArg && pRefBtn)
415 : {
416 0 : pFtArg->Show();
417 0 : pBtnFx->Show();
418 0 : pEdArg->Show();
419 0 : pRefBtn->Show();
420 : }
421 0 : }
422 :
423 : /*************************************************************************
424 : #* Member: FxClick Date:13.01.97
425 : #*------------------------------------------------------------------------
426 : #*
427 : #* Class: ArgInput
428 : #*
429 : #* Function: Forwards the Event.
430 : #*
431 : #* Input: ---
432 : #*
433 : #* Output: ---
434 : #*
435 : #************************************************************************/
436 0 : void ArgInput::FxClick()
437 : {
438 0 : aFxClickLink.Call(this);
439 0 : }
440 :
441 : /*************************************************************************
442 : #* Member: RefClick Date:13.01.97
443 : #*------------------------------------------------------------------------
444 : #*
445 : #* Class: ArgInput
446 : #*
447 : #* Function: Forwards the Event.
448 : #*
449 : #* Input: ---
450 : #*
451 : #* Output: ---
452 : #*
453 : #************************************************************************/
454 0 : void ArgInput::RefClick()
455 : {
456 0 : aRefClickLink.Call(this);
457 0 : }
458 :
459 : /*************************************************************************
460 : #* Member: FxFocus Date:13.01.97
461 : #*------------------------------------------------------------------------
462 : #*
463 : #* Class: ArgInput
464 : #*
465 : #* Function: Forwards the Event.
466 : #*
467 : #* Input: ---
468 : #*
469 : #* Output: ---
470 : #*
471 : #************************************************************************/
472 0 : void ArgInput::FxFocus()
473 : {
474 0 : aFxFocusLink.Call(this);
475 0 : }
476 :
477 : /*************************************************************************
478 : #* Member: RefFocus Date:13.01.97
479 : #*------------------------------------------------------------------------
480 : #*
481 : #* Class: ArgInput
482 : #*
483 : #* Function: Forwards the Event.
484 : #*
485 : #* Input: ---
486 : #*
487 : #* Output: ---
488 : #*
489 : #************************************************************************/
490 0 : void ArgInput::RefFocus()
491 : {
492 0 : aRefFocusLink.Call(this);
493 0 : }
494 :
495 : /*************************************************************************
496 : #* Member: EdFocus Date:13.01.97
497 : #*------------------------------------------------------------------------
498 : #*
499 : #* Class: ArgInput
500 : #*
501 : #* Function: Forwards the Event.
502 : #*
503 : #* Input: ---
504 : #*
505 : #* Output: ---
506 : #*
507 : #************************************************************************/
508 0 : void ArgInput::EdFocus()
509 : {
510 0 : aEdFocusLink.Call(this);
511 0 : }
512 :
513 : /*************************************************************************
514 : #* Member: EdModify Date:13.01.97
515 : #*------------------------------------------------------------------------
516 : #*
517 : #* Class: ArgInput
518 : #*
519 : #* Function: Forwards the Event.
520 : #*
521 : #* Input: ---
522 : #*
523 : #* Output: ---
524 : #*
525 : #************************************************************************/
526 0 : void ArgInput::EdModify()
527 : {
528 0 : aEdModifyLink.Call(this);
529 0 : }
530 :
531 : /*************************************************************************
532 : #* Handle: FxBtnHdl Date:13.01.97
533 : #*------------------------------------------------------------------------
534 : #*
535 : #* Class: ArgInput
536 : #*
537 : #* Function: Handle for Fx-Button Click-Event.
538 : #*
539 : #* Input: ---
540 : #*
541 : #* Output: ---
542 : #*
543 : #************************************************************************/
544 0 : IMPL_LINK( ArgInput, FxBtnClickHdl, ImageButton*, pBtn )
545 : {
546 0 : if(pBtn==pBtnFx) FxClick();
547 :
548 0 : return 0;
549 : }
550 :
551 : /*************************************************************************
552 : #* Handle: RefBtnClickHdl Date:13.01.97
553 : #*------------------------------------------------------------------------
554 : #*
555 : #* Class: ArgInput
556 : #*
557 : #* Function: Handle for Fx-Button Click-Event.
558 : #*
559 : #* Input: ---
560 : #*
561 : #* Output: ---
562 : #*
563 : #************************************************************************/
564 0 : IMPL_LINK( ArgInput, RefBtnClickHdl,RefButton*, pBtn )
565 : {
566 0 : if(pRefBtn==pBtn) RefClick();
567 :
568 0 : return 0;
569 : }
570 :
571 : /*************************************************************************
572 : #* Handle: FxBtnFocusHdl Date:13.01.97
573 : #*------------------------------------------------------------------------
574 : #*
575 : #* Class: ArgInput
576 : #*
577 : #* Function: Handle for Fx-Button Focus-Event.
578 : #*
579 : #* Input: ---
580 : #*
581 : #* Output: ---
582 : #*
583 : #************************************************************************/
584 0 : IMPL_LINK( ArgInput, FxBtnFocusHdl, ImageButton*, pBtn )
585 : {
586 0 : if(pBtn==pBtnFx) FxFocus();
587 :
588 0 : return 0;
589 : }
590 :
591 : /*************************************************************************
592 : #* Handle: RefBtnFocusHdl Date:13.01.97
593 : #*------------------------------------------------------------------------
594 : #*
595 : #* Class: ArgInput
596 : #*
597 : #* Function: Handle for Fx-Button Focus-Event.
598 : #*
599 : #* Input: ---
600 : #*
601 : #* Output: ---
602 : #*
603 : #************************************************************************/
604 0 : IMPL_LINK( ArgInput, RefBtnFocusHdl,RefButton*, pBtn )
605 : {
606 0 : if(pRefBtn==pBtn) RefFocus();
607 :
608 0 : return 0;
609 : }
610 :
611 : /*************************************************************************
612 : #* Handle: EdFocusHdl Date:13.01.97
613 : #*------------------------------------------------------------------------
614 : #*
615 : #* Class: ArgInput
616 : #*
617 : #* Function: Handle for Fx-Button Focus-Event.
618 : #*
619 : #* Input: ---
620 : #*
621 : #* Output: ---
622 : #*
623 : #************************************************************************/
624 0 : IMPL_LINK( ArgInput, EdFocusHdl, ArgEdit*, pEd )
625 : {
626 0 : if(pEd==pEdArg) EdFocus();
627 :
628 0 : return 0;
629 : }
630 :
631 : /*************************************************************************
632 : #* Handle: RefBtnClickHdl Date:13.01.97
633 : #*------------------------------------------------------------------------
634 : #*
635 : #* Class: ArgInput
636 : #*
637 : #* Function: Handle for Fx-Button Focus-Event.
638 : #*
639 : #* Input: ---
640 : #*
641 : #* Output: ---
642 : #*
643 : #************************************************************************/
644 0 : IMPL_LINK( ArgInput, EdModifyHdl,ArgEdit*, pEd )
645 : {
646 0 : if(pEd==pEdArg) EdModify();
647 :
648 0 : return 0;
649 : }
650 :
651 : /*************************************************************************
652 : #* Member: EditBox Date:20.01.97
653 : #*------------------------------------------------------------------------
654 : #*
655 : #* Class: EditBox
656 : #*
657 : #* Function: Constructor from Class ArgInput
658 : #*
659 : #* Input: Parent, Resource
660 : #*
661 : #* Output: ---
662 : #*
663 : #************************************************************************/
664 0 : EditBox::EditBox( Window* pParent, const ResId& rResId )
665 : :Control(pParent,rResId),
666 0 : bMouseFlag(sal_False)
667 : {
668 0 : WinBits nStyle=GetStyle();
669 0 : SetStyle( nStyle| WB_DIALOGCONTROL);
670 :
671 : pMEdit=new MultiLineEdit(this,WB_LEFT | WB_VSCROLL | (nStyle & WB_TABSTOP) |
672 0 : WB_NOBORDER | WB_NOHIDESELECTION | WB_IGNORETAB);
673 0 : pMEdit->Show();
674 0 : aOldSel=pMEdit->GetSelection();
675 0 : Resize();
676 0 : WinBits nWinStyle=GetStyle() | WB_DIALOGCONTROL;
677 0 : SetStyle(nWinStyle);
678 :
679 : // #105582# the HelpId from the resource must be set for the MultiLineEdit,
680 : // not for the control that contains it.
681 0 : pMEdit->SetHelpId( GetHelpId() );
682 0 : SetHelpId( "" );
683 0 : }
684 :
685 0 : EditBox::~EditBox()
686 : {
687 0 : MultiLineEdit* pTheEdit=pMEdit;
688 0 : pMEdit->Disable();
689 0 : pMEdit=NULL;
690 0 : delete pTheEdit;
691 0 : }
692 : /*************************************************************************
693 : #* Member: EditBox Date:20.01.97
694 : #*------------------------------------------------------------------------
695 : #*
696 : #* Class: EditBox
697 : #*
698 : #* Function: When the seleccion is changed this function will be called
699 : #*
700 : #* Input: ---
701 : #*
702 : #* Output: ---
703 : #*
704 : #************************************************************************/
705 0 : void EditBox::SelectionChanged()
706 : {
707 0 : aSelChangedLink.Call(this);
708 0 : }
709 :
710 : /*************************************************************************
711 : #* Member: EditBox Date:20.05.98
712 : #*------------------------------------------------------------------------
713 : #*
714 : #* Class: EditBox
715 : #*
716 : #* Function: When the size is changed, MultiLineEdit must
717 : #* be adapted..
718 : #*
719 : #* Input: ---
720 : #*
721 : #* Output: ---
722 : #*
723 : #************************************************************************/
724 0 : void EditBox::Resize()
725 : {
726 0 : Size aSize=GetOutputSizePixel();
727 0 : if(pMEdit!=NULL) pMEdit->SetOutputSizePixel(aSize);
728 0 : }
729 :
730 : /*************************************************************************
731 : #* Member: GetFocus Date:26.05.98
732 : #*------------------------------------------------------------------------
733 : #*
734 : #* Class: EditBox
735 : #*
736 : #* Function: When the Control is activated,
737 : #* the Selection is repealed and the Cursor set
738 : #* at the end.
739 : #*
740 : #* Input: ---
741 : #*
742 : #* Output: ---
743 : #*
744 : #************************************************************************/
745 0 : void EditBox::GetFocus()
746 : {
747 0 : if(pMEdit!=NULL)
748 : {
749 0 : pMEdit->GrabFocus();
750 : }
751 0 : }
752 :
753 :
754 :
755 : /*************************************************************************
756 : #* Member: EditBox Date:20.01.97
757 : #*------------------------------------------------------------------------
758 : #*
759 : #* Class: EditBox
760 : #*
761 : #* Function: When an Event is cleared, this Routine is
762 : #* first called and a PostUserEvent is sent.
763 : #*
764 : #* Input: Notify-Event
765 : #*
766 : #* Output: ---
767 : #*
768 : #************************************************************************/
769 0 : long EditBox::PreNotify( NotifyEvent& rNEvt )
770 : {
771 0 : long nResult=sal_True;
772 :
773 0 : if(pMEdit==NULL) return nResult;
774 :
775 0 : sal_uInt16 nSwitch=rNEvt.GetType();
776 0 : if(nSwitch==EVENT_KEYINPUT)// || nSwitch==EVENT_KEYUP)
777 : {
778 0 : const KeyCode& aKeyCode=rNEvt.GetKeyEvent()->GetKeyCode();
779 0 : sal_uInt16 nKey=aKeyCode.GetCode();
780 0 : if( (nKey==KEY_RETURN && !aKeyCode.IsShift()) || nKey==KEY_TAB )
781 : {
782 0 : nResult=GetParent()->Notify(rNEvt);
783 : }
784 : else
785 : {
786 0 : nResult=Control::PreNotify(rNEvt);
787 0 : Application::PostUserEvent( LINK( this, EditBox, ChangedHdl ) );
788 : }
789 :
790 : }
791 : else
792 : {
793 0 : nResult=Control::PreNotify(rNEvt);
794 :
795 0 : if(nSwitch==EVENT_MOUSEBUTTONDOWN || nSwitch==EVENT_MOUSEBUTTONUP)
796 : {
797 0 : bMouseFlag=sal_True;
798 0 : Application::PostUserEvent( LINK( this, EditBox, ChangedHdl ) );
799 : }
800 : }
801 0 : return nResult;
802 : }
803 :
804 : /*************************************************************************
805 : #* Member: EditBox Date:21.01.97
806 : #*------------------------------------------------------------------------
807 : #*
808 : #* Class: EditBox
809 : #*
810 : #* Function: When an Event cleared wurde, this routine is
811 : #* first called.
812 : #*
813 : #* Input: Key-Event
814 : #*
815 : #* Output: ---
816 : #*
817 : #************************************************************************/
818 0 : IMPL_LINK_NOARG(EditBox, ChangedHdl)
819 : {
820 0 : if(pMEdit!=NULL)
821 : {
822 0 : Selection aNewSel=pMEdit->GetSelection();
823 :
824 0 : if(aNewSel.Min()!=aOldSel.Min() || aNewSel.Max()!=aOldSel.Max())
825 : {
826 0 : SelectionChanged();
827 0 : aOldSel=aNewSel;
828 : }
829 : }
830 0 : return 0;
831 : }
832 :
833 0 : void EditBox::UpdateOldSel()
834 : {
835 : // if selection is set for editing a function, store it as aOldSel,
836 : // so SelectionChanged isn't called in the next ChangedHdl call
837 :
838 0 : if (pMEdit)
839 0 : aOldSel = pMEdit->GetSelection();
840 0 : }
841 : //----------------------------------------------------------------------------
842 :
843 : //============================================================================
844 : // class RefEdit
845 : //----------------------------------------------------------------------------
846 :
847 : #define SC_ENABLE_TIME 100
848 :
849 0 : RefEdit::RefEdit( Window* _pParent,IControlReferenceHandler* pParent, const ResId& rResId ) :
850 : Edit( _pParent, rResId ),
851 0 : pAnyRefDlg( pParent )
852 : {
853 0 : aTimer.SetTimeoutHdl( LINK( this, RefEdit, UpdateHdl ) );
854 0 : aTimer.SetTimeout( SC_ENABLE_TIME );
855 0 : }
856 :
857 0 : RefEdit::~RefEdit()
858 : {
859 0 : aTimer.SetTimeoutHdl( Link() );
860 0 : aTimer.Stop();
861 0 : }
862 :
863 0 : void RefEdit::SetRefString( const XubString& rStr )
864 : {
865 0 : Edit::SetText( rStr );
866 0 : }
867 :
868 0 : void RefEdit::SetRefValid(bool bValid)
869 : {
870 0 : if (bValid)
871 : {
872 0 : SetControlForeground();
873 0 : SetControlBackground();
874 : }
875 : else
876 : {
877 0 : SetControlForeground(COL_WHITE);
878 0 : SetControlBackground(0xff6563);
879 : }
880 0 : }
881 :
882 0 : void RefEdit::SetText( const XubString& rStr )
883 : {
884 0 : Edit::SetText( rStr );
885 0 : UpdateHdl( &aTimer );
886 0 : }
887 :
888 0 : void RefEdit::StartUpdateData()
889 : {
890 0 : aTimer.Start();
891 0 : }
892 :
893 0 : void RefEdit::SetRefDialog( IControlReferenceHandler* pDlg )
894 : {
895 0 : pAnyRefDlg = pDlg;
896 :
897 0 : if( pDlg )
898 : {
899 0 : aTimer.SetTimeoutHdl( LINK( this, RefEdit, UpdateHdl ) );
900 0 : aTimer.SetTimeout( SC_ENABLE_TIME );
901 : }
902 : else
903 : {
904 0 : aTimer.SetTimeoutHdl( Link() );
905 0 : aTimer.Stop();
906 : }
907 0 : }
908 :
909 0 : void RefEdit::Modify()
910 : {
911 0 : Edit::Modify();
912 0 : if( pAnyRefDlg )
913 0 : pAnyRefDlg->HideReference();
914 0 : }
915 :
916 0 : void RefEdit::KeyInput( const KeyEvent& rKEvt )
917 : {
918 0 : const KeyCode& rKeyCode = rKEvt.GetKeyCode();
919 0 : if( pAnyRefDlg && !rKeyCode.GetModifier() && (rKeyCode.GetCode() == KEY_F2) )
920 0 : pAnyRefDlg->ReleaseFocus( this );
921 : else
922 0 : Edit::KeyInput( rKEvt );
923 0 : }
924 :
925 0 : void RefEdit::GetFocus()
926 : {
927 0 : Edit::GetFocus();
928 0 : StartUpdateData();
929 0 : }
930 :
931 0 : void RefEdit::LoseFocus()
932 : {
933 0 : Edit::LoseFocus();
934 0 : if( pAnyRefDlg )
935 0 : pAnyRefDlg->HideReference();
936 0 : }
937 :
938 0 : IMPL_LINK_NOARG(RefEdit, UpdateHdl)
939 : {
940 0 : if( pAnyRefDlg )
941 0 : pAnyRefDlg->ShowReference( GetText() );
942 0 : return 0;
943 : }
944 :
945 :
946 : //============================================================================
947 : // class RefButton
948 : //----------------------------------------------------------------------------
949 0 : RefButton::RefButton( Window* _pParent, const ResId& rResId) :
950 : ImageButton( _pParent, rResId ),
951 : aImgRefStart( ModuleRes( RID_BMP_REFBTN1 ) ),
952 : aImgRefDone( ModuleRes( RID_BMP_REFBTN2 ) ),
953 : pAnyRefDlg( NULL ),
954 0 : pRefEdit( NULL )
955 : {
956 0 : SetStartImage();
957 0 : }
958 :
959 0 : RefButton::RefButton( Window* _pParent, const ResId& rResId, RefEdit* pEdit, IControlReferenceHandler* _pDlg ) :
960 : ImageButton( _pParent, rResId ),
961 : aImgRefStart( ModuleRes( RID_BMP_REFBTN1 ) ),
962 : aImgRefDone( ModuleRes( RID_BMP_REFBTN2 ) ),
963 : pAnyRefDlg( _pDlg ),
964 0 : pRefEdit( pEdit )
965 : {
966 0 : SetStartImage();
967 0 : }
968 :
969 0 : void RefButton::SetStartImage()
970 : {
971 0 : SetModeImage( aImgRefStart );
972 0 : }
973 :
974 0 : void RefButton::SetEndImage()
975 : {
976 0 : SetModeImage( aImgRefDone );
977 0 : }
978 :
979 0 : void RefButton::SetReferences( IControlReferenceHandler* pDlg, RefEdit* pEdit )
980 : {
981 0 : pAnyRefDlg = pDlg;
982 0 : pRefEdit = pEdit;
983 0 : }
984 :
985 : //----------------------------------------------------------------------------
986 :
987 0 : void RefButton::Click()
988 : {
989 0 : if( pAnyRefDlg )
990 0 : pAnyRefDlg->ToggleCollapsed( pRefEdit, this );
991 0 : }
992 :
993 0 : void RefButton::KeyInput( const KeyEvent& rKEvt )
994 : {
995 0 : const KeyCode& rKeyCode = rKEvt.GetKeyCode();
996 0 : if( pAnyRefDlg && !rKeyCode.GetModifier() && (rKeyCode.GetCode() == KEY_F2) )
997 0 : pAnyRefDlg->ReleaseFocus( pRefEdit );
998 : else
999 0 : ImageButton::KeyInput( rKEvt );
1000 0 : }
1001 :
1002 0 : void RefButton::GetFocus()
1003 : {
1004 0 : ImageButton::GetFocus();
1005 0 : if( pRefEdit )
1006 0 : pRefEdit->StartUpdateData();
1007 0 : }
1008 :
1009 0 : void RefButton::LoseFocus()
1010 : {
1011 0 : ImageButton::LoseFocus();
1012 0 : if( pRefEdit )
1013 0 : pRefEdit->Modify();
1014 0 : }
1015 :
1016 :
1017 : } // formula
1018 :
1019 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|