1b3f79822SAndrew Rist /**************************************************************
2b3f79822SAndrew Rist *
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
10b3f79822SAndrew Rist *
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.
19b3f79822SAndrew Rist *
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("; ")
SFX_IMPL_DOCKINGWINDOW(ScFunctionChildWindow,FID_FUNCTION_BOX)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
ScFunctionDockWin(SfxBindings * pBindingsP,SfxChildWindow * pCW,Window * pParent,const ResId & rResId)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)
122*4847afebSAndre Fischer 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
~ScFunctionDockWin()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
InitLRUList()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
UpdateLRUList()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
SetSize()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
SetLeftRightSize()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
SetTopBottonSize()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
SetMyWidthLeRi(Size & aNewSize)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
SetMyHeightLeRi(Size & aNewSize)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
SetMyWidthToBo(Size & aNewSize)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
SetMyHeightToBo(Size & aNewSize)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
SetDescription()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
Resizing(Size & rNewSize)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
Close()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 #************************************************************************/
CheckAlignment(SfxChildAlignment,SfxChildAlignment aChildAlign)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 #************************************************************************/
Notify(SfxBroadcaster &,const SfxHint &)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
Resize()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
UpdateFunctionList()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
DoEnter(sal_Bool)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
IMPL_LINK(ScFunctionDockWin,SelHdl,ListBox *,pLb)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
IMPL_LINK(ScFunctionDockWin,SetSelectionHdl,void *,pCtrl)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
IMPL_LINK(ScFunctionDockWin,SetSplitHdl,ScPrivatSplit *,pCtrl)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
ToggleFloatingMode()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
IMPL_LINK(ScFunctionDockWin,TimerHdl,Timer *,EMPTYARG)1100cdf0e10cSrcweir IMPL_LINK( ScFunctionDockWin, TimerHdl, Timer*, EMPTYARG )
1101cdf0e10cSrcweir {
1102cdf0e10cSrcweir CheckAlignment(eSfxOldAlignment,eSfxNewAlignment);
1103cdf0e10cSrcweir SetSize();
1104cdf0e10cSrcweir return 0;
1105cdf0e10cSrcweir }
1106cdf0e10cSrcweir
Initialize(SfxChildWinInfo * pInfo)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
FillInfo(SfxChildWinInfo & rInfo) const1157cdf0e10cSrcweir 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
UseSplitterInitPos()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
StateChanged(StateChangedType nStateChange)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