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