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