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