xref: /trunk/main/formula/source/ui/dlg/funcutl.cxx (revision 3ce09a58b0d6873449cda31e55c66dba2dbc8f7f)
1c25918c1SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3c25918c1SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4c25918c1SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5c25918c1SAndrew Rist  * distributed with this work for additional information
6c25918c1SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7c25918c1SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8c25918c1SAndrew Rist  * "License"); you may not use this file except in compliance
9c25918c1SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11c25918c1SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13c25918c1SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14c25918c1SAndrew Rist  * software distributed under the License is distributed on an
15c25918c1SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16c25918c1SAndrew Rist  * KIND, either express or implied.  See the License for the
17c25918c1SAndrew Rist  * specific language governing permissions and limitations
18c25918c1SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20c25918c1SAndrew Rist  *************************************************************/
21c25918c1SAndrew Rist 
22c25918c1SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_formula.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir //----------------------------------------------------------------------------
28cdf0e10cSrcweir #include <vcl/sound.hxx>
29cdf0e10cSrcweir #include <vcl/svapp.hxx>
30cdf0e10cSrcweir #include <vcl/scrbar.hxx>
31cdf0e10cSrcweir 
32cdf0e10cSrcweir #include "formula/funcutl.hxx"
33cdf0e10cSrcweir #include "formula/IControlReferenceHandler.hxx"
34cdf0e10cSrcweir #include "ControlHelper.hxx"
35cdf0e10cSrcweir #include "ModuleHelper.hxx"
36cdf0e10cSrcweir #include "ForResId.hrc"
37*3ce09a58SSteve Yin // IAccessibility2 implementation 2009. ------
38*3ce09a58SSteve Yin #include "com/sun/star/accessibility/AccessibleRole.hpp"
39*3ce09a58SSteve Yin // ------ IAccessibility2 implementation 2009.
40cdf0e10cSrcweir 
41cdf0e10cSrcweir 
42cdf0e10cSrcweir namespace formula
43cdf0e10cSrcweir {
44cdf0e10cSrcweir //============================================================================
45cdf0e10cSrcweir // class ValWnd
46cdf0e10cSrcweir //----------------------------------------------------------------------------
47cdf0e10cSrcweir 
48cdf0e10cSrcweir ValWnd::ValWnd( Window* pParent, const ResId& rId ) : Window( pParent, rId )
49cdf0e10cSrcweir {
50cdf0e10cSrcweir     Font aFnt( GetFont() );
51cdf0e10cSrcweir     aFnt.SetTransparent( sal_True );
52cdf0e10cSrcweir     aFnt.SetWeight( WEIGHT_LIGHT );
53cdf0e10cSrcweir     if ( pParent->IsBackground() )
54cdf0e10cSrcweir     {
55cdf0e10cSrcweir         Wallpaper aBack = pParent->GetBackground();
56cdf0e10cSrcweir         SetFillColor( aBack.GetColor() );
57cdf0e10cSrcweir         SetBackground( aBack );
58cdf0e10cSrcweir         aFnt.SetFillColor( aBack.GetColor() );
59cdf0e10cSrcweir     }
60cdf0e10cSrcweir     else
61cdf0e10cSrcweir     {
62cdf0e10cSrcweir         SetFillColor();
63cdf0e10cSrcweir         SetBackground();
64cdf0e10cSrcweir     }
65cdf0e10cSrcweir     SetFont( aFnt );
66cdf0e10cSrcweir     SetLineColor();
67cdf0e10cSrcweir 
68cdf0e10cSrcweir     Size aSzWnd  = GetOutputSizePixel();
69cdf0e10cSrcweir     long nHeight = GetTextHeight();
70cdf0e10cSrcweir     long nDiff   = aSzWnd.Height()-nHeight;
71cdf0e10cSrcweir 
72cdf0e10cSrcweir     aRectOut = Rectangle( Point( 1, ( nDiff<2 ) ? 1 : nDiff/2),
73cdf0e10cSrcweir                           Size ( aSzWnd.Width()-2, nHeight ) );
74cdf0e10cSrcweir     SetClipRegion( Region( aRectOut ) );
75*3ce09a58SSteve Yin     SetAccessibleRole( ::com::sun::star::accessibility::AccessibleRole::LABEL );
76cdf0e10cSrcweir }
77cdf0e10cSrcweir 
78cdf0e10cSrcweir //----------------------------------------------------------------------------
79cdf0e10cSrcweir 
80cdf0e10cSrcweir void __EXPORT ValWnd::Paint( const Rectangle& )
81cdf0e10cSrcweir {
82cdf0e10cSrcweir     DrawText( aRectOut.TopLeft(), aStrValue );
83cdf0e10cSrcweir }
84cdf0e10cSrcweir 
85cdf0e10cSrcweir //----------------------------------------------------------------------------
86cdf0e10cSrcweir 
87cdf0e10cSrcweir void ValWnd::SetValue( const String& rStrVal )
88cdf0e10cSrcweir {
89cdf0e10cSrcweir     if ( aStrValue != rStrVal )
90cdf0e10cSrcweir     {
91cdf0e10cSrcweir         aStrValue = rStrVal;
92cdf0e10cSrcweir         DrawRect( aRectOut );   // alten Text loeschen
93cdf0e10cSrcweir         Paint( aRectOut );      // und neu malen
94cdf0e10cSrcweir     }
95cdf0e10cSrcweir }
96cdf0e10cSrcweir 
97cdf0e10cSrcweir //============================================================================
98cdf0e10cSrcweir // class ArgEdit
99cdf0e10cSrcweir //----------------------------------------------------------------------------
100cdf0e10cSrcweir 
101cdf0e10cSrcweir ArgEdit::ArgEdit( Window* pParent, const ResId& rResId )
102cdf0e10cSrcweir     :   RefEdit( pParent, rResId ),
103cdf0e10cSrcweir         pEdPrev ( NULL ),
104cdf0e10cSrcweir         pEdNext ( NULL ),
105cdf0e10cSrcweir         pSlider ( NULL ),
106cdf0e10cSrcweir         nArgs   ( 0 )
107cdf0e10cSrcweir {
108cdf0e10cSrcweir }
109cdf0e10cSrcweir 
110cdf0e10cSrcweir //----------------------------------------------------------------------------
111cdf0e10cSrcweir 
112cdf0e10cSrcweir void ArgEdit::Init( ArgEdit* pPrevEdit, ArgEdit* pNextEdit,
113cdf0e10cSrcweir                     ScrollBar& rArgSlider, sal_uInt16 nArgCount )
114cdf0e10cSrcweir {
115cdf0e10cSrcweir     pEdPrev = pPrevEdit;
116cdf0e10cSrcweir     pEdNext = pNextEdit;
117cdf0e10cSrcweir     pSlider = &rArgSlider;
118cdf0e10cSrcweir     nArgs   = nArgCount;
119cdf0e10cSrcweir }
120cdf0e10cSrcweir 
121cdf0e10cSrcweir //----------------------------------------------------------------------------
122cdf0e10cSrcweir 
123cdf0e10cSrcweir // Cursorsteuerung fuer EditFelder im Argument-Dialog
124cdf0e10cSrcweir 
125cdf0e10cSrcweir void __EXPORT ArgEdit::KeyInput( const KeyEvent& rKEvt )
126cdf0e10cSrcweir {
127cdf0e10cSrcweir     KeyCode     aCode   = rKEvt.GetKeyCode();
128cdf0e10cSrcweir     sal_Bool        bUp     = (aCode.GetCode() == KEY_UP);
129cdf0e10cSrcweir     sal_Bool        bDown   = (aCode.GetCode() == KEY_DOWN);
130cdf0e10cSrcweir     ArgEdit*    pEd     = NULL;
131cdf0e10cSrcweir 
132cdf0e10cSrcweir     if (   pSlider
133cdf0e10cSrcweir         && ( !aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
134cdf0e10cSrcweir         && ( bUp || bDown ) )
135cdf0e10cSrcweir     {
136cdf0e10cSrcweir         if ( nArgs > 1 )
137cdf0e10cSrcweir         {
138cdf0e10cSrcweir             long    nThumb       = pSlider->GetThumbPos();
139cdf0e10cSrcweir             sal_Bool    bDoScroll    = sal_False;
140cdf0e10cSrcweir             sal_Bool    bChangeFocus = sal_False;
141cdf0e10cSrcweir 
142cdf0e10cSrcweir             if ( bDown )
143cdf0e10cSrcweir             {
144cdf0e10cSrcweir                 if ( nArgs > 4 )
145cdf0e10cSrcweir                 {
146cdf0e10cSrcweir                     if ( !pEdNext )
147cdf0e10cSrcweir                     {
148cdf0e10cSrcweir                         nThumb++;
149cdf0e10cSrcweir                         bDoScroll = ( nThumb+3 < (long)nArgs );
150cdf0e10cSrcweir                     }
151cdf0e10cSrcweir                     else
152cdf0e10cSrcweir                     {
153cdf0e10cSrcweir                         pEd = pEdNext;
154cdf0e10cSrcweir                         bChangeFocus = sal_True;
155cdf0e10cSrcweir                     }
156cdf0e10cSrcweir                 }
157cdf0e10cSrcweir                 else if ( pEdNext )
158cdf0e10cSrcweir                 {
159cdf0e10cSrcweir                     pEd = pEdNext;
160cdf0e10cSrcweir                     bChangeFocus = sal_True;
161cdf0e10cSrcweir                 }
162cdf0e10cSrcweir             }
163cdf0e10cSrcweir             else // if ( bUp )
164cdf0e10cSrcweir             {
165cdf0e10cSrcweir                 if ( nArgs > 4 )
166cdf0e10cSrcweir                 {
167cdf0e10cSrcweir                     if ( !pEdPrev )
168cdf0e10cSrcweir                     {
169cdf0e10cSrcweir                         nThumb--;
170cdf0e10cSrcweir                         bDoScroll = ( nThumb >= 0 );
171cdf0e10cSrcweir                     }
172cdf0e10cSrcweir                     else
173cdf0e10cSrcweir                     {
174cdf0e10cSrcweir                         pEd = pEdPrev;
175cdf0e10cSrcweir                         bChangeFocus = sal_True;
176cdf0e10cSrcweir                     }
177cdf0e10cSrcweir                 }
178cdf0e10cSrcweir                 else if ( pEdPrev )
179cdf0e10cSrcweir                 {
180cdf0e10cSrcweir                     pEd = pEdPrev;
181cdf0e10cSrcweir                     bChangeFocus = sal_True;
182cdf0e10cSrcweir                 }
183cdf0e10cSrcweir             }
184cdf0e10cSrcweir 
185cdf0e10cSrcweir             if ( bDoScroll )
186cdf0e10cSrcweir             {
187cdf0e10cSrcweir                 pSlider->SetThumbPos( nThumb );
188cdf0e10cSrcweir                 ((Link&)pSlider->GetEndScrollHdl()).Call( pSlider );
189cdf0e10cSrcweir             }
190cdf0e10cSrcweir             else if ( bChangeFocus )
191cdf0e10cSrcweir             {
192cdf0e10cSrcweir                 pEd->GrabFocus();
193cdf0e10cSrcweir             }
194cdf0e10cSrcweir             else
195cdf0e10cSrcweir                 Sound::Beep();
196cdf0e10cSrcweir         }
197cdf0e10cSrcweir         else
198cdf0e10cSrcweir             Sound::Beep();
199cdf0e10cSrcweir     }
200cdf0e10cSrcweir     else
201cdf0e10cSrcweir         RefEdit::KeyInput( rKEvt );
202cdf0e10cSrcweir }
203cdf0e10cSrcweir 
204cdf0e10cSrcweir 
205cdf0e10cSrcweir 
206cdf0e10cSrcweir 
207cdf0e10cSrcweir /*************************************************************************
208cdf0e10cSrcweir #*  Member:     ArgInput                                    Datum:13.01.97
209cdf0e10cSrcweir #*------------------------------------------------------------------------
210cdf0e10cSrcweir #*
211cdf0e10cSrcweir #*  Klasse:     ArgInput
212cdf0e10cSrcweir #*
213cdf0e10cSrcweir #*  Funktion:   Konstruktor der Klasse ArgInput
214cdf0e10cSrcweir #*
215cdf0e10cSrcweir #*  Input:      ---
216cdf0e10cSrcweir #*
217cdf0e10cSrcweir #*  Output:     ---
218cdf0e10cSrcweir #*
219cdf0e10cSrcweir #************************************************************************/
220cdf0e10cSrcweir 
221cdf0e10cSrcweir ArgInput::ArgInput()
222cdf0e10cSrcweir {
223cdf0e10cSrcweir     pFtArg=NULL;
224cdf0e10cSrcweir     pBtnFx=NULL;
225cdf0e10cSrcweir     pEdArg=NULL;
226cdf0e10cSrcweir     pRefBtn=NULL;
227cdf0e10cSrcweir }
228cdf0e10cSrcweir 
229cdf0e10cSrcweir /*************************************************************************
230cdf0e10cSrcweir #*  Member:     InitArgInput                                Datum:13.01.97
231cdf0e10cSrcweir #*------------------------------------------------------------------------
232cdf0e10cSrcweir #*
233cdf0e10cSrcweir #*  Klasse:     ArgInput
234cdf0e10cSrcweir #*
235cdf0e10cSrcweir #*  Funktion:   Initialisiert die Pointer der Klasse
236cdf0e10cSrcweir #*
237cdf0e10cSrcweir #*  Input:      ---
238cdf0e10cSrcweir #*
239cdf0e10cSrcweir #*  Output:     ---
240cdf0e10cSrcweir #*
241cdf0e10cSrcweir #************************************************************************/
242cdf0e10cSrcweir 
243cdf0e10cSrcweir void ArgInput::InitArgInput(FixedText*      pftArg,
244cdf0e10cSrcweir                             ImageButton*    pbtnFx,
245cdf0e10cSrcweir                             ArgEdit*        pedArg,
246cdf0e10cSrcweir                             RefButton*  prefBtn)
247cdf0e10cSrcweir {
248cdf0e10cSrcweir     pFtArg =pftArg;
249cdf0e10cSrcweir     pBtnFx =pbtnFx;
250cdf0e10cSrcweir     pEdArg =pedArg;
251cdf0e10cSrcweir     pRefBtn=prefBtn;
252cdf0e10cSrcweir 
253cdf0e10cSrcweir     if(pBtnFx!=NULL)
254cdf0e10cSrcweir     {
255cdf0e10cSrcweir         pBtnFx->SetClickHdl   ( LINK( this, ArgInput, FxBtnClickHdl ) );
256cdf0e10cSrcweir         pBtnFx->SetGetFocusHdl( LINK( this, ArgInput, FxBtnFocusHdl ) );
257cdf0e10cSrcweir     }
258cdf0e10cSrcweir     if(pRefBtn!=NULL)
259cdf0e10cSrcweir     {
260cdf0e10cSrcweir         pRefBtn->SetClickHdl   ( LINK( this, ArgInput, RefBtnClickHdl ) );
261cdf0e10cSrcweir         pRefBtn->SetGetFocusHdl( LINK( this, ArgInput, RefBtnFocusHdl ) );
262cdf0e10cSrcweir     }
263cdf0e10cSrcweir     if(pEdArg!=NULL)
264cdf0e10cSrcweir     {
265cdf0e10cSrcweir         pEdArg->SetGetFocusHdl ( LINK( this, ArgInput, EdFocusHdl ) );
266cdf0e10cSrcweir         pEdArg->SetModifyHdl   ( LINK( this, ArgInput, EdModifyHdl ) );
267cdf0e10cSrcweir     }
268cdf0e10cSrcweir 
269cdf0e10cSrcweir }
270cdf0e10cSrcweir 
271cdf0e10cSrcweir /*************************************************************************
272cdf0e10cSrcweir #*  Member:     SetArgName                                  Datum:13.01.97
273cdf0e10cSrcweir #*------------------------------------------------------------------------
274cdf0e10cSrcweir #*
275cdf0e10cSrcweir #*  Klasse:     ArgInput
276cdf0e10cSrcweir #*
277cdf0e10cSrcweir #*  Funktion:   Setzt den Namen fuer das Argument
278cdf0e10cSrcweir #*
279cdf0e10cSrcweir #*  Input:      String
280cdf0e10cSrcweir #*
281cdf0e10cSrcweir #*  Output:     ---
282cdf0e10cSrcweir #*
283cdf0e10cSrcweir #************************************************************************/
284cdf0e10cSrcweir void ArgInput::SetArgName(const String &aArg)
285cdf0e10cSrcweir {
286cdf0e10cSrcweir     if(pFtArg !=NULL) pFtArg->SetText(aArg );
287cdf0e10cSrcweir }
288cdf0e10cSrcweir 
289cdf0e10cSrcweir /*************************************************************************
290cdf0e10cSrcweir #*  Member:     GetArgName                                  Datum:06.02.97
291cdf0e10cSrcweir #*------------------------------------------------------------------------
292cdf0e10cSrcweir #*
293cdf0e10cSrcweir #*  Klasse:     ArgInput
294cdf0e10cSrcweir #*
295cdf0e10cSrcweir #*  Funktion:   Liefert den Namen fuer das Argument zurueck
296cdf0e10cSrcweir #*
297cdf0e10cSrcweir #*  Input:      String
298cdf0e10cSrcweir #*
299cdf0e10cSrcweir #*  Output:     ---
300cdf0e10cSrcweir #*
301cdf0e10cSrcweir #************************************************************************/
302cdf0e10cSrcweir String ArgInput::GetArgName()
303cdf0e10cSrcweir {
304cdf0e10cSrcweir     String aPrivArgName;
305cdf0e10cSrcweir     if(pFtArg !=NULL)
306cdf0e10cSrcweir         aPrivArgName=pFtArg->GetText();
307cdf0e10cSrcweir 
308cdf0e10cSrcweir     return aPrivArgName;
309cdf0e10cSrcweir }
310cdf0e10cSrcweir 
311cdf0e10cSrcweir 
312cdf0e10cSrcweir /*************************************************************************
313cdf0e10cSrcweir #*  Member:     SetArgName                                  Datum:13.01.97
314cdf0e10cSrcweir #*------------------------------------------------------------------------
315cdf0e10cSrcweir #*
316cdf0e10cSrcweir #*  Klasse:     ArgInput
317cdf0e10cSrcweir #*
318cdf0e10cSrcweir #*  Funktion:   Setzt den Namen fuer das Argument
319cdf0e10cSrcweir #*
320cdf0e10cSrcweir #*  Input:      String
321cdf0e10cSrcweir #*
322cdf0e10cSrcweir #*  Output:     ---
323cdf0e10cSrcweir #*
324cdf0e10cSrcweir #************************************************************************/
325cdf0e10cSrcweir void ArgInput::SetArgNameFont   (const Font &aFont)
326cdf0e10cSrcweir {
327cdf0e10cSrcweir     if(pFtArg !=NULL) pFtArg->SetFont(aFont);
328cdf0e10cSrcweir }
329cdf0e10cSrcweir 
330cdf0e10cSrcweir /*************************************************************************
331cdf0e10cSrcweir #*  Member:     SetArgSelection                             Datum:13.01.97
332cdf0e10cSrcweir #*------------------------------------------------------------------------
333cdf0e10cSrcweir #*
334cdf0e10cSrcweir #*  Klasse:     ArgInput
335cdf0e10cSrcweir #*
336cdf0e10cSrcweir #*  Funktion:   Stellt die Selection fuer die EditBox ein.
337cdf0e10cSrcweir #*
338cdf0e10cSrcweir #*  Input:      String
339cdf0e10cSrcweir #*
340cdf0e10cSrcweir #*  Output:     ---
341cdf0e10cSrcweir #*
342cdf0e10cSrcweir #************************************************************************/
343cdf0e10cSrcweir void ArgInput::SetArgSelection  (const Selection& rSel )
344cdf0e10cSrcweir {
345cdf0e10cSrcweir     if(pEdArg !=NULL) pEdArg ->SetSelection(rSel );
346cdf0e10cSrcweir }
347cdf0e10cSrcweir 
348cdf0e10cSrcweir /*************************************************************************
349cdf0e10cSrcweir #*  Member:     SetArgSelection                             Datum:13.01.97
350cdf0e10cSrcweir #*------------------------------------------------------------------------
351cdf0e10cSrcweir #*
352cdf0e10cSrcweir #*  Klasse:     ArgInput
353cdf0e10cSrcweir #*
354cdf0e10cSrcweir #*  Funktion:   Liefert die Selection fuer die EditBox zurueck.
355cdf0e10cSrcweir #*
356cdf0e10cSrcweir #*  Input:      String
357cdf0e10cSrcweir #*
358cdf0e10cSrcweir #*  Output:     ---
359cdf0e10cSrcweir #*
360cdf0e10cSrcweir #************************************************************************/
361cdf0e10cSrcweir Selection ArgInput::GetArgSelection ()
362cdf0e10cSrcweir {
363cdf0e10cSrcweir     Selection   aSel;
364cdf0e10cSrcweir     if(pEdArg !=NULL) aSel=pEdArg ->GetSelection();
365cdf0e10cSrcweir     return aSel;
366cdf0e10cSrcweir }
367cdf0e10cSrcweir 
368cdf0e10cSrcweir /*************************************************************************
369cdf0e10cSrcweir #*  Member:     SetArgSelection                             Datum:13.01.97
370cdf0e10cSrcweir #*------------------------------------------------------------------------
371cdf0e10cSrcweir #*
372cdf0e10cSrcweir #*  Klasse:     ArgInput
373cdf0e10cSrcweir #*
374cdf0e10cSrcweir #*  Funktion:   Ersetzt die Selection in der EditBox.
375cdf0e10cSrcweir #*
376cdf0e10cSrcweir #*  Input:      String
377cdf0e10cSrcweir #*
378cdf0e10cSrcweir #*  Output:     ---
379cdf0e10cSrcweir #*
380cdf0e10cSrcweir #************************************************************************/
381cdf0e10cSrcweir void ArgInput::ReplaceSelOfArg(const String& rStr )
382cdf0e10cSrcweir {
383cdf0e10cSrcweir     if(pEdArg !=NULL) pEdArg ->ReplaceSelected(rStr );
384cdf0e10cSrcweir }
385cdf0e10cSrcweir 
386cdf0e10cSrcweir 
387cdf0e10cSrcweir 
388cdf0e10cSrcweir /*************************************************************************
389cdf0e10cSrcweir #*  Member:     SetArgVal                                   Datum:13.01.97
390cdf0e10cSrcweir #*------------------------------------------------------------------------
391cdf0e10cSrcweir #*
392cdf0e10cSrcweir #*  Klasse:     ArgInput
393cdf0e10cSrcweir #*
394cdf0e10cSrcweir #*  Funktion:   Setzt den Wert fuer das Argument
395cdf0e10cSrcweir #*
396cdf0e10cSrcweir #*  Input:      String
397cdf0e10cSrcweir #*
398cdf0e10cSrcweir #*  Output:     ---
399cdf0e10cSrcweir #*
400cdf0e10cSrcweir #************************************************************************/
401cdf0e10cSrcweir void ArgInput::SetArgVal(const String &aVal)
402cdf0e10cSrcweir {
403cdf0e10cSrcweir     if(pEdArg !=NULL)
404cdf0e10cSrcweir     {
405cdf0e10cSrcweir         pEdArg ->SetRefString(aVal );
406cdf0e10cSrcweir     }
407cdf0e10cSrcweir }
408cdf0e10cSrcweir 
409cdf0e10cSrcweir /*************************************************************************
410cdf0e10cSrcweir #*  Member:     SetArgName                                  Datum:13.01.97
411cdf0e10cSrcweir #*------------------------------------------------------------------------
412cdf0e10cSrcweir #*
413cdf0e10cSrcweir #*  Klasse:     ArgInput
414cdf0e10cSrcweir #*
415cdf0e10cSrcweir #*  Funktion:   Liefert den Wert fuer das Argument
416cdf0e10cSrcweir #*
417cdf0e10cSrcweir #*  Input:      ---
418cdf0e10cSrcweir #*
419cdf0e10cSrcweir #*  Output:     String
420cdf0e10cSrcweir #*
421cdf0e10cSrcweir #************************************************************************/
422cdf0e10cSrcweir String ArgInput::GetArgVal()
423cdf0e10cSrcweir {
424cdf0e10cSrcweir     String aResult;
425cdf0e10cSrcweir     if(pEdArg!=NULL)
426cdf0e10cSrcweir     {
427cdf0e10cSrcweir         aResult=pEdArg->GetText();
428cdf0e10cSrcweir     }
429cdf0e10cSrcweir     return aResult;
430cdf0e10cSrcweir }
431cdf0e10cSrcweir 
432cdf0e10cSrcweir /*************************************************************************
433cdf0e10cSrcweir #*  Member:     SetArgName                                  Datum:13.01.97
434cdf0e10cSrcweir #*------------------------------------------------------------------------
435cdf0e10cSrcweir #*
436cdf0e10cSrcweir #*  Klasse:     ArgInput
437cdf0e10cSrcweir #*
438cdf0e10cSrcweir #*  Funktion:   Versteckt die Controls
439cdf0e10cSrcweir #*
440cdf0e10cSrcweir #*  Input:      ---
441cdf0e10cSrcweir #*
442cdf0e10cSrcweir #*  Output:     ---
443cdf0e10cSrcweir #*
444cdf0e10cSrcweir #************************************************************************/
445cdf0e10cSrcweir void ArgInput::Hide()
446cdf0e10cSrcweir {
447cdf0e10cSrcweir     if ( pFtArg && pBtnFx && pEdArg && pRefBtn)
448cdf0e10cSrcweir     {
449cdf0e10cSrcweir         pFtArg->Hide();
450cdf0e10cSrcweir         pBtnFx->Hide();
451cdf0e10cSrcweir         pEdArg->Hide();
452cdf0e10cSrcweir         pRefBtn->Hide();
453cdf0e10cSrcweir     }
454cdf0e10cSrcweir }
455cdf0e10cSrcweir 
456cdf0e10cSrcweir /*************************************************************************
457cdf0e10cSrcweir #*  Member:     SetArgName                                  Datum:13.01.97
458cdf0e10cSrcweir #*------------------------------------------------------------------------
459cdf0e10cSrcweir #*
460cdf0e10cSrcweir #*  Klasse:     ArgInput
461cdf0e10cSrcweir #*
462cdf0e10cSrcweir #*  Funktion:   Zaubert die Controls wieder hervor.
463cdf0e10cSrcweir #*
464cdf0e10cSrcweir #*  Input:      ---
465cdf0e10cSrcweir #*
466cdf0e10cSrcweir #*  Output:     ---
467cdf0e10cSrcweir #*
468cdf0e10cSrcweir #************************************************************************/
469cdf0e10cSrcweir void ArgInput::Show()
470cdf0e10cSrcweir {
471cdf0e10cSrcweir     if ( pFtArg && pBtnFx && pEdArg && pRefBtn)
472cdf0e10cSrcweir     {
473cdf0e10cSrcweir         pFtArg->Show();
474cdf0e10cSrcweir         pBtnFx->Show();
475cdf0e10cSrcweir         pEdArg->Show();
476cdf0e10cSrcweir         pRefBtn->Show();
477cdf0e10cSrcweir     }
478cdf0e10cSrcweir }
479*3ce09a58SSteve Yin //IAccessibility2 Implementation 2009-----
480*3ce09a58SSteve Yin void ArgInput::UpdateAccessibleNames()
481*3ce09a58SSteve Yin {
482*3ce09a58SSteve Yin     String aArgName = String::CreateFromAscii(":");
483*3ce09a58SSteve Yin     aArgName += pFtArg->GetText();
484*3ce09a58SSteve Yin 
485*3ce09a58SSteve Yin     String aName = pBtnFx->GetQuickHelpText();
486*3ce09a58SSteve Yin     aName += aArgName;
487*3ce09a58SSteve Yin     pBtnFx->SetAccessibleName(aName);
488*3ce09a58SSteve Yin 
489*3ce09a58SSteve Yin     aName = pRefBtn->GetQuickHelpText();
490*3ce09a58SSteve Yin     aName += aArgName;
491*3ce09a58SSteve Yin     pRefBtn->SetAccessibleName(aName);
492*3ce09a58SSteve Yin }
493cdf0e10cSrcweir 
494cdf0e10cSrcweir /*************************************************************************
495cdf0e10cSrcweir #*  Member:     FxClick                                     Datum:13.01.97
496cdf0e10cSrcweir #*------------------------------------------------------------------------
497cdf0e10cSrcweir #*
498cdf0e10cSrcweir #*  Klasse:     ArgInput
499cdf0e10cSrcweir #*
500cdf0e10cSrcweir #*  Funktion:   Gibt den Event weiter.
501cdf0e10cSrcweir #*
502cdf0e10cSrcweir #*  Input:      ---
503cdf0e10cSrcweir #*
504cdf0e10cSrcweir #*  Output:     ---
505cdf0e10cSrcweir #*
506cdf0e10cSrcweir #************************************************************************/
507cdf0e10cSrcweir void ArgInput::FxClick()
508cdf0e10cSrcweir {
509cdf0e10cSrcweir     aFxClickLink.Call(this);
510cdf0e10cSrcweir }
511cdf0e10cSrcweir 
512cdf0e10cSrcweir /*************************************************************************
513cdf0e10cSrcweir #*  Member:     RefClick                                    Datum:13.01.97
514cdf0e10cSrcweir #*------------------------------------------------------------------------
515cdf0e10cSrcweir #*
516cdf0e10cSrcweir #*  Klasse:     ArgInput
517cdf0e10cSrcweir #*
518cdf0e10cSrcweir #*  Funktion:   Gibt den Event weiter.
519cdf0e10cSrcweir #*
520cdf0e10cSrcweir #*  Input:      ---
521cdf0e10cSrcweir #*
522cdf0e10cSrcweir #*  Output:     ---
523cdf0e10cSrcweir #*
524cdf0e10cSrcweir #************************************************************************/
525cdf0e10cSrcweir void ArgInput::RefClick()
526cdf0e10cSrcweir {
527cdf0e10cSrcweir     aRefClickLink.Call(this);
528cdf0e10cSrcweir }
529cdf0e10cSrcweir 
530cdf0e10cSrcweir /*************************************************************************
531cdf0e10cSrcweir #*  Member:     FxFocus                                     Datum:13.01.97
532cdf0e10cSrcweir #*------------------------------------------------------------------------
533cdf0e10cSrcweir #*
534cdf0e10cSrcweir #*  Klasse:     ArgInput
535cdf0e10cSrcweir #*
536cdf0e10cSrcweir #*  Funktion:   Gibt den Event weiter.
537cdf0e10cSrcweir #*
538cdf0e10cSrcweir #*  Input:      ---
539cdf0e10cSrcweir #*
540cdf0e10cSrcweir #*  Output:     ---
541cdf0e10cSrcweir #*
542cdf0e10cSrcweir #************************************************************************/
543cdf0e10cSrcweir void ArgInput::FxFocus()
544cdf0e10cSrcweir {
545cdf0e10cSrcweir     aFxFocusLink.Call(this);
546cdf0e10cSrcweir }
547cdf0e10cSrcweir 
548cdf0e10cSrcweir /*************************************************************************
549cdf0e10cSrcweir #*  Member:     RefFocus                                    Datum:13.01.97
550cdf0e10cSrcweir #*------------------------------------------------------------------------
551cdf0e10cSrcweir #*
552cdf0e10cSrcweir #*  Klasse:     ArgInput
553cdf0e10cSrcweir #*
554cdf0e10cSrcweir #*  Funktion:   Gibt den Event weiter.
555cdf0e10cSrcweir #*
556cdf0e10cSrcweir #*  Input:      ---
557cdf0e10cSrcweir #*
558cdf0e10cSrcweir #*  Output:     ---
559cdf0e10cSrcweir #*
560cdf0e10cSrcweir #************************************************************************/
561cdf0e10cSrcweir void ArgInput::RefFocus()
562cdf0e10cSrcweir {
563cdf0e10cSrcweir     aRefFocusLink.Call(this);
564cdf0e10cSrcweir }
565cdf0e10cSrcweir 
566cdf0e10cSrcweir /*************************************************************************
567cdf0e10cSrcweir #*  Member:     EdFocus                                     Datum:13.01.97
568cdf0e10cSrcweir #*------------------------------------------------------------------------
569cdf0e10cSrcweir #*
570cdf0e10cSrcweir #*  Klasse:     ArgInput
571cdf0e10cSrcweir #*
572cdf0e10cSrcweir #*  Funktion:   Gibt den Event weiter.
573cdf0e10cSrcweir #*
574cdf0e10cSrcweir #*  Input:      ---
575cdf0e10cSrcweir #*
576cdf0e10cSrcweir #*  Output:     ---
577cdf0e10cSrcweir #*
578cdf0e10cSrcweir #************************************************************************/
579cdf0e10cSrcweir void ArgInput::EdFocus()
580cdf0e10cSrcweir {
581cdf0e10cSrcweir     aEdFocusLink.Call(this);
582cdf0e10cSrcweir }
583cdf0e10cSrcweir 
584cdf0e10cSrcweir /*************************************************************************
585cdf0e10cSrcweir #*  Member:     EdModify                                    Datum:13.01.97
586cdf0e10cSrcweir #*------------------------------------------------------------------------
587cdf0e10cSrcweir #*
588cdf0e10cSrcweir #*  Klasse:     ArgInput
589cdf0e10cSrcweir #*
590cdf0e10cSrcweir #*  Funktion:   Gibt den Event weiter.
591cdf0e10cSrcweir #*
592cdf0e10cSrcweir #*  Input:      ---
593cdf0e10cSrcweir #*
594cdf0e10cSrcweir #*  Output:     ---
595cdf0e10cSrcweir #*
596cdf0e10cSrcweir #************************************************************************/
597cdf0e10cSrcweir void ArgInput::EdModify()
598cdf0e10cSrcweir {
599cdf0e10cSrcweir     aEdModifyLink.Call(this);
600cdf0e10cSrcweir }
601cdf0e10cSrcweir 
602cdf0e10cSrcweir /*************************************************************************
603cdf0e10cSrcweir #*  Handle:     FxBtnHdl                                    Datum:13.01.97
604cdf0e10cSrcweir #*------------------------------------------------------------------------
605cdf0e10cSrcweir #*
606cdf0e10cSrcweir #*  Klasse:     ArgInput
607cdf0e10cSrcweir #*
608cdf0e10cSrcweir #*  Funktion:   Handle fuer Fx-Button Click-Event.
609cdf0e10cSrcweir #*
610cdf0e10cSrcweir #*  Input:      ---
611cdf0e10cSrcweir #*
612cdf0e10cSrcweir #*  Output:     ---
613cdf0e10cSrcweir #*
614cdf0e10cSrcweir #************************************************************************/
615cdf0e10cSrcweir IMPL_LINK( ArgInput, FxBtnClickHdl, ImageButton*, pBtn )
616cdf0e10cSrcweir {
617cdf0e10cSrcweir     if(pBtn==pBtnFx) FxClick();
618cdf0e10cSrcweir 
619cdf0e10cSrcweir     return 0;
620cdf0e10cSrcweir }
621cdf0e10cSrcweir 
622cdf0e10cSrcweir /*************************************************************************
623cdf0e10cSrcweir #*  Handle:     RefBtnClickHdl                              Datum:13.01.97
624cdf0e10cSrcweir #*------------------------------------------------------------------------
625cdf0e10cSrcweir #*
626cdf0e10cSrcweir #*  Klasse:     ArgInput
627cdf0e10cSrcweir #*
628cdf0e10cSrcweir #*  Funktion:   Handle fuer Fx-Button Click-Event.
629cdf0e10cSrcweir #*
630cdf0e10cSrcweir #*  Input:      ---
631cdf0e10cSrcweir #*
632cdf0e10cSrcweir #*  Output:     ---
633cdf0e10cSrcweir #*
634cdf0e10cSrcweir #************************************************************************/
635cdf0e10cSrcweir IMPL_LINK( ArgInput, RefBtnClickHdl,RefButton*, pBtn )
636cdf0e10cSrcweir {
637cdf0e10cSrcweir     if(pRefBtn==pBtn) RefClick();
638cdf0e10cSrcweir 
639cdf0e10cSrcweir     return 0;
640cdf0e10cSrcweir }
641cdf0e10cSrcweir 
642cdf0e10cSrcweir /*************************************************************************
643cdf0e10cSrcweir #*  Handle:     FxBtnFocusHdl                               Datum:13.01.97
644cdf0e10cSrcweir #*------------------------------------------------------------------------
645cdf0e10cSrcweir #*
646cdf0e10cSrcweir #*  Klasse:     ArgInput
647cdf0e10cSrcweir #*
648cdf0e10cSrcweir #*  Funktion:   Handle fuer Fx-Button Focus-Event.
649cdf0e10cSrcweir #*
650cdf0e10cSrcweir #*  Input:      ---
651cdf0e10cSrcweir #*
652cdf0e10cSrcweir #*  Output:     ---
653cdf0e10cSrcweir #*
654cdf0e10cSrcweir #************************************************************************/
655cdf0e10cSrcweir IMPL_LINK( ArgInput, FxBtnFocusHdl, ImageButton*, pBtn )
656cdf0e10cSrcweir {
657cdf0e10cSrcweir     if(pBtn==pBtnFx) FxFocus();
658cdf0e10cSrcweir 
659cdf0e10cSrcweir     return 0;
660cdf0e10cSrcweir }
661cdf0e10cSrcweir 
662cdf0e10cSrcweir /*************************************************************************
663cdf0e10cSrcweir #*  Handle:     RefBtnFocusHdl                              Datum:13.01.97
664cdf0e10cSrcweir #*------------------------------------------------------------------------
665cdf0e10cSrcweir #*
666cdf0e10cSrcweir #*  Klasse:     ArgInput
667cdf0e10cSrcweir #*
668cdf0e10cSrcweir #*  Funktion:   Handle fuer Fx-Button Focus-Event.
669cdf0e10cSrcweir #*
670cdf0e10cSrcweir #*  Input:      ---
671cdf0e10cSrcweir #*
672cdf0e10cSrcweir #*  Output:     ---
673cdf0e10cSrcweir #*
674cdf0e10cSrcweir #************************************************************************/
675cdf0e10cSrcweir IMPL_LINK( ArgInput, RefBtnFocusHdl,RefButton*, pBtn )
676cdf0e10cSrcweir {
677cdf0e10cSrcweir     if(pRefBtn==pBtn) RefFocus();
678cdf0e10cSrcweir 
679cdf0e10cSrcweir     return 0;
680cdf0e10cSrcweir }
681cdf0e10cSrcweir 
682cdf0e10cSrcweir /*************************************************************************
683cdf0e10cSrcweir #*  Handle:     EdFocusHdl                                  Datum:13.01.97
684cdf0e10cSrcweir #*------------------------------------------------------------------------
685cdf0e10cSrcweir #*
686cdf0e10cSrcweir #*  Klasse:     ArgInput
687cdf0e10cSrcweir #*
688cdf0e10cSrcweir #*  Funktion:   Handle fuer Fx-Button Focus-Event.
689cdf0e10cSrcweir #*
690cdf0e10cSrcweir #*  Input:      ---
691cdf0e10cSrcweir #*
692cdf0e10cSrcweir #*  Output:     ---
693cdf0e10cSrcweir #*
694cdf0e10cSrcweir #************************************************************************/
695cdf0e10cSrcweir IMPL_LINK( ArgInput, EdFocusHdl, ArgEdit*, pEd )
696cdf0e10cSrcweir {
697cdf0e10cSrcweir     if(pEd==pEdArg) EdFocus();
698cdf0e10cSrcweir 
699cdf0e10cSrcweir     return 0;
700cdf0e10cSrcweir }
701cdf0e10cSrcweir 
702cdf0e10cSrcweir /*************************************************************************
703cdf0e10cSrcweir #*  Handle:     RefBtnClickHdl                              Datum:13.01.97
704cdf0e10cSrcweir #*------------------------------------------------------------------------
705cdf0e10cSrcweir #*
706cdf0e10cSrcweir #*  Klasse:     ArgInput
707cdf0e10cSrcweir #*
708cdf0e10cSrcweir #*  Funktion:   Handle fuer Fx-Button Focus-Event.
709cdf0e10cSrcweir #*
710cdf0e10cSrcweir #*  Input:      ---
711cdf0e10cSrcweir #*
712cdf0e10cSrcweir #*  Output:     ---
713cdf0e10cSrcweir #*
714cdf0e10cSrcweir #************************************************************************/
715cdf0e10cSrcweir IMPL_LINK( ArgInput, EdModifyHdl,ArgEdit*, pEd )
716cdf0e10cSrcweir {
717cdf0e10cSrcweir     if(pEd==pEdArg) EdModify();
718cdf0e10cSrcweir 
719cdf0e10cSrcweir     return 0;
720cdf0e10cSrcweir }
721cdf0e10cSrcweir 
722cdf0e10cSrcweir /*************************************************************************
723cdf0e10cSrcweir #*  Member:     EditBox                                 Datum:20.01.97
724cdf0e10cSrcweir #*------------------------------------------------------------------------
725cdf0e10cSrcweir #*
726cdf0e10cSrcweir #*  Klasse:     EditBox
727cdf0e10cSrcweir #*
728cdf0e10cSrcweir #*  Funktion:   Konstruktor der Klasse ArgInput
729cdf0e10cSrcweir #*
730cdf0e10cSrcweir #*  Input:      Parent, Window-Style
731cdf0e10cSrcweir #*
732cdf0e10cSrcweir #*  Output:     ---
733cdf0e10cSrcweir #*
734cdf0e10cSrcweir #************************************************************************/
735cdf0e10cSrcweir EditBox::EditBox(   Window* pParent,WinBits nWinStyle)
736cdf0e10cSrcweir         :Control(pParent,nWinStyle|WB_DIALOGCONTROL)
737cdf0e10cSrcweir {
738cdf0e10cSrcweir     pMEdit=new MultiLineEdit(this,WB_LEFT | WB_VSCROLL | (nWinStyle & WB_TABSTOP) |
739cdf0e10cSrcweir                     WB_NOBORDER | WB_NOHIDESELECTION | WB_IGNORETAB);
740cdf0e10cSrcweir 
741cdf0e10cSrcweir     pMEdit->Show();
742cdf0e10cSrcweir     aOldSel=pMEdit->GetSelection();
743cdf0e10cSrcweir }
744cdf0e10cSrcweir 
745cdf0e10cSrcweir /*************************************************************************
746cdf0e10cSrcweir #*  Member:     EditBox                                 Datum:20.01.97
747cdf0e10cSrcweir #*------------------------------------------------------------------------
748cdf0e10cSrcweir #*
749cdf0e10cSrcweir #*  Klasse:     EditBox
750cdf0e10cSrcweir #*
751cdf0e10cSrcweir #*  Funktion:   Konstruktor der Klasse ArgInput
752cdf0e10cSrcweir #*
753cdf0e10cSrcweir #*  Input:      Parent, Resource
754cdf0e10cSrcweir #*
755cdf0e10cSrcweir #*  Output:     ---
756cdf0e10cSrcweir #*
757cdf0e10cSrcweir #************************************************************************/
758cdf0e10cSrcweir EditBox::EditBox( Window* pParent, const ResId& rResId )
759cdf0e10cSrcweir         :Control(pParent,rResId),
760cdf0e10cSrcweir         bMouseFlag(sal_False)
761cdf0e10cSrcweir {
762cdf0e10cSrcweir     WinBits nStyle=GetStyle();
763cdf0e10cSrcweir     SetStyle( nStyle| WB_DIALOGCONTROL);
764cdf0e10cSrcweir 
765cdf0e10cSrcweir     pMEdit=new MultiLineEdit(this,WB_LEFT | WB_VSCROLL | (nStyle & WB_TABSTOP) |
766cdf0e10cSrcweir                     WB_NOBORDER | WB_NOHIDESELECTION | WB_IGNORETAB);
767cdf0e10cSrcweir     pMEdit->Show();
768cdf0e10cSrcweir     aOldSel=pMEdit->GetSelection();
769cdf0e10cSrcweir     Resize();
770cdf0e10cSrcweir     WinBits nWinStyle=GetStyle() | WB_DIALOGCONTROL;
771cdf0e10cSrcweir     SetStyle(nWinStyle);
772cdf0e10cSrcweir 
773cdf0e10cSrcweir     //  #105582# the HelpId from the resource must be set for the MultiLineEdit,
774cdf0e10cSrcweir     //  not for the control that contains it.
775cdf0e10cSrcweir     pMEdit->SetHelpId( GetHelpId() );
776cdf0e10cSrcweir     SetHelpId( "" );
777cdf0e10cSrcweir }
778cdf0e10cSrcweir 
779cdf0e10cSrcweir EditBox::~EditBox()
780cdf0e10cSrcweir {
781cdf0e10cSrcweir     MultiLineEdit* pTheEdit=pMEdit;
782cdf0e10cSrcweir     pMEdit->Disable();
783cdf0e10cSrcweir     pMEdit=NULL;
784cdf0e10cSrcweir     delete pTheEdit;
785cdf0e10cSrcweir }
786cdf0e10cSrcweir /*************************************************************************
787cdf0e10cSrcweir #*  Member:     EditBox                                 Datum:20.01.97
788cdf0e10cSrcweir #*------------------------------------------------------------------------
789cdf0e10cSrcweir #*
790cdf0e10cSrcweir #*  Klasse:     EditBox
791cdf0e10cSrcweir #*
792cdf0e10cSrcweir #*  Funktion:   Wenn sich die Selektion geaendert hat, so wird
793cdf0e10cSrcweir #*              diese Funktion aufgerufen.
794cdf0e10cSrcweir #*
795cdf0e10cSrcweir #*  Input:      ---
796cdf0e10cSrcweir #*
797cdf0e10cSrcweir #*  Output:     ---
798cdf0e10cSrcweir #*
799cdf0e10cSrcweir #************************************************************************/
800cdf0e10cSrcweir void EditBox::SelectionChanged()
801cdf0e10cSrcweir {
802cdf0e10cSrcweir     aSelChangedLink.Call(this);
803cdf0e10cSrcweir }
804cdf0e10cSrcweir 
805cdf0e10cSrcweir /*************************************************************************
806cdf0e10cSrcweir #*  Member:     EditBox                                 Datum:20.05.98
807cdf0e10cSrcweir #*------------------------------------------------------------------------
808cdf0e10cSrcweir #*
809cdf0e10cSrcweir #*  Klasse:     EditBox
810cdf0e10cSrcweir #*
811cdf0e10cSrcweir #*  Funktion:   Wenn sich die Groesse geaendert hat, so muss
812cdf0e10cSrcweir #*              auch der MultiLineEdit angepasst werden..
813cdf0e10cSrcweir #*
814cdf0e10cSrcweir #*  Input:      ---
815cdf0e10cSrcweir #*
816cdf0e10cSrcweir #*  Output:     ---
817cdf0e10cSrcweir #*
818cdf0e10cSrcweir #************************************************************************/
819cdf0e10cSrcweir void EditBox::Resize()
820cdf0e10cSrcweir {
821cdf0e10cSrcweir     Size aSize=GetOutputSizePixel();
822cdf0e10cSrcweir     if(pMEdit!=NULL) pMEdit->SetOutputSizePixel(aSize);
823cdf0e10cSrcweir }
824cdf0e10cSrcweir 
825cdf0e10cSrcweir /*************************************************************************
826cdf0e10cSrcweir #*  Member:     GetFocus                                    Datum:26.05.98
827cdf0e10cSrcweir #*------------------------------------------------------------------------
828cdf0e10cSrcweir #*
829cdf0e10cSrcweir #*  Klasse:     EditBox
830cdf0e10cSrcweir #*
831cdf0e10cSrcweir #*  Funktion:   Wenn der Control aktiviert wird, so wird
832cdf0e10cSrcweir #*              die Selection aufgehoben und der Cursor ans
833cdf0e10cSrcweir #*              Ende gesetzt.
834cdf0e10cSrcweir #*
835cdf0e10cSrcweir #*  Input:      ---
836cdf0e10cSrcweir #*
837cdf0e10cSrcweir #*  Output:     ---
838cdf0e10cSrcweir #*
839cdf0e10cSrcweir #************************************************************************/
840cdf0e10cSrcweir void EditBox::GetFocus()
841cdf0e10cSrcweir {
842cdf0e10cSrcweir     if(pMEdit!=NULL)
843cdf0e10cSrcweir     {
844cdf0e10cSrcweir         pMEdit->GrabFocus();
845cdf0e10cSrcweir     }
846cdf0e10cSrcweir }
847cdf0e10cSrcweir 
848cdf0e10cSrcweir 
849cdf0e10cSrcweir 
850cdf0e10cSrcweir /*************************************************************************
851cdf0e10cSrcweir #*  Member:     EditBox                                 Datum:20.01.97
852cdf0e10cSrcweir #*------------------------------------------------------------------------
853cdf0e10cSrcweir #*
854cdf0e10cSrcweir #*  Klasse:     EditBox
855cdf0e10cSrcweir #*
856cdf0e10cSrcweir #*  Funktion:   Wenn ein Event ausgeloest wird, so wird diese Routine
857cdf0e10cSrcweir #*              zuerst aufgerufen und ein PostUserEvent verschickt.
858cdf0e10cSrcweir #*
859cdf0e10cSrcweir #*  Input:      Notify-Event
860cdf0e10cSrcweir #*
861cdf0e10cSrcweir #*  Output:     ---
862cdf0e10cSrcweir #*
863cdf0e10cSrcweir #************************************************************************/
864cdf0e10cSrcweir long EditBox::PreNotify( NotifyEvent& rNEvt )
865cdf0e10cSrcweir {
866cdf0e10cSrcweir     long nResult=sal_True;
867cdf0e10cSrcweir 
868cdf0e10cSrcweir     if(pMEdit==NULL) return nResult;
869cdf0e10cSrcweir 
870cdf0e10cSrcweir     sal_uInt16 nSwitch=rNEvt.GetType();
871cdf0e10cSrcweir     if(nSwitch==EVENT_KEYINPUT)// || nSwitch==EVENT_KEYUP)
872cdf0e10cSrcweir     {
873cdf0e10cSrcweir         const KeyCode& aKeyCode=rNEvt.GetKeyEvent()->GetKeyCode();
874cdf0e10cSrcweir         sal_uInt16 nKey=aKeyCode.GetCode();
875cdf0e10cSrcweir         if( (nKey==KEY_RETURN && !aKeyCode.IsShift()) || nKey==KEY_TAB )
876cdf0e10cSrcweir         {
877cdf0e10cSrcweir             nResult=GetParent()->Notify(rNEvt);
878cdf0e10cSrcweir         }
879cdf0e10cSrcweir         else
880cdf0e10cSrcweir         {
881cdf0e10cSrcweir             nResult=Control::PreNotify(rNEvt);
882cdf0e10cSrcweir             Application::PostUserEvent( LINK( this, EditBox, ChangedHdl ) );
883cdf0e10cSrcweir         }
884cdf0e10cSrcweir 
885cdf0e10cSrcweir     }
886cdf0e10cSrcweir     else
887cdf0e10cSrcweir     {
888cdf0e10cSrcweir         nResult=Control::PreNotify(rNEvt);
889cdf0e10cSrcweir 
890cdf0e10cSrcweir         if(nSwitch==EVENT_MOUSEBUTTONDOWN || nSwitch==EVENT_MOUSEBUTTONUP)
891cdf0e10cSrcweir         {
892cdf0e10cSrcweir             bMouseFlag=sal_True;
893cdf0e10cSrcweir             Application::PostUserEvent( LINK( this, EditBox, ChangedHdl ) );
894cdf0e10cSrcweir         }
895cdf0e10cSrcweir     }
896cdf0e10cSrcweir     return nResult;
897cdf0e10cSrcweir }
898cdf0e10cSrcweir 
899cdf0e10cSrcweir /*************************************************************************
900cdf0e10cSrcweir #*  Member:     EditBox                                 Datum:21.01.97
901cdf0e10cSrcweir #*------------------------------------------------------------------------
902cdf0e10cSrcweir #*
903cdf0e10cSrcweir #*  Klasse:     EditBox
904cdf0e10cSrcweir #*
905cdf0e10cSrcweir #*  Funktion:   Wenn ein Event ausgeloest wurde, so wird diese Routine
906cdf0e10cSrcweir #*              zuerst aufgerufen.
907cdf0e10cSrcweir #*
908cdf0e10cSrcweir #*  Input:      Key-Event
909cdf0e10cSrcweir #*
910cdf0e10cSrcweir #*  Output:     ---
911cdf0e10cSrcweir #*
912cdf0e10cSrcweir #************************************************************************/
913cdf0e10cSrcweir IMPL_LINK( EditBox, ChangedHdl, EditBox*, EMPTYARG )
914cdf0e10cSrcweir {
915cdf0e10cSrcweir     if(pMEdit!=NULL)
916cdf0e10cSrcweir     {
917cdf0e10cSrcweir         Selection aNewSel=pMEdit->GetSelection();
918cdf0e10cSrcweir 
919cdf0e10cSrcweir         if(aNewSel.Min()!=aOldSel.Min() || aNewSel.Max()!=aOldSel.Max())
920cdf0e10cSrcweir         {
921cdf0e10cSrcweir             SelectionChanged();
922cdf0e10cSrcweir             aOldSel=aNewSel;
923cdf0e10cSrcweir         }
924cdf0e10cSrcweir     }
925cdf0e10cSrcweir     return 0;
926cdf0e10cSrcweir }
927cdf0e10cSrcweir 
928cdf0e10cSrcweir void EditBox::UpdateOldSel()
929cdf0e10cSrcweir {
930cdf0e10cSrcweir     //  if selection is set for editing a function, store it as aOldSel,
931cdf0e10cSrcweir     //  so SelectionChanged isn't called in the next ChangedHdl call
932cdf0e10cSrcweir 
933cdf0e10cSrcweir     if (pMEdit)
934cdf0e10cSrcweir         aOldSel = pMEdit->GetSelection();
935cdf0e10cSrcweir }
936cdf0e10cSrcweir //----------------------------------------------------------------------------
937cdf0e10cSrcweir 
938cdf0e10cSrcweir //============================================================================
939cdf0e10cSrcweir //  class RefEdit
940cdf0e10cSrcweir //----------------------------------------------------------------------------
941cdf0e10cSrcweir 
942cdf0e10cSrcweir #define SC_ENABLE_TIME 100
943cdf0e10cSrcweir 
944cdf0e10cSrcweir RefEdit::RefEdit( Window* _pParent,IControlReferenceHandler* pParent, const ResId& rResId ) :
945cdf0e10cSrcweir     Edit( _pParent, rResId ),
946cdf0e10cSrcweir     pAnyRefDlg( pParent ),
947cdf0e10cSrcweir     bSilentFocus( sal_False )
948cdf0e10cSrcweir {
949cdf0e10cSrcweir     aTimer.SetTimeoutHdl( LINK( this, RefEdit, UpdateHdl ) );
950cdf0e10cSrcweir     aTimer.SetTimeout( SC_ENABLE_TIME );
951cdf0e10cSrcweir }
952cdf0e10cSrcweir 
953cdf0e10cSrcweir RefEdit::RefEdit( Window* pParent, const ResId& rResId ) :
954cdf0e10cSrcweir     Edit( pParent, rResId ),
955cdf0e10cSrcweir     pAnyRefDlg( NULL ),
956cdf0e10cSrcweir     bSilentFocus( sal_False )
957cdf0e10cSrcweir {
958cdf0e10cSrcweir }
959cdf0e10cSrcweir 
960cdf0e10cSrcweir RefEdit::~RefEdit()
961cdf0e10cSrcweir {
962cdf0e10cSrcweir     aTimer.SetTimeoutHdl( Link() );
963cdf0e10cSrcweir     aTimer.Stop();
964cdf0e10cSrcweir }
965cdf0e10cSrcweir 
966cdf0e10cSrcweir void RefEdit::SetRefString( const XubString& rStr )
967cdf0e10cSrcweir {
968cdf0e10cSrcweir     Edit::SetText( rStr );
969cdf0e10cSrcweir }
970cdf0e10cSrcweir 
971cdf0e10cSrcweir void RefEdit::SetText( const XubString& rStr )
972cdf0e10cSrcweir {
973cdf0e10cSrcweir     Edit::SetText( rStr );
974cdf0e10cSrcweir     UpdateHdl( &aTimer );
975cdf0e10cSrcweir }
976cdf0e10cSrcweir 
977cdf0e10cSrcweir void RefEdit::StartUpdateData()
978cdf0e10cSrcweir {
979cdf0e10cSrcweir     aTimer.Start();
980cdf0e10cSrcweir }
981cdf0e10cSrcweir 
982cdf0e10cSrcweir void RefEdit::SilentGrabFocus()
983cdf0e10cSrcweir {
984cdf0e10cSrcweir     bSilentFocus = sal_True;
985cdf0e10cSrcweir     GrabFocus();
986cdf0e10cSrcweir     bSilentFocus = sal_False;
987cdf0e10cSrcweir }
988cdf0e10cSrcweir 
989cdf0e10cSrcweir void RefEdit::SetRefDialog( IControlReferenceHandler* pDlg )
990cdf0e10cSrcweir {
991cdf0e10cSrcweir     pAnyRefDlg = pDlg;
992cdf0e10cSrcweir 
993cdf0e10cSrcweir     if( pDlg )
994cdf0e10cSrcweir     {
995cdf0e10cSrcweir         aTimer.SetTimeoutHdl( LINK( this, RefEdit, UpdateHdl ) );
996cdf0e10cSrcweir         aTimer.SetTimeout( SC_ENABLE_TIME );
997cdf0e10cSrcweir     }
998cdf0e10cSrcweir     else
999cdf0e10cSrcweir     {
1000cdf0e10cSrcweir         aTimer.SetTimeoutHdl( Link() );
1001cdf0e10cSrcweir         aTimer.Stop();
1002cdf0e10cSrcweir     }
1003cdf0e10cSrcweir }
1004cdf0e10cSrcweir 
1005cdf0e10cSrcweir void RefEdit::Modify()
1006cdf0e10cSrcweir {
1007cdf0e10cSrcweir     Edit::Modify();
1008cdf0e10cSrcweir     if( pAnyRefDlg )
1009cdf0e10cSrcweir         pAnyRefDlg->HideReference();
1010cdf0e10cSrcweir }
1011cdf0e10cSrcweir 
1012cdf0e10cSrcweir void RefEdit::KeyInput( const KeyEvent& rKEvt )
1013cdf0e10cSrcweir {
1014cdf0e10cSrcweir     const KeyCode& rKeyCode = rKEvt.GetKeyCode();
1015cdf0e10cSrcweir     if( pAnyRefDlg && !rKeyCode.GetModifier() && (rKeyCode.GetCode() == KEY_F2) )
1016cdf0e10cSrcweir         pAnyRefDlg->ReleaseFocus( this );
1017cdf0e10cSrcweir     else
1018cdf0e10cSrcweir         Edit::KeyInput( rKEvt );
1019cdf0e10cSrcweir }
1020cdf0e10cSrcweir 
1021cdf0e10cSrcweir void RefEdit::GetFocus()
1022cdf0e10cSrcweir {
1023cdf0e10cSrcweir     Edit::GetFocus();
1024cdf0e10cSrcweir     if( !bSilentFocus )
1025cdf0e10cSrcweir         StartUpdateData();
1026cdf0e10cSrcweir }
1027cdf0e10cSrcweir 
1028cdf0e10cSrcweir void RefEdit::LoseFocus()
1029cdf0e10cSrcweir {
1030cdf0e10cSrcweir     Edit::LoseFocus();
1031cdf0e10cSrcweir     if( pAnyRefDlg )
1032cdf0e10cSrcweir         pAnyRefDlg->HideReference();
1033cdf0e10cSrcweir }
1034cdf0e10cSrcweir 
1035cdf0e10cSrcweir IMPL_LINK( RefEdit, UpdateHdl, Timer*, EMPTYARG )
1036cdf0e10cSrcweir {
1037cdf0e10cSrcweir     if( pAnyRefDlg )
1038cdf0e10cSrcweir         pAnyRefDlg->ShowReference( GetText() );
1039cdf0e10cSrcweir     return 0;
1040cdf0e10cSrcweir }
1041cdf0e10cSrcweir 
1042cdf0e10cSrcweir 
1043cdf0e10cSrcweir //============================================================================
1044cdf0e10cSrcweir //  class RefButton
1045cdf0e10cSrcweir //----------------------------------------------------------------------------
1046cdf0e10cSrcweir RefButton::RefButton( Window* _pParent, const ResId& rResId) :
1047cdf0e10cSrcweir     ImageButton( _pParent, rResId ),
1048cdf0e10cSrcweir     aImgRefStart( ModuleRes( RID_BMP_REFBTN1 ) ),
1049cdf0e10cSrcweir     aImgRefStartHC( ModuleRes( RID_BMP_REFBTN1_H ) ),
1050cdf0e10cSrcweir     aImgRefDone( ModuleRes( RID_BMP_REFBTN2 ) ),
1051cdf0e10cSrcweir     aImgRefDoneHC( ModuleRes( RID_BMP_REFBTN2_H ) ),
1052cdf0e10cSrcweir     pAnyRefDlg( NULL ),
1053cdf0e10cSrcweir     pRefEdit( NULL )
1054cdf0e10cSrcweir {
1055cdf0e10cSrcweir     SetStartImage();
1056cdf0e10cSrcweir }
1057cdf0e10cSrcweir 
1058cdf0e10cSrcweir RefButton::RefButton( Window* _pParent, const ResId& rResId, RefEdit* pEdit, IControlReferenceHandler* _pDlg ) :
1059cdf0e10cSrcweir     ImageButton( _pParent, rResId ),
1060cdf0e10cSrcweir     aImgRefStart( ModuleRes( RID_BMP_REFBTN1 ) ),
1061cdf0e10cSrcweir     aImgRefStartHC( ModuleRes( RID_BMP_REFBTN1_H ) ),
1062cdf0e10cSrcweir     aImgRefDone( ModuleRes( RID_BMP_REFBTN2 ) ),
1063cdf0e10cSrcweir     aImgRefDoneHC( ModuleRes( RID_BMP_REFBTN2_H ) ),
1064cdf0e10cSrcweir     pAnyRefDlg( _pDlg ),
1065cdf0e10cSrcweir     pRefEdit( pEdit )
1066cdf0e10cSrcweir {
1067cdf0e10cSrcweir     SetStartImage();
1068cdf0e10cSrcweir }
1069cdf0e10cSrcweir 
1070cdf0e10cSrcweir void RefButton::SetStartImage()
1071cdf0e10cSrcweir {
1072cdf0e10cSrcweir     SetModeImage( aImgRefStart );
1073cdf0e10cSrcweir     SetModeImage( aImgRefStartHC, BMP_COLOR_HIGHCONTRAST );
1074cdf0e10cSrcweir }
1075cdf0e10cSrcweir 
1076cdf0e10cSrcweir void RefButton::SetEndImage()
1077cdf0e10cSrcweir {
1078cdf0e10cSrcweir     SetModeImage( aImgRefDone );
1079cdf0e10cSrcweir     SetModeImage( aImgRefDoneHC, BMP_COLOR_HIGHCONTRAST );
1080cdf0e10cSrcweir }
1081cdf0e10cSrcweir 
1082cdf0e10cSrcweir void RefButton::SetReferences( IControlReferenceHandler* pDlg, RefEdit* pEdit )
1083cdf0e10cSrcweir {
1084cdf0e10cSrcweir     pAnyRefDlg = pDlg;
1085cdf0e10cSrcweir     pRefEdit = pEdit;
1086cdf0e10cSrcweir }
1087cdf0e10cSrcweir 
1088cdf0e10cSrcweir //----------------------------------------------------------------------------
1089cdf0e10cSrcweir 
1090cdf0e10cSrcweir void RefButton::Click()
1091cdf0e10cSrcweir {
1092cdf0e10cSrcweir     if( pAnyRefDlg )
1093cdf0e10cSrcweir         pAnyRefDlg->ToggleCollapsed( pRefEdit, this );
1094cdf0e10cSrcweir }
1095cdf0e10cSrcweir 
1096cdf0e10cSrcweir void RefButton::KeyInput( const KeyEvent& rKEvt )
1097cdf0e10cSrcweir {
1098cdf0e10cSrcweir     const KeyCode& rKeyCode = rKEvt.GetKeyCode();
1099cdf0e10cSrcweir     if( pAnyRefDlg && !rKeyCode.GetModifier() && (rKeyCode.GetCode() == KEY_F2) )
1100cdf0e10cSrcweir         pAnyRefDlg->ReleaseFocus( pRefEdit );
1101cdf0e10cSrcweir     else
1102cdf0e10cSrcweir         ImageButton::KeyInput( rKEvt );
1103cdf0e10cSrcweir }
1104cdf0e10cSrcweir 
1105cdf0e10cSrcweir void RefButton::GetFocus()
1106cdf0e10cSrcweir {
1107cdf0e10cSrcweir     ImageButton::GetFocus();
1108cdf0e10cSrcweir     if( pRefEdit )
1109cdf0e10cSrcweir         pRefEdit->StartUpdateData();
1110cdf0e10cSrcweir }
1111cdf0e10cSrcweir 
1112cdf0e10cSrcweir void RefButton::LoseFocus()
1113cdf0e10cSrcweir {
1114cdf0e10cSrcweir     ImageButton::LoseFocus();
1115cdf0e10cSrcweir     if( pRefEdit )
1116cdf0e10cSrcweir         pRefEdit->Modify();
1117cdf0e10cSrcweir }
1118cdf0e10cSrcweir 
1119cdf0e10cSrcweir 
1120cdf0e10cSrcweir } // formula
1121