LCOV - code coverage report
Current view: top level - sc/source/ui/formdlg - dwfunctr.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 2 440 0.5 %
Date: 2014-11-03 Functions: 4 40 10.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 <comphelper/string.hxx>
      21             : #include <editeng/editview.hxx>
      22             : #include <sfx2/bindings.hxx>
      23             : #include <sfx2/dispatch.hxx>
      24             : #include <sfx2/objsh.hxx>
      25             : #include <sfx2/viewsh.hxx>
      26             : 
      27             : #include "sc.hrc"
      28             : #include "global.hxx"
      29             : #include "scresid.hxx"
      30             : #include "reffact.hxx"
      31             : #include "document.hxx"
      32             : #include "formulacell.hxx"
      33             : #include "scmod.hxx"
      34             : #include "inputhdl.hxx"
      35             : #include "tabvwsh.hxx"
      36             : #include "appoptio.hxx"
      37             : #include "compiler.hxx"
      38             : 
      39             : #include "dwfunctr.hrc"
      40             : #include "dwfunctr.hxx"
      41             : 
      42         152 : SFX_IMPL_DOCKINGWINDOW_WITHID( ScFunctionChildWindow, FID_FUNCTION_BOX )
      43             : 
      44             : /*************************************************************************
      45             : #*  Member:     ScFunctionChildWindow
      46             : #*------------------------------------------------------------------------
      47             : #*
      48             : #*  Klasse:     ScFunctionChildWindow
      49             : #*
      50             : #*  Funktion:   Konstruktor der Klasse ScFunctionChildWindow
      51             : #*              Ableitung vom SfxChildWindow als "Behaelter" fuer
      52             : #*              Funktions- Fenster in Clac
      53             : #*
      54             : #*  Input:      ---
      55             : #*
      56             : #*  Output:     ---
      57             : #*
      58             : #************************************************************************/
      59             : 
      60           0 : ScFunctionChildWindow::ScFunctionChildWindow( vcl::Window* pParentP,
      61             :                                     sal_uInt16 nId,
      62             :                                     SfxBindings* pBindings,
      63             :                                     SfxChildWinInfo* pInfo ) :
      64           0 :     SfxChildWindow( pParentP, nId )
      65             : {
      66             :     ScFunctionDockWin* pWin = new ScFunctionDockWin( pBindings, this,
      67           0 :                                         pParentP, ScResId( FID_FUNCTION_BOX ) );
      68           0 :     pWindow = pWin;
      69             : 
      70           0 :     eChildAlignment = SFX_ALIGN_RIGHT;
      71             : 
      72           0 :     pWin->Initialize( pInfo );
      73           0 : }
      74             : 
      75             : /*************************************************************************
      76             : #*  Member:     ScFunctionDockWin
      77             : #*------------------------------------------------------------------------
      78             : #*
      79             : #*  Klasse:     ScFunctionDockWin
      80             : #*
      81             : #*  Funktion:   Konstruktor der Klasse ScFunctionDockWin
      82             : #*
      83             : #*  Input:      Sfx- Verknuepfungen, Fenster, Resource
      84             : #*
      85             : #*  Output:     ---
      86             : #*
      87             : #************************************************************************/
      88             : 
      89           0 : ScFunctionDockWin::ScFunctionDockWin( SfxBindings* pBindingsP,
      90             :                 SfxChildWindow *pCW, vcl::Window* pParent, const ResId& rResId ) :
      91             : 
      92             :     SfxDockingWindow( pBindingsP, pCW, pParent, rResId ),
      93           0 :     aPrivatSplit    ( this, ResId( FT_SPLIT, *rResId.GetResMgr()  ),SC_SPLIT_VERT),
      94           0 :     aCatBox         ( this, ResId( CB_CAT, *rResId.GetResMgr()  ) ),
      95           0 :     aFuncList       ( this, ResId( LB_FUNC, *rResId.GetResMgr()  ) ),
      96           0 :     aDDFuncList     ( this, ResId( DDLB_FUNC, *rResId.GetResMgr()  ) ),
      97           0 :     aInsertButton   ( this, ResId( IMB_INSERT, *rResId.GetResMgr()  ) ),
      98           0 :     aFiFuncDesc     ( this, ResId( FI_FUNCDESC, *rResId.GetResMgr()  ) ),
      99             :     aOldSize        (0,0),
     100           0 :     pFuncDesc       (NULL)
     101             : {
     102           0 :     FreeResource();
     103           0 :     InitLRUList();
     104           0 :     SetStyle(GetStyle()|WB_CLIPCHILDREN);
     105             : 
     106           0 :     aTimer.SetTimeout(200);
     107           0 :     aTimer.SetTimeoutHdl(LINK( this, ScFunctionDockWin, TimerHdl));
     108             : 
     109           0 :     if (pCW != NULL)
     110           0 :         eSfxNewAlignment=GetAlignment();
     111             :     else
     112           0 :         eSfxNewAlignment=SFX_ALIGN_RIGHT;
     113           0 :     eSfxOldAlignment=eSfxNewAlignment;
     114           0 :     aFiFuncDesc.SetUpdateMode(true);
     115           0 :     pAllFuncList=&aFuncList;
     116           0 :     aDDFuncList.Disable();
     117           0 :     aDDFuncList.Hide();
     118           0 :     nArgs=0;
     119           0 :     nDockMode=0;
     120           0 :     bSizeFlag=false;
     121           0 :     aCatBox.SetDropDownLineCount(9);
     122           0 :     vcl::Font aFont=aFiFuncDesc.GetFont();
     123           0 :     aFont.SetColor(Color(COL_BLACK));
     124           0 :     aFiFuncDesc.SetFont(aFont);
     125           0 :     aFiFuncDesc.SetBackground( GetBackground() );       //! never transparent?
     126             : 
     127           0 :     Link aLink=LINK( this, ScFunctionDockWin, SelHdl);
     128           0 :     aCatBox.SetSelectHdl(aLink);
     129           0 :     aFuncList.SetSelectHdl(aLink);
     130           0 :     aDDFuncList.SetSelectHdl(aLink);
     131             : 
     132           0 :     Link a2Link=LINK( this, ScFunctionDockWin, SetSelectionHdl);
     133           0 :     aFuncList.SetDoubleClickHdl(a2Link);
     134           0 :     aDDFuncList.SetSelectHdl(aLink);
     135           0 :     aInsertButton.SetClickHdl(a2Link);
     136             : 
     137           0 :     Link a3Link=LINK( this, ScFunctionDockWin, SetSplitHdl);
     138           0 :     aPrivatSplit.SetCtrModifiedHdl(a3Link);
     139           0 :     StartListening( *pBindingsP, true );
     140             : 
     141           0 :     Point aTopLeft=aCatBox.GetPosPixel();
     142           0 :     OUString aString("ww");
     143           0 :     Size aTxtSize( aFiFuncDesc.GetTextWidth(aString), aFiFuncDesc.GetTextHeight() );
     144           0 :     nMinWidth=aTxtSize.Width()+aTopLeft.X()
     145           0 :             +2*aFuncList.GetPosPixel().X();
     146           0 :     nMinHeight=19*aTxtSize.Height();
     147           0 :     aCatBox.SelectEntryPos(0);
     148             : 
     149           0 :     Range aYRange(3*aTxtSize.Height()+aFuncList.GetPosPixel().Y(),
     150           0 :                 GetOutputSizePixel().Height()-2*aTxtSize.Height());
     151           0 :     aPrivatSplit.SetYRange(aYRange);
     152           0 :     SelHdl(&aCatBox);
     153           0 :     bInit = true;
     154           0 : }
     155             : 
     156             : /*************************************************************************
     157             : #*  Member:     ScFunctionDockWin
     158             : #*------------------------------------------------------------------------
     159             : #*
     160             : #*  Klasse:     ScFunctionDockWin
     161             : #*
     162             : #*  Funktion:   Destruktor der Klasse ScFunctionDockWin
     163             : #*
     164             : #*  Input:      ---
     165             : #*
     166             : #*  Output:     ---
     167             : #*
     168             : #************************************************************************/
     169             : 
     170           0 : ScFunctionDockWin::~ScFunctionDockWin()
     171             : {
     172           0 :     EndListening( GetBindings() );
     173           0 : }
     174             : 
     175             : /*************************************************************************
     176             : #*  Member:     UpdateFunctionList
     177             : #*------------------------------------------------------------------------
     178             : #*
     179             : #*  Klasse:     ScFunctionDockWin
     180             : #*
     181             : #*  Funktion:   Aktualisiert die Liste der Funktionen ab-
     182             : #*              haengig von der eingestellten Kategorie.
     183             : #*
     184             : #*  Input:      ---
     185             : #*
     186             : #*  Output:     ---
     187             : #*
     188             : #************************************************************************/
     189             : 
     190           0 : void ScFunctionDockWin::InitLRUList()
     191             : {
     192           0 :     ScFunctionMgr* pFuncMgr = ScGlobal::GetStarCalcFunctionMgr();
     193           0 :     pFuncMgr->fillLastRecentlyUsedFunctions(aLRUList);
     194             : 
     195           0 :     sal_Int32  nSelPos   = aCatBox.GetSelectEntryPos();
     196             : 
     197           0 :     if(nSelPos == 0)
     198           0 :         UpdateFunctionList();
     199           0 : }
     200             : 
     201             : /*************************************************************************
     202             : #*  Member:     UpdateFunctionList
     203             : #*------------------------------------------------------------------------
     204             : #*
     205             : #*  Klasse:     ScFunctionDockWin
     206             : #*
     207             : #*  Funktion:   Aktualisiert die Liste der zuletzt verwendeten Funktionen.
     208             : #*
     209             : #*  Input:      ---
     210             : #*
     211             : #*  Output:     ---
     212             : #*
     213             : #************************************************************************/
     214             : 
     215           0 : void ScFunctionDockWin::UpdateLRUList()
     216             : {
     217           0 :     if (pFuncDesc && pFuncDesc->nFIndex!=0)
     218             :     {
     219           0 :         ScModule* pScMod = SC_MOD();
     220           0 :         pScMod->InsertEntryToLRUList(pFuncDesc->nFIndex);
     221             :     }
     222           0 : }
     223             : 
     224             : /*************************************************************************
     225             : #*  Member:     SetSize
     226             : #*------------------------------------------------------------------------
     227             : #*
     228             : #*  Klasse:     ScFunctionDockWin
     229             : #*
     230             : #*  Funktion:   Groesse fuer die einzelnen Controls einzustellen.
     231             : #*
     232             : #*  Input:      ---
     233             : #*
     234             : #*  Output:     ---
     235             : #*
     236             : #************************************************************************/
     237             : 
     238           0 : void ScFunctionDockWin::SetSize()
     239             : {
     240           0 :     sal_Int32 nSelEntry=0;
     241           0 :     SfxChildAlignment  aChildAlign=eSfxOldAlignment;//GetAlignment();
     242             :     short nNewDockMode;
     243           0 :     switch(aChildAlign)
     244             :     {
     245             :         case SFX_ALIGN_HIGHESTTOP:
     246             :         case SFX_ALIGN_TOP:
     247             :         case SFX_ALIGN_LOWESTTOP:
     248             :         case SFX_ALIGN_LOWESTBOTTOM:
     249             :         case SFX_ALIGN_BOTTOM:
     250             :         case SFX_ALIGN_TOOLBOXTOP:
     251             :         case SFX_ALIGN_TOOLBOXBOTTOM:
     252             : 
     253           0 :                         nNewDockMode=1;
     254           0 :                         if(nDockMode!=nNewDockMode)
     255             :                         {
     256           0 :                             nDockMode=nNewDockMode;
     257           0 :                             nSelEntry=aFuncList.GetSelectEntryPos();
     258           0 :                             aFuncList.Clear();
     259           0 :                             aFiFuncDesc.SetPosPixel(aFuncList.GetPosPixel());
     260           0 :                             aDDFuncList.Enable();
     261           0 :                             aDDFuncList.Show();
     262           0 :                             aPrivatSplit.Disable();
     263           0 :                             aPrivatSplit.Hide();
     264           0 :                             aFuncList.Disable();
     265           0 :                             aFuncList.Hide();
     266           0 :                             pAllFuncList=&aDDFuncList;
     267           0 :                             SelHdl(&aCatBox);
     268           0 :                             aDDFuncList.SelectEntryPos(nSelEntry);
     269             :                         }
     270           0 :                         break;
     271             : 
     272           0 :         default:        nNewDockMode=0;
     273           0 :                         if(nDockMode!=nNewDockMode)
     274             :                         {
     275           0 :                             nDockMode=nNewDockMode;
     276           0 :                             nSelEntry=aDDFuncList.GetSelectEntryPos();
     277           0 :                             aDDFuncList.Clear();
     278           0 :                             aDDFuncList.Disable();
     279           0 :                             aDDFuncList.Hide();
     280           0 :                             aPrivatSplit.Enable();
     281           0 :                             aPrivatSplit.Show();
     282           0 :                             aFuncList.Enable();
     283           0 :                             aFuncList.Show();
     284           0 :                             pAllFuncList=&aFuncList;
     285           0 :                             SelHdl(&aCatBox);
     286           0 :                             aFuncList.SelectEntryPos(nSelEntry);
     287             :                         }
     288           0 :                         break;
     289             :     }
     290             : 
     291           0 :     if(nDockMode==0)
     292             :     {
     293           0 :         SetLeftRightSize();
     294             :     }
     295             :     else
     296             :     {
     297           0 :         SetTopBottonSize();
     298             :     }
     299           0 : }
     300             : /*************************************************************************
     301             : #*  Member:     SetLeftRightSize
     302             : #*------------------------------------------------------------------------
     303             : #*
     304             : #*  Klasse:     ScFunctionDockWin
     305             : #*
     306             : #*  Funktion:   Groesse fuer die einzelnen Controls einstellen,
     307             : #*              wenn Links oder Rechts angedockt wird.
     308             : #*
     309             : #*  Input:      ---
     310             : #*
     311             : #*  Output:     ---
     312             : #*
     313             : #************************************************************************/
     314             : 
     315           0 : void ScFunctionDockWin::SetLeftRightSize()
     316             : {
     317           0 :     if(!bSizeFlag)
     318             :     {
     319           0 :         bSizeFlag = true;
     320             : 
     321           0 :         Size aDiffSize=GetSizePixel();
     322           0 :         Size aNewSize=GetOutputSizePixel();
     323           0 :         aDiffSize.Width()-=aNewSize.Width();
     324           0 :         aDiffSize.Height()-=aNewSize.Height();
     325             : 
     326           0 :         OUString aString("ww");
     327           0 :         Size aTxtSize( aFuncList.GetTextWidth(aString), aFuncList.GetTextHeight() );
     328             : 
     329           0 :         Range aYRange(3*aTxtSize.Height()+aFuncList.GetPosPixel().Y(),
     330           0 :                     GetOutputSizePixel().Height()-2*aTxtSize.Height());
     331           0 :         aPrivatSplit.SetYRange(aYRange);
     332             : 
     333           0 :         if(aOldSize.Width()!=aNewSize.Width())
     334           0 :             SetMyWidthLeRi(aNewSize);
     335             : 
     336           0 :         if(aOldSize.Height()!=aNewSize.Height())
     337           0 :             SetMyHeightLeRi(aNewSize);
     338             : 
     339           0 :         aOldSize=aNewSize;
     340           0 :         aNewSize.Width()+=aDiffSize.Width();
     341           0 :         aNewSize.Height()+=aDiffSize.Height();
     342           0 :         bSizeFlag=false;
     343             :     }
     344             : 
     345           0 : }
     346             : /*************************************************************************
     347             : #*  Member:     SetTopBottonSize
     348             : #*------------------------------------------------------------------------
     349             : #*
     350             : #*  Klasse:     ScFunctionDockWin
     351             : #*
     352             : #*  Funktion:   Groesse fuer die einzelnen Controls einzustellen.
     353             : #*              wenn oben oder unten angedockt wird.
     354             : #*
     355             : #*  Input:      ---
     356             : #*
     357             : #*  Output:     ---
     358             : #*
     359             : #************************************************************************/
     360             : 
     361           0 : void ScFunctionDockWin::SetTopBottonSize()
     362             : {
     363           0 :     if(!bSizeFlag)
     364             :     {
     365           0 :         bSizeFlag = true;
     366           0 :         Size aDiffSize=GetSizePixel();
     367           0 :         Size aNewSize=GetOutputSizePixel();
     368           0 :         aDiffSize.Width()-=aNewSize.Width();
     369           0 :         aDiffSize.Height()-=aNewSize.Height();
     370             : 
     371           0 :         SetMyWidthToBo(aNewSize);
     372           0 :         SetMyHeightToBo(aNewSize);
     373             : 
     374           0 :         aNewSize.Width()+=aDiffSize.Width();
     375           0 :         aNewSize.Height()+=aDiffSize.Height();
     376           0 :         bSizeFlag=false;
     377             :     }
     378           0 : }
     379             : 
     380             : /*************************************************************************
     381             : #*  Member:     SetMyWidthLeRi
     382             : #*------------------------------------------------------------------------
     383             : #*
     384             : #*  Klasse:     ScFunctionDockWin
     385             : #*
     386             : #*  Funktion:   Breite fuer die einzelnen Controls und
     387             : #*              das Fenster einstellen,wenn Li oder Re
     388             : #*
     389             : #*  Input:      neue Fenstergroesse
     390             : #*
     391             : #*  Output:     ---
     392             : #*
     393             : #************************************************************************/
     394             : 
     395           0 : void ScFunctionDockWin::SetMyWidthLeRi(Size &aNewSize)
     396             : {
     397           0 :     if((sal_uLong)aNewSize.Width()<nMinWidth)   aNewSize.Width()=nMinWidth;
     398             : 
     399           0 :     Size aCDSize=aCatBox.GetSizePixel();
     400           0 :     Size aFLSize=aFuncList.GetSizePixel();
     401           0 :     Size aSplitterSize=aPrivatSplit.GetSizePixel();
     402           0 :     Size aFDSize=aFiFuncDesc.GetSizePixel();
     403             : 
     404           0 :     Point aCDTopLeft=aCatBox.GetPosPixel();
     405           0 :     Point aFLTopLeft=aFuncList.GetPosPixel();
     406             : 
     407           0 :     aCDSize.Width()=aNewSize.Width()-aCDTopLeft.X()-aFLTopLeft.X();
     408           0 :     aFLSize.Width()=aNewSize.Width()-2*aFLTopLeft.X();
     409           0 :     aFDSize.Width()=aFLSize.Width();
     410           0 :     aSplitterSize.Width()=aFLSize.Width();
     411             : 
     412           0 :     aCatBox.SetSizePixel(aCDSize);
     413           0 :     aFuncList.SetSizePixel(aFLSize);
     414           0 :     aPrivatSplit.SetSizePixel(aSplitterSize);
     415           0 :     aFiFuncDesc.SetSizePixel(aFDSize);
     416           0 : }
     417             : 
     418             : /*************************************************************************
     419             : #*  Member:     SetHeight
     420             : #*------------------------------------------------------------------------
     421             : #*
     422             : #*  Klasse:     ScFunctionDockWin
     423             : #*
     424             : #*  Funktion:   Hoehe fuer die einzelnen Controls und
     425             : #*              das Fenster einstellen bei Li oder Re
     426             : #*
     427             : #*  Input:      neue Fenstergroesse
     428             : #*
     429             : #*  Output:     ---
     430             : #*
     431             : #************************************************************************/
     432             : 
     433           0 : void ScFunctionDockWin::SetMyHeightLeRi(Size &aNewSize)
     434             : {
     435           0 :     if((sal_uLong)aNewSize.Height()<nMinHeight) aNewSize.Height()=nMinHeight;
     436             : 
     437           0 :     Size aFLSize=aFuncList.GetSizePixel();
     438           0 :     Size aSplitterSize=aPrivatSplit.GetSizePixel();
     439           0 :     Size aFDSize=aFiFuncDesc.GetSizePixel();
     440             : 
     441           0 :     Point aFLTopLeft=aFuncList.GetPosPixel();
     442           0 :     Point aSplitterTopLeft=aPrivatSplit.GetPosPixel();
     443           0 :     Point aFDTopLeft=aFiFuncDesc.GetPosPixel();
     444             : 
     445           0 :     long nTxtHeight = aFuncList.GetTextHeight();
     446             : 
     447             :     short nY=(short)(3*nTxtHeight+
     448           0 :         aFuncList.GetPosPixel().Y()+aSplitterSize.Height());
     449             : 
     450           0 :     aFDTopLeft.Y()=aNewSize.Height()-aFDSize.Height()-4;
     451           0 :     if(nY>aFDTopLeft.Y())
     452             :     {
     453           0 :         aFDSize.Height()-=nY-aFDTopLeft.Y();
     454           0 :         aFDTopLeft.Y()=nY;
     455             :     }
     456           0 :     aSplitterTopLeft.Y()=aFDTopLeft.Y()-aSplitterSize.Height()-1;
     457           0 :     aFLSize.Height()=aSplitterTopLeft.Y()-aFLTopLeft.Y()-1;
     458             : 
     459           0 :     aFuncList.SetSizePixel(aFLSize);
     460           0 :     aPrivatSplit.SetPosPixel(aSplitterTopLeft);
     461           0 :     aFiFuncDesc.SetPosPixel(aFDTopLeft);
     462           0 :     aFiFuncDesc.SetSizePixel(aFDSize);
     463             : 
     464           0 : }
     465             : 
     466             : /*************************************************************************
     467             : #*  Member:     SetMyWidthToBo
     468             : #*------------------------------------------------------------------------
     469             : #*
     470             : #*  Klasse:     ScFunctionDockWin
     471             : #*
     472             : #*  Funktion:   Breite fuer die einzelnen Controls und
     473             : #*              das Fenster einstellen, wenn oben oder
     474             : #*              unten angedockt werden soll.
     475             : #*
     476             : #*  Input:      neue Fenstergroesse
     477             : #*
     478             : #*  Output:     ---
     479             : #*
     480             : #************************************************************************/
     481             : 
     482           0 : void ScFunctionDockWin::SetMyWidthToBo(Size &aNewSize)
     483             : {
     484           0 :     if((sal_uLong)aNewSize.Width()<nMinWidth)   aNewSize.Width()=nMinWidth;
     485             : 
     486           0 :     Size aCDSize=aCatBox.GetSizePixel();
     487           0 :     Size aDdFLSize=aDDFuncList.GetSizePixel();
     488           0 :     Size aFDSize=aFiFuncDesc.GetSizePixel();
     489             : 
     490           0 :     Point aCDTopLeft=aCatBox.GetPosPixel();
     491           0 :     Point aDdFLTopLeft=aDDFuncList.GetPosPixel();
     492           0 :     Point aFDTopLeft=aFiFuncDesc.GetPosPixel();
     493             : 
     494           0 :     aCDSize.Width()=aDdFLTopLeft.X()-aFDTopLeft.X()-aCDTopLeft.X();
     495           0 :     aDdFLTopLeft.X()=aCDSize.Width()+aCDTopLeft.X()+aFDTopLeft.X();
     496             : 
     497           0 :     aDdFLSize.Width()=aNewSize.Width()-aDdFLTopLeft.X()-aFDTopLeft.X();
     498             : 
     499           0 :     aFDSize.Width()=aNewSize.Width()-2*aFDTopLeft.X();
     500             : 
     501           0 :     aDDFuncList.SetPosPixel(aDdFLTopLeft);
     502           0 :     aDDFuncList.SetSizePixel(aDdFLSize);
     503           0 :     aCatBox.SetSizePixel(aCDSize);
     504           0 :     aFiFuncDesc.SetSizePixel(aFDSize);
     505           0 : }
     506             : 
     507             : /*************************************************************************
     508             : #*  Member:     SetHeight
     509             : #*------------------------------------------------------------------------
     510             : #*
     511             : #*  Klasse:     ScFunctionDockWin
     512             : #*
     513             : #*  Funktion:   Hoehe fuer die einzelnen Controls und
     514             : #*              das Fenster einstellen, wenn oben oder
     515             : #*              unten angedockt werden soll.
     516             : #*
     517             : #*  Input:      neue Fenstergroesse
     518             : #*
     519             : #*  Output:     ---
     520             : #*
     521             : #************************************************************************/
     522             : 
     523           0 : void ScFunctionDockWin::SetMyHeightToBo(Size &aNewSize)
     524             : {
     525           0 :     if((sal_uLong)aNewSize.Height()<nMinHeight) aNewSize.Height()=nMinHeight;
     526             : 
     527           0 :     Size aFDSize=aFiFuncDesc.GetSizePixel();
     528             : 
     529           0 :     Point aFDTopLeft=aFiFuncDesc.GetPosPixel();
     530           0 :     Point aCBTopLeft=aCatBox.GetPosPixel();
     531           0 :     aFDSize.Height()=aNewSize.Height()-aFDTopLeft.Y()-aCBTopLeft.Y();
     532           0 :     aFiFuncDesc.SetSizePixel(aFDSize);
     533             : 
     534           0 : }
     535             : 
     536             : /*************************************************************************
     537             : #*  Member:     SetDescription
     538             : #*------------------------------------------------------------------------
     539             : #*
     540             : #*  Klasse:     ScFunctionDockWin
     541             : #*
     542             : #*  Funktion:   Erklaerungstext fuer die Funktion einstellen.
     543             : #*
     544             : #*  Input:      ---
     545             : #*
     546             : #*  Output:     ---
     547             : #*
     548             : #************************************************************************/
     549             : 
     550           0 : void ScFunctionDockWin::SetDescription()
     551             : {
     552           0 :     aFiFuncDesc.SetText( EMPTY_OUSTRING );
     553             :     const ScFuncDesc* pDesc =
     554             :              (const ScFuncDesc*)pAllFuncList->GetEntryData(
     555           0 :                     pAllFuncList->GetSelectEntryPos() );
     556           0 :     if (pDesc)
     557             :     {
     558           0 :         pDesc->initArgumentInfo();      // full argument info is needed
     559             : 
     560           0 :         OUStringBuffer aBuf(pAllFuncList->GetSelectEntry());
     561           0 :         if(nDockMode==0)
     562             :         {
     563           0 :             aBuf.appendAscii(":\n\n");
     564             :         }
     565             :         else
     566             :         {
     567           0 :             aBuf.appendAscii(":   ");
     568             :         }
     569             : 
     570           0 :         aBuf.append(pDesc->GetParamList());
     571             : 
     572           0 :         if(nDockMode==0)
     573             :         {
     574           0 :             aBuf.appendAscii("\n\n");
     575             :         }
     576             :         else
     577             :         {
     578           0 :             aBuf.appendAscii("\n");
     579             :         }
     580             : 
     581           0 :         aBuf.append(*pDesc->pFuncDesc);
     582             : 
     583           0 :         aFiFuncDesc.SetText(aBuf.makeStringAndClear());
     584           0 :         aFiFuncDesc.StateChanged(StateChangedType::TEXT);
     585           0 :         aFiFuncDesc.Invalidate();
     586           0 :         aFiFuncDesc.Update();
     587             : 
     588             :     }
     589           0 :  }
     590             : 
     591             : /*************************************************************************
     592             : #*  Member:     Resizing
     593             : #*------------------------------------------------------------------------
     594             : #*
     595             : #*  Klasse:     ScFunctionDockWin
     596             : #*
     597             : #*  Funktion:   Ueberladene Funktion um die Groesse der
     598             : #*              einzelnen Controls einzustellen.
     599             : #*
     600             : #*  Input:      neue Groesse
     601             : #*
     602             : #*  Output:     ---
     603             : #*
     604             : #************************************************************************/
     605             : 
     606           0 : void ScFunctionDockWin::Resizing( Size& rNewSize )
     607             : {
     608           0 :     if((sal_uLong)rNewSize.Width()<nMinWidth) rNewSize.Width()=nMinWidth;
     609           0 :     if((sal_uLong)rNewSize.Height()<nMinHeight) rNewSize.Height()=nMinHeight;
     610             : 
     611           0 : }
     612             : 
     613             : /*************************************************************************
     614             : #*  Member:     Close
     615             : #*------------------------------------------------------------------------
     616             : #*
     617             : #*  Klasse:     ScFunctionDockWin
     618             : #*
     619             : #*  Funktion:   Schliessen des Fensters
     620             : #*
     621             : #*  Input:      ---
     622             : #*
     623             : #*  Output:     TRUE
     624             : #*
     625             : #************************************************************************/
     626             : 
     627           0 : bool ScFunctionDockWin::Close()
     628             : {
     629           0 :     SfxBoolItem aItem( FID_FUNCTION_BOX, false );
     630             : 
     631           0 :     GetBindings().GetDispatcher()->Execute( FID_FUNCTION_BOX,
     632             :                                 SfxCallMode::ASYNCHRON | SfxCallMode::RECORD,
     633           0 :                                 &aItem, 0L );
     634             : 
     635           0 :     SfxDockingWindow::Close();
     636             : 
     637           0 :     return true;
     638             : }
     639             : 
     640             : /*************************************************************************
     641             : #*  Member:     CheckAlignment
     642             : #*------------------------------------------------------------------------
     643             : #*
     644             : #*  Klasse:     ScFunctionDockWin
     645             : #*
     646             : #*  Funktion:   Ueberprueft den Andockmodus und stellt die
     647             : #*              Groessen dementsprechend ein.
     648             : #*
     649             : #*  Input:      Das neue Alignment
     650             : #*
     651             : #*  Output:     Das uebergebene Alignment
     652             : #*
     653             : #************************************************************************/
     654           0 : SfxChildAlignment ScFunctionDockWin::CheckAlignment(SfxChildAlignment /* abla */,
     655             :                                 SfxChildAlignment aChildAlign)
     656             : {
     657           0 :     OUString aString("ww");
     658           0 :     Size aTxtSize( aFiFuncDesc.GetTextWidth(aString), aFiFuncDesc.GetTextHeight() );
     659           0 :     if(!bInit)
     660             :     {
     661           0 :         eSfxOldAlignment=eSfxNewAlignment;
     662           0 :         eSfxNewAlignment=aChildAlign;
     663             :     }
     664             :     else
     665             :     {
     666           0 :         bInit=false;
     667           0 :         eSfxOldAlignment=aChildAlign;
     668           0 :         eSfxNewAlignment=aChildAlign;
     669             :     }
     670             : 
     671           0 :     switch(eSfxOldAlignment)
     672             :     {
     673             :         case SFX_ALIGN_HIGHESTTOP:
     674             :         case SFX_ALIGN_TOP:
     675             :         case SFX_ALIGN_LOWESTTOP:
     676             :         case SFX_ALIGN_LOWESTBOTTOM:
     677             :         case SFX_ALIGN_BOTTOM:
     678             :         case SFX_ALIGN_TOOLBOXTOP:
     679             :         case SFX_ALIGN_TOOLBOXBOTTOM:
     680             : 
     681           0 :                         nMinWidth= 0;
     682           0 :                         nMinHeight=0;
     683             : 
     684           0 :                         break;
     685             : 
     686             :         case SFX_ALIGN_NOALIGNMENT:
     687             : 
     688           0 :                         aString = aCatBox.GetEntry(0);
     689           0 :                         aString += "www";
     690             :                         aTxtSize = Size( aFiFuncDesc.GetTextWidth(aString),
     691           0 :                                             aFiFuncDesc.GetTextHeight() );
     692             :                         // fall-through
     693           0 :         default:        Point aTopLeft=aCatBox.GetPosPixel();
     694           0 :                         nMinWidth=aTxtSize.Width()+aTopLeft.X()
     695           0 :                                 +2*aFuncList.GetPosPixel().X();
     696           0 :                         nMinHeight=19*aTxtSize.Height();
     697             : 
     698           0 :                         break;
     699             :     }
     700             : 
     701           0 :     return aChildAlign;
     702             : }
     703             : /*************************************************************************
     704             : #*  Member:     Close
     705             : #*------------------------------------------------------------------------
     706             : #*
     707             : #*  Klasse:     ScFunctionDockWin
     708             : #*
     709             : #*  Funktion:   Aenderungen erkennen
     710             : #*
     711             : #*  Input:      ---
     712             : #*
     713             : #*  Output:     TRUE
     714             : #*
     715             : #************************************************************************/
     716           0 : void ScFunctionDockWin::Notify( SfxBroadcaster&, const SfxHint& /* rHint */ )
     717             : {
     718           0 : }
     719             : 
     720             : /*************************************************************************
     721             : #*  Member:     Resize
     722             : #*------------------------------------------------------------------------
     723             : #*
     724             : #*  Klasse:     ScFunctionDockWin
     725             : #*
     726             : #*  Funktion:   Ueberladene Funktion um die Groesse der
     727             : #*              einzelnen Controls einzustellen.
     728             : #*
     729             : #*  Input:      neue Groesse
     730             : #*
     731             : #*  Output:     ---
     732             : #*
     733             : #************************************************************************/
     734             : 
     735           0 : void ScFunctionDockWin::Resize()
     736             : {
     737           0 :     if ( !IsFloatingMode() ||
     738           0 :          !GetFloatingWindow()->IsRollUp() )
     739             :     {
     740           0 :         Size aQSize=GetOutputSizePixel();
     741           0 :         Resizing( aQSize);
     742           0 :         SetSize();
     743             :     }
     744           0 :     SfxDockingWindow::Resize();
     745           0 : }
     746             : 
     747             : /*************************************************************************
     748             : #*  Member:     UpdateFunctionList
     749             : #*------------------------------------------------------------------------
     750             : #*
     751             : #*  Klasse:     ScFunctionDockWin
     752             : #*
     753             : #*  Funktion:   Aktualisiert die Liste der Funktionen ab-
     754             : #*              haengig von der eingestellten Kategorie.
     755             : #*
     756             : #*  Input:      ---
     757             : #*
     758             : #*  Output:     ---
     759             : #*
     760             : #************************************************************************/
     761             : 
     762           0 : void ScFunctionDockWin::UpdateFunctionList()
     763             : {
     764           0 :     sal_Int32  nSelPos   = aCatBox.GetSelectEntryPos();
     765             :     sal_Int32  nCategory = ( LISTBOX_ENTRY_NOTFOUND != nSelPos )
     766           0 :                             ? (nSelPos-1) : 0;
     767             : 
     768           0 :     pAllFuncList->Clear();
     769           0 :     pAllFuncList->SetUpdateMode( false );
     770             : 
     771           0 :     if ( nSelPos > 0 )
     772             :     {
     773           0 :         ScFunctionMgr* pFuncMgr = ScGlobal::GetStarCalcFunctionMgr();
     774             : 
     775           0 :         const ScFuncDesc* pDesc = pFuncMgr->First( nCategory );
     776           0 :         while ( pDesc )
     777             :         {
     778             :             pAllFuncList->SetEntryData(
     779             :                 pAllFuncList->InsertEntry( *(pDesc->pFuncName) ),
     780           0 :                 (void*)pDesc );
     781           0 :             pDesc = pFuncMgr->Next();
     782             :         }
     783             :     }
     784             :     else // LRU-Liste
     785             :     {
     786           0 :         for (::std::vector<const formula::IFunctionDescription*>::iterator iter=aLRUList.begin();
     787           0 :                 iter != aLRUList.end(); ++iter)
     788             :         {
     789           0 :             const formula::IFunctionDescription* pDesc = *iter;
     790           0 :             if (pDesc)
     791           0 :                 pAllFuncList->SetEntryData( pAllFuncList->InsertEntry( pDesc->getFunctionName()), (void*)pDesc);
     792             :         }
     793             :     }
     794             : 
     795           0 :     pAllFuncList->SetUpdateMode( true );
     796             : 
     797           0 :     if ( pAllFuncList->GetEntryCount() > 0 )
     798             :     {
     799           0 :         pAllFuncList->Enable();
     800           0 :         pAllFuncList->SelectEntryPos( 0 );
     801             :     }
     802             :     else
     803             :     {
     804           0 :         pAllFuncList->Disable();
     805             :     }
     806           0 : }
     807             : 
     808             : /*************************************************************************
     809             : #*  Member:     DoEnter
     810             : #*------------------------------------------------------------------------
     811             : #*
     812             : #*  Klasse:     ScFunctionDockWin
     813             : #*
     814             : #*  Funktion:   Eingabe ins Dokument uebernehmen. Wird aufgerufen
     815             : #*              nach betaetigen der Uebernehmen- Schaltflaeche
     816             : #*              oder einem Doppelklick in die Funktionsliste.
     817             : #*
     818             : #*  Input:      ---
     819             : #*
     820             : #*  Output:     ---
     821             : #*
     822             : #************************************************************************/
     823             : 
     824           0 : void ScFunctionDockWin::DoEnter()
     825             : {
     826           0 :     OUString aFirstArgStr;
     827           0 :     OUString aArgStr;
     828           0 :     OUString aString=pAllFuncList->GetSelectEntry();
     829           0 :     SfxViewShell* pCurSh = SfxViewShell::Current();
     830           0 :     nArgs=0;
     831             : 
     832           0 :     if(!aString.isEmpty())
     833             :     {
     834             : 
     835           0 :         ScModule* pScMod = SC_MOD();
     836           0 :         ScTabViewShell* pViewSh = PTR_CAST( ScTabViewShell, pCurSh);
     837           0 :         ScInputHandler* pHdl = pScMod->GetInputHdl( pViewSh );
     838           0 :         if(!pScMod->IsEditMode())
     839             :         {
     840           0 :             pScMod->SetInputMode(SC_INPUT_TABLE);
     841           0 :             aString = "=";
     842           0 :             aString += pAllFuncList->GetSelectEntry();
     843           0 :             if (pHdl)
     844           0 :                 pHdl->ClearText();
     845             :         }
     846             :         const ScFuncDesc* pDesc =
     847             :              (const ScFuncDesc*)pAllFuncList->GetEntryData(
     848           0 :                     pAllFuncList->GetSelectEntryPos() );
     849           0 :         if (pDesc)
     850             :         {
     851           0 :             pFuncDesc=pDesc;
     852           0 :             UpdateLRUList();
     853           0 :             nArgs = pDesc->nArgCount;
     854           0 :             if(nArgs>0)
     855             :             {
     856             :                 // NOTE: Theoretically the first parameter could have the
     857             :                 // suppress flag as well, but practically it doesn't.
     858           0 :                 aFirstArgStr = pDesc->maDefArgNames[0];
     859           0 :                 aFirstArgStr = comphelper::string::strip(aFirstArgStr, ' ');
     860           0 :                 aFirstArgStr = aFirstArgStr.replaceAll(" ", "_");
     861           0 :                 aArgStr = aFirstArgStr;
     862           0 :                 if ( nArgs != VAR_ARGS && nArgs != PAIRED_VAR_ARGS )
     863             :                 {   // no VarArgs or Fix plus VarArgs, but not VarArgs only
     864           0 :                     OUString aArgSep("; ");
     865             :                     sal_uInt16 nFix;
     866           0 :                     if (nArgs >= PAIRED_VAR_ARGS)
     867           0 :                         nFix = nArgs - PAIRED_VAR_ARGS + 2;
     868           0 :                     else if (nArgs >= VAR_ARGS)
     869           0 :                         nFix = nArgs - VAR_ARGS + 1;
     870             :                     else
     871           0 :                         nFix = nArgs;
     872           0 :                     for ( sal_uInt16 nArg = 1;
     873           0 :                             nArg < nFix && !pDesc->pDefArgFlags[nArg].bOptional; nArg++ )
     874             :                     {
     875           0 :                         if (!pDesc->pDefArgFlags[nArg].bSuppress)
     876             :                         {
     877           0 :                             aArgStr += aArgSep;
     878           0 :                             OUString sTmp = pDesc->maDefArgNames[nArg];
     879           0 :                             sTmp = comphelper::string::strip(sTmp, ' ');
     880           0 :                             sTmp = sTmp.replaceAll(" ", "_");
     881           0 :                             aArgStr += sTmp;
     882             :                         }
     883           0 :                     }
     884             :                 }
     885             :             }
     886             :         }
     887           0 :         if (pHdl)
     888             :         {
     889           0 :             if (pHdl->GetEditString().isEmpty())
     890             :             {
     891           0 :                 aString = "=";
     892           0 :                 aString += pAllFuncList->GetSelectEntry();
     893             :             }
     894           0 :             EditView *pEdView=pHdl->GetActiveView();
     895           0 :             if(pEdView!=NULL) // @ Wegen Absturz bei Namen festlegen
     896             :             {
     897           0 :                 if(nArgs>0)
     898             :                 {
     899           0 :                     pHdl->InsertFunction(aString);
     900           0 :                     pEdView->InsertText(aArgStr,true);
     901           0 :                     ESelection  aESel=pEdView->GetSelection();
     902           0 :                     aESel.nEndPos = aESel.nStartPos + aFirstArgStr.getLength();
     903           0 :                     pEdView->SetSelection(aESel);
     904           0 :                     pHdl->DataChanged();
     905             :                 }
     906             :                 else
     907             :                 {
     908           0 :                     aString += "()";
     909           0 :                     pEdView->InsertText(aString,false);
     910           0 :                     pHdl->DataChanged();
     911             :                 }
     912             :             }
     913             :         }
     914           0 :         InitLRUList();
     915             :     }
     916           0 :     if ( pCurSh )
     917             :     {
     918           0 :         vcl::Window* pShellWnd = pCurSh->GetWindow();
     919             : 
     920           0 :         if ( pShellWnd )
     921           0 :             pShellWnd->GrabFocus();
     922           0 :     }
     923             : 
     924           0 : }
     925             : 
     926             : /*************************************************************************
     927             : #*  Handle:     SelHdl
     928             : #*------------------------------------------------------------------------
     929             : #*
     930             : #*  Klasse:     ScFunctionDockWin
     931             : #*
     932             : #*  Funktion:   Bei einer Aenderung der Kategorie wird die
     933             : #*              die Liste der Funktionen aktualisiert.
     934             : #*
     935             : #*  Input:      ---
     936             : #*
     937             : #*  Output:     ---
     938             : #*
     939             : #************************************************************************/
     940             : 
     941           0 : IMPL_LINK( ScFunctionDockWin, SelHdl, ListBox*, pLb )
     942             : {
     943           0 :     if ( pLb == &aCatBox)
     944             :     {
     945           0 :         UpdateFunctionList();
     946           0 :         SetDescription();
     947             :     }
     948             : 
     949           0 :     if ( pLb == &aFuncList||pLb == &aDDFuncList)
     950             :     {
     951           0 :         SetDescription();
     952             :     }
     953             : 
     954             :     //SetSize();
     955           0 :     return 0;
     956             : }
     957             : 
     958             : /*************************************************************************
     959             : #*  Handle:     SelHdl
     960             : #*------------------------------------------------------------------------
     961             : #*
     962             : #*  Klasse:     ScFunctionDockWin
     963             : #*
     964             : #*  Funktion:   Bei einer Aenderung der Kategorie wird die
     965             : #*              die Liste der Funktionen aktualisiert.
     966             : #*
     967             : #*  Input:      ---
     968             : #*
     969             : #*  Output:     ---
     970             : #*
     971             : #************************************************************************/
     972             : 
     973           0 : IMPL_LINK( ScFunctionDockWin, SetSelectionHdl, void*, pCtrl )
     974             : {
     975           0 :     if ((ImageButton *)pCtrl == &aInsertButton ||
     976           0 :         (ListBox *)pCtrl == &aFuncList)
     977             :     {
     978           0 :         DoEnter();          // Uebernimmt die Eingabe
     979             :     }
     980             : 
     981           0 :     return 0;
     982             : }
     983             : 
     984             : /*************************************************************************
     985             : #*  Handle:     SetSplitHdl
     986             : #*------------------------------------------------------------------------
     987             : #*
     988             : #*  Klasse:     ScFunctionDockWin
     989             : #*
     990             : #*  Funktion:   Bei einer Aenderung des Split- Controls werden die
     991             : #*              einzelnen Controls an die neue Groesse angepasst.
     992             : #*
     993             : #*  Input:      Zeiger auf Control
     994             : #*
     995             : #*  Output:     ---
     996             : #*
     997             : #************************************************************************/
     998             : 
     999           0 : IMPL_LINK( ScFunctionDockWin, SetSplitHdl, ScPrivatSplit*, pCtrl )
    1000             : {
    1001           0 :     if (pCtrl == &aPrivatSplit)
    1002             :     {
    1003           0 :         short nDeltaY=aPrivatSplit.GetDeltaY();
    1004           0 :         Size aFLSize=aFuncList.GetSizePixel();
    1005           0 :         Size aFDSize=aFiFuncDesc.GetSizePixel();
    1006           0 :         Point aFDTopLeft=aFiFuncDesc.GetPosPixel();
    1007             : 
    1008           0 :         aFLSize.Height()+=nDeltaY;
    1009           0 :         aFDSize.Height()-=nDeltaY;
    1010           0 :         aFDTopLeft.Y()+=nDeltaY;
    1011           0 :         aFuncList.SetSizePixel(aFLSize);
    1012           0 :         aFiFuncDesc.SetPosPixel(aFDTopLeft);
    1013           0 :         aFiFuncDesc.SetSizePixel(aFDSize);
    1014             :     }
    1015             : 
    1016           0 :     return 0;
    1017             : }
    1018             : 
    1019           0 : void ScFunctionDockWin::ToggleFloatingMode()
    1020             : {
    1021           0 :     aSplitterInitPos = Point();
    1022           0 :     SfxDockingWindow::ToggleFloatingMode();
    1023             : 
    1024           0 :     eSfxNewAlignment=GetAlignment();
    1025           0 :     eSfxOldAlignment=eSfxNewAlignment;
    1026             : 
    1027           0 :     aOldSize.Height()=0;
    1028           0 :     aOldSize.Width()=0;
    1029           0 :     aTimer.Start();
    1030           0 : }
    1031             : 
    1032           0 : IMPL_LINK_NOARG(ScFunctionDockWin, TimerHdl)
    1033             : {
    1034           0 :     CheckAlignment(eSfxOldAlignment,eSfxNewAlignment);
    1035           0 :     SetSize();
    1036           0 :     return 0;
    1037             : }
    1038             : 
    1039           0 : void ScFunctionDockWin::Initialize(SfxChildWinInfo *pInfo)
    1040             : {
    1041           0 :     OUString aStr;
    1042           0 :     if(pInfo!=NULL)
    1043             :     {
    1044           0 :         if ( !pInfo->aExtraString.isEmpty() )
    1045             :         {
    1046           0 :             sal_Int32 nPos = pInfo->aExtraString.indexOf( "ScFuncList:" );
    1047             : 
    1048             :             // Versuche, den Alignment-String "ALIGN:(...)" einzulesen; wenn
    1049             :             // er nicht vorhanden ist, liegt eine "altere Version vor
    1050           0 :             if ( nPos != -1 )
    1051             :             {
    1052           0 :                 sal_Int32 n1 = pInfo->aExtraString.indexOf('(', nPos);
    1053           0 :                 if ( n1 != -1 )
    1054             :                 {
    1055           0 :                     sal_Int32 n2 = pInfo->aExtraString.indexOf(')', n1);
    1056           0 :                     if ( n2 != -1 )
    1057             :                     {
    1058             :                         // Alignment-String herausschneiden
    1059           0 :                         aStr = pInfo->aExtraString.copy(nPos, n2 - nPos + 1);
    1060           0 :                         pInfo->aExtraString = pInfo->aExtraString.replaceAt(nPos, n2 - nPos + 1, "");
    1061           0 :                         aStr = aStr.copy( n1-nPos+1 );
    1062             :                     }
    1063             :                 }
    1064             :             }
    1065             :         }
    1066             :     }
    1067           0 :     SfxDockingWindow::Initialize(pInfo);
    1068             : 
    1069           0 :     if ( !aStr.isEmpty())
    1070             :     {
    1071           0 :         aSplitterInitPos = aPrivatSplit.GetPosPixel();
    1072           0 :         aSplitterInitPos.Y() = (sal_uInt16) aStr.toInt32();
    1073           0 :         sal_Int32 n1 = aStr.indexOf(';');
    1074           0 :         aStr = aStr.copy( n1+1 );
    1075           0 :         sal_Int32 nSelPos = aStr.toInt32();
    1076           0 :         aCatBox.SelectEntryPos(nSelPos);
    1077           0 :         SelHdl(&aCatBox);
    1078             : 
    1079             :         //  if the window has already been shown (from SfxDockingWindow::Initialize if docked),
    1080             :         //  set the splitter position now, otherwise it is set in StateChanged with type INITSHOW
    1081             : 
    1082           0 :         UseSplitterInitPos();
    1083           0 :     }
    1084           0 : }
    1085             : 
    1086           0 : void ScFunctionDockWin::FillInfo(SfxChildWinInfo& rInfo) const
    1087             : {
    1088           0 :     SfxDockingWindow::FillInfo(rInfo);
    1089           0 :     Point aPoint=aPrivatSplit.GetPosPixel();
    1090           0 :     rInfo.aExtraString += "ScFuncList:(" +
    1091           0 :                           OUString::number(aPoint.Y()) + ";" +
    1092           0 :                           OUString::number(aCatBox.GetSelectEntryPos()) + ")";
    1093           0 : }
    1094             : 
    1095           0 : void ScFunctionDockWin::UseSplitterInitPos()
    1096             : {
    1097           0 :     if ( IsVisible() && aPrivatSplit.IsEnabled() && aSplitterInitPos != Point() )
    1098             :     {
    1099           0 :         aPrivatSplit.MoveSplitTo(aSplitterInitPos);
    1100           0 :         aSplitterInitPos = Point();     // use only once
    1101             :     }
    1102           0 : }
    1103             : 
    1104           0 : void ScFunctionDockWin::StateChanged( StateChangedType nStateChange )
    1105             : {
    1106           0 :     SfxDockingWindow::StateChanged( nStateChange );
    1107             : 
    1108           0 :     if (nStateChange == StateChangedType::INITSHOW)
    1109             :     {
    1110           0 :         UseSplitterInitPos();           //  set initial splitter position if necessary
    1111             :     }
    1112         228 : }
    1113             : 
    1114             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10