LCOV - code coverage report
Current view: top level - formula/source/ui/dlg - funcutl.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 356 0.0 %
Date: 2014-04-14 Functions: 0 72 0.0 %
Legend: Lines: hit not hit

          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: */

Generated by: LCOV version 1.10