1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_formula.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
28*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
29*b1cdbd2cSJim Jagielski #include <sfx2/docfile.hxx>
30*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
31*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
32*b1cdbd2cSJim Jagielski #include <vcl/mnemonic.hxx>
33*b1cdbd2cSJim Jagielski #include <vcl/tabpage.hxx>
34*b1cdbd2cSJim Jagielski #include <vcl/tabctrl.hxx>
35*b1cdbd2cSJim Jagielski #include <vcl/lstbox.hxx>
36*b1cdbd2cSJim Jagielski #include <vcl/group.hxx>
37*b1cdbd2cSJim Jagielski #include <vcl/wall.hxx>
38*b1cdbd2cSJim Jagielski
39*b1cdbd2cSJim Jagielski #include <svtools/stdctrl.hxx>
40*b1cdbd2cSJim Jagielski #include <svtools/svmedit.hxx>
41*b1cdbd2cSJim Jagielski #include <svtools/svtreebx.hxx>
42*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
43*b1cdbd2cSJim Jagielski #include <svl/zforlist.hxx>
44*b1cdbd2cSJim Jagielski #include <svl/eitem.hxx>
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski #include <unotools/charclass.hxx>
47*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
48*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
49*b1cdbd2cSJim Jagielski
50*b1cdbd2cSJim Jagielski #include "formdlgs.hrc"
51*b1cdbd2cSJim Jagielski #include "funcpage.hxx"
52*b1cdbd2cSJim Jagielski #include "formula/formula.hxx"
53*b1cdbd2cSJim Jagielski #include "formula/IFunctionDescription.hxx"
54*b1cdbd2cSJim Jagielski #include "formula/FormulaCompiler.hxx"
55*b1cdbd2cSJim Jagielski #include "formula/token.hxx"
56*b1cdbd2cSJim Jagielski #include "formula/tokenarray.hxx"
57*b1cdbd2cSJim Jagielski #include "formula/formdata.hxx"
58*b1cdbd2cSJim Jagielski #include "formula/formulahelper.hxx"
59*b1cdbd2cSJim Jagielski #include "structpg.hxx"
60*b1cdbd2cSJim Jagielski #include "parawin.hxx"
61*b1cdbd2cSJim Jagielski #include "ModuleHelper.hxx"
62*b1cdbd2cSJim Jagielski #include "ForResId.hrc"
63*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/FormulaToken.hpp>
64*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/FormulaLanguage.hpp>
65*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/FormulaMapGroup.hpp>
66*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/FormulaMapGroupSpecialOffset.hpp>
67*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
68*b1cdbd2cSJim Jagielski #include <boost/bind.hpp>
69*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
70*b1cdbd2cSJim Jagielski #include <map>
71*b1cdbd2cSJim Jagielski
72*b1cdbd2cSJim Jagielski #define TOKEN_OPEN 0
73*b1cdbd2cSJim Jagielski #define TOKEN_CLOSE 1
74*b1cdbd2cSJim Jagielski #define TOKEN_SEP 2
75*b1cdbd2cSJim Jagielski namespace formula
76*b1cdbd2cSJim Jagielski {
77*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski class OFormulaToken : public IFormulaToken
80*b1cdbd2cSJim Jagielski {
81*b1cdbd2cSJim Jagielski sal_Int32 m_nParaCount;
82*b1cdbd2cSJim Jagielski bool m_bIsFunction;
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski public:
OFormulaToken(bool _bFunction,sal_Int32 _nParaCount)85*b1cdbd2cSJim Jagielski OFormulaToken(bool _bFunction,sal_Int32 _nParaCount) : m_nParaCount(_nParaCount),m_bIsFunction(_bFunction){}
86*b1cdbd2cSJim Jagielski
isFunction() const87*b1cdbd2cSJim Jagielski virtual bool isFunction() const { return m_bIsFunction; }
getArgumentCount() const88*b1cdbd2cSJim Jagielski virtual sal_uInt32 getArgumentCount() const { return m_nParaCount; }
89*b1cdbd2cSJim Jagielski };
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski
92*b1cdbd2cSJim Jagielski class FormulaDlg_Impl
93*b1cdbd2cSJim Jagielski {
94*b1cdbd2cSJim Jagielski public:
95*b1cdbd2cSJim Jagielski ::std::pair<RefButton*,RefEdit*>
96*b1cdbd2cSJim Jagielski RefInputStartBefore( RefEdit* pEdit, RefButton* pButton );
97*b1cdbd2cSJim Jagielski void RefInputStartAfter( RefEdit* pEdit, RefButton* pButton );
98*b1cdbd2cSJim Jagielski void RefInputDoneAfter( sal_Bool bForced );
99*b1cdbd2cSJim Jagielski sal_Bool CalcValue( const String& rStrExp, String& rStrResult );
100*b1cdbd2cSJim Jagielski sal_Bool CalcStruct( const String& rStrExp);
101*b1cdbd2cSJim Jagielski void UpdateValues();
102*b1cdbd2cSJim Jagielski void DeleteArgs();
103*b1cdbd2cSJim Jagielski xub_StrLen GetFunctionPos(xub_StrLen nPos);
104*b1cdbd2cSJim Jagielski void ClearAllParas();
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski void MakeTree(IStructHelper* _pTree,SvLBoxEntry* pParent,FormulaToken* _pToken,long Count);
107*b1cdbd2cSJim Jagielski void fillTree(IStructHelper* _pTree);
108*b1cdbd2cSJim Jagielski void UpdateTokenArray( const String& rStrExp);
109*b1cdbd2cSJim Jagielski String RepairFormula(const String& aFormula);
110*b1cdbd2cSJim Jagielski void FillDialog(sal_Bool nFlag=sal_True);
111*b1cdbd2cSJim Jagielski void EditNextFunc( sal_Bool bForward, xub_StrLen nFStart=NOT_FOUND );
112*b1cdbd2cSJim Jagielski void EditThisFunc(xub_StrLen nFStart);
113*b1cdbd2cSJim Jagielski void EditFuncParas(xub_StrLen nEditPos);
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski
116*b1cdbd2cSJim Jagielski void UpdateArgInput( sal_uInt16 nOffset, sal_uInt16 nInput );
117*b1cdbd2cSJim Jagielski void Update();
118*b1cdbd2cSJim Jagielski void Update(const String& _sExp);
119*b1cdbd2cSJim Jagielski
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski void SaveArg( sal_uInt16 nEd );
122*b1cdbd2cSJim Jagielski void UpdateSelection();
123*b1cdbd2cSJim Jagielski void DoEnter( sal_Bool bOk );
124*b1cdbd2cSJim Jagielski void UpdateFunctionDesc();
125*b1cdbd2cSJim Jagielski void ResizeArgArr( const IFunctionDescription* pNewFunc );
126*b1cdbd2cSJim Jagielski void FillListboxes();
127*b1cdbd2cSJim Jagielski void FillControls(sal_Bool &rbNext, sal_Bool &rbPrev);
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielski FormulaDlgMode SetMeText(const String& _sText,xub_StrLen PrivStart, xub_StrLen PrivEnd,sal_Bool bMatrix,sal_Bool _bSelect,sal_Bool _bUpdate);
130*b1cdbd2cSJim Jagielski void SetMeText(const String& _sText);
131*b1cdbd2cSJim Jagielski sal_Bool CheckMatrix(String& aFormula /*IN/OUT*/);
132*b1cdbd2cSJim Jagielski
133*b1cdbd2cSJim Jagielski void SetEdSelection();
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski sal_Bool UpdateParaWin(Selection& _rSelection);
136*b1cdbd2cSJim Jagielski void UpdateParaWin(const Selection& _rSelection,const String& _sRefStr);
137*b1cdbd2cSJim Jagielski
138*b1cdbd2cSJim Jagielski void SetData(xub_StrLen nFStart,xub_StrLen nNextFStart,xub_StrLen nNextFEnd,xub_StrLen& PrivStart,xub_StrLen& PrivEnd);
139*b1cdbd2cSJim Jagielski void PreNotify( NotifyEvent& rNEvt );
140*b1cdbd2cSJim Jagielski
141*b1cdbd2cSJim Jagielski RefEdit* GetCurrRefEdit();
142*b1cdbd2cSJim Jagielski rtl::OString FindFocusWin(Window *pWin);
143*b1cdbd2cSJim Jagielski
144*b1cdbd2cSJim Jagielski const FormulaHelper& GetFormulaHelper() const;
145*b1cdbd2cSJim Jagielski uno::Reference< sheet::XFormulaOpCodeMapper > GetFormulaOpCodeMapper() const;
146*b1cdbd2cSJim Jagielski
147*b1cdbd2cSJim Jagielski DECL_LINK( ModifyHdl, ParaWin* );
148*b1cdbd2cSJim Jagielski DECL_LINK( FxHdl, ParaWin* );
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski DECL_LINK( MatrixHdl, CheckBox *);
151*b1cdbd2cSJim Jagielski DECL_LINK( FormulaHdl, MultiLineEdit* );
152*b1cdbd2cSJim Jagielski DECL_LINK( FormulaCursorHdl, EditBox*);
153*b1cdbd2cSJim Jagielski DECL_LINK( BtnHdl, PushButton* );
154*b1cdbd2cSJim Jagielski DECL_LINK( GetEdFocusHdl, ArgInput* );
155*b1cdbd2cSJim Jagielski DECL_LINK( GetFxFocusHdl, ArgInput* );
156*b1cdbd2cSJim Jagielski DECL_LINK( DblClkHdl, FuncPage* );
157*b1cdbd2cSJim Jagielski DECL_LINK( FuncSelHdl, FuncPage*);
158*b1cdbd2cSJim Jagielski DECL_LINK( StructSelHdl, StructPage * );
159*b1cdbd2cSJim Jagielski public:
160*b1cdbd2cSJim Jagielski OModuleClient m_aModuleClient;
161*b1cdbd2cSJim Jagielski mutable uno::Reference< sheet::XFormulaOpCodeMapper> m_xOpCodeMapper;
162*b1cdbd2cSJim Jagielski uno::Sequence< sheet::FormulaToken > m_aTokenList;
163*b1cdbd2cSJim Jagielski ::std::auto_ptr<FormulaTokenArray> m_pTokenArray;
164*b1cdbd2cSJim Jagielski mutable uno::Sequence< sheet::FormulaOpCodeMapEntry > m_aSpecialOpCodes;
165*b1cdbd2cSJim Jagielski mutable const sheet::FormulaOpCodeMapEntry* m_pSpecialOpCodesEnd;
166*b1cdbd2cSJim Jagielski mutable uno::Sequence< sheet::FormulaToken > m_aSeparatorsOpCodes;
167*b1cdbd2cSJim Jagielski mutable uno::Sequence< sheet::FormulaOpCodeMapEntry > m_aFunctionOpCodes;
168*b1cdbd2cSJim Jagielski mutable const sheet::FormulaOpCodeMapEntry* m_pFunctionOpCodesEnd;
169*b1cdbd2cSJim Jagielski mutable uno::Sequence< sheet::FormulaOpCodeMapEntry > m_aUnaryOpCodes;
170*b1cdbd2cSJim Jagielski mutable const sheet::FormulaOpCodeMapEntry* m_pUnaryOpCodesEnd;
171*b1cdbd2cSJim Jagielski mutable uno::Sequence< sheet::FormulaOpCodeMapEntry > m_aBinaryOpCodes;
172*b1cdbd2cSJim Jagielski mutable const sheet::FormulaOpCodeMapEntry* m_pBinaryOpCodesEnd;
173*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<OFormulaToken> > m_aTokens;
174*b1cdbd2cSJim Jagielski ::std::map<FormulaToken*,sheet::FormulaToken> m_aTokenMap;
175*b1cdbd2cSJim Jagielski IFormulaEditorHelper* m_pHelper;
176*b1cdbd2cSJim Jagielski Dialog* m_pParent;
177*b1cdbd2cSJim Jagielski IControlReferenceHandler* m_pDlg;
178*b1cdbd2cSJim Jagielski TabControl aTabCtrl;
179*b1cdbd2cSJim Jagielski GroupBox aGEdit; //! MUST be placed before pParaWin for initializing
180*b1cdbd2cSJim Jagielski ParaWin* pParaWin;
181*b1cdbd2cSJim Jagielski FixedText aFtHeadLine;
182*b1cdbd2cSJim Jagielski FixedInfo aFtFuncName;
183*b1cdbd2cSJim Jagielski FixedInfo aFtFuncDesc;
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski FixedText aFtEditName;
186*b1cdbd2cSJim Jagielski //FixedInfo aFtEditDesc;
187*b1cdbd2cSJim Jagielski
188*b1cdbd2cSJim Jagielski FixedText aFtResult;
189*b1cdbd2cSJim Jagielski ValWnd aWndResult;
190*b1cdbd2cSJim Jagielski
191*b1cdbd2cSJim Jagielski FixedText aFtFormula;
192*b1cdbd2cSJim Jagielski EditBox aMEFormula;
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski CheckBox aBtnMatrix;
195*b1cdbd2cSJim Jagielski HelpButton aBtnHelp;
196*b1cdbd2cSJim Jagielski CancelButton aBtnCancel;
197*b1cdbd2cSJim Jagielski
198*b1cdbd2cSJim Jagielski PushButton aBtnBackward;
199*b1cdbd2cSJim Jagielski PushButton aBtnForward;
200*b1cdbd2cSJim Jagielski OKButton aBtnEnd;
201*b1cdbd2cSJim Jagielski
202*b1cdbd2cSJim Jagielski RefEdit aEdRef;
203*b1cdbd2cSJim Jagielski RefButton aRefBtn;
204*b1cdbd2cSJim Jagielski
205*b1cdbd2cSJim Jagielski FixedText aFtFormResult;
206*b1cdbd2cSJim Jagielski ValWnd aWndFormResult;
207*b1cdbd2cSJim Jagielski
208*b1cdbd2cSJim Jagielski RefEdit* pTheRefEdit;
209*b1cdbd2cSJim Jagielski RefButton* pTheRefButton;
210*b1cdbd2cSJim Jagielski FuncPage* pFuncPage;
211*b1cdbd2cSJim Jagielski StructPage* pStructPage;
212*b1cdbd2cSJim Jagielski String aOldFormula;
213*b1cdbd2cSJim Jagielski sal_Bool bStructUpdate;
214*b1cdbd2cSJim Jagielski MultiLineEdit* pMEdit;
215*b1cdbd2cSJim Jagielski sal_Bool bUserMatrixFlag;
216*b1cdbd2cSJim Jagielski Timer aTimer;
217*b1cdbd2cSJim Jagielski
218*b1cdbd2cSJim Jagielski const String aTitle1;
219*b1cdbd2cSJim Jagielski const String aTitle2;
220*b1cdbd2cSJim Jagielski const String aTxtEnd;
221*b1cdbd2cSJim Jagielski const String aTxtOk; // hinter aBtnEnd
222*b1cdbd2cSJim Jagielski FormulaHelper
223*b1cdbd2cSJim Jagielski m_aFormulaHelper;
224*b1cdbd2cSJim Jagielski
225*b1cdbd2cSJim Jagielski rtl::OString m_aEditHelpId;
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski rtl::OString aOldHelp;
228*b1cdbd2cSJim Jagielski rtl::OString aOldUnique;
229*b1cdbd2cSJim Jagielski rtl::OString aActivWinId;
230*b1cdbd2cSJim Jagielski sal_Bool bIsShutDown;
231*b1cdbd2cSJim Jagielski
232*b1cdbd2cSJim Jagielski
233*b1cdbd2cSJim Jagielski
234*b1cdbd2cSJim Jagielski Font aFntBold;
235*b1cdbd2cSJim Jagielski Font aFntLight;
236*b1cdbd2cSJim Jagielski sal_uInt16 nEdFocus;
237*b1cdbd2cSJim Jagielski // Selection theCurSel;
238*b1cdbd2cSJim Jagielski sal_Bool bEditFlag;
239*b1cdbd2cSJim Jagielski const IFunctionDescription* pFuncDesc;
240*b1cdbd2cSJim Jagielski xub_StrLen nArgs;
241*b1cdbd2cSJim Jagielski ::std::vector< ::rtl::OUString > m_aArguments;
242*b1cdbd2cSJim Jagielski Selection aFuncSel;
243*b1cdbd2cSJim Jagielski
244*b1cdbd2cSJim Jagielski FormulaDlg_Impl(Dialog* pParent
245*b1cdbd2cSJim Jagielski , bool _bSupportFunctionResult
246*b1cdbd2cSJim Jagielski , bool _bSupportResult
247*b1cdbd2cSJim Jagielski , bool _bSupportMatrix
248*b1cdbd2cSJim Jagielski ,IFormulaEditorHelper* _pHelper
249*b1cdbd2cSJim Jagielski ,const IFunctionManager* _pFunctionMgr
250*b1cdbd2cSJim Jagielski ,IControlReferenceHandler* _pDlg);
251*b1cdbd2cSJim Jagielski ~FormulaDlg_Impl();
252*b1cdbd2cSJim Jagielski
253*b1cdbd2cSJim Jagielski };
FormulaDlg_Impl(Dialog * pParent,bool _bSupportFunctionResult,bool _bSupportResult,bool _bSupportMatrix,IFormulaEditorHelper * _pHelper,const IFunctionManager * _pFunctionMgr,IControlReferenceHandler * _pDlg)254*b1cdbd2cSJim Jagielski FormulaDlg_Impl::FormulaDlg_Impl(Dialog* pParent
255*b1cdbd2cSJim Jagielski , bool _bSupportFunctionResult
256*b1cdbd2cSJim Jagielski , bool _bSupportResult
257*b1cdbd2cSJim Jagielski , bool _bSupportMatrix
258*b1cdbd2cSJim Jagielski ,IFormulaEditorHelper* _pHelper
259*b1cdbd2cSJim Jagielski ,const IFunctionManager* _pFunctionMgr
260*b1cdbd2cSJim Jagielski ,IControlReferenceHandler* _pDlg)
261*b1cdbd2cSJim Jagielski :
262*b1cdbd2cSJim Jagielski m_pHelper (_pHelper),
263*b1cdbd2cSJim Jagielski m_pParent (pParent),
264*b1cdbd2cSJim Jagielski m_pDlg (_pDlg),
265*b1cdbd2cSJim Jagielski aTabCtrl ( pParent, ModuleRes( TC_FUNCTION ) ),
266*b1cdbd2cSJim Jagielski aGEdit ( pParent, ModuleRes( GB_EDIT ) ),
267*b1cdbd2cSJim Jagielski aFtHeadLine ( pParent, ModuleRes( FT_HEADLINE ) ),
268*b1cdbd2cSJim Jagielski aFtFuncName ( pParent, ModuleRes( FT_FUNCNAME ) ),
269*b1cdbd2cSJim Jagielski aFtFuncDesc ( pParent, ModuleRes( FT_FUNCDESC ) ),
270*b1cdbd2cSJim Jagielski //
271*b1cdbd2cSJim Jagielski aFtEditName ( pParent, ModuleRes( FT_EDITNAME ) ),
272*b1cdbd2cSJim Jagielski aFtResult ( pParent, ModuleRes( FT_RESULT ) ),
273*b1cdbd2cSJim Jagielski aWndResult ( pParent, ModuleRes( WND_RESULT ) ),
274*b1cdbd2cSJim Jagielski
275*b1cdbd2cSJim Jagielski aFtFormula ( pParent, ModuleRes( FT_FORMULA ) ),
276*b1cdbd2cSJim Jagielski aMEFormula ( pParent, ModuleRes( ED_FORMULA ) ),
277*b1cdbd2cSJim Jagielski //
278*b1cdbd2cSJim Jagielski aBtnMatrix ( pParent, ModuleRes( BTN_MATRIX ) ),
279*b1cdbd2cSJim Jagielski aBtnHelp ( pParent, ModuleRes( BTN_HELP ) ),
280*b1cdbd2cSJim Jagielski aBtnCancel ( pParent, ModuleRes( BTN_CANCEL ) ),
281*b1cdbd2cSJim Jagielski aBtnBackward ( pParent, ModuleRes( BTN_BACKWARD ) ),
282*b1cdbd2cSJim Jagielski aBtnForward ( pParent, ModuleRes( BTN_FORWARD ) ),
283*b1cdbd2cSJim Jagielski aBtnEnd ( pParent, ModuleRes( BTN_END ) ),
284*b1cdbd2cSJim Jagielski aEdRef ( pParent, _pDlg, ModuleRes( ED_REF) ),
285*b1cdbd2cSJim Jagielski aRefBtn ( pParent, ModuleRes( RB_REF),&aEdRef,_pDlg ),
286*b1cdbd2cSJim Jagielski aFtFormResult ( pParent, ModuleRes( FT_FORMULA_RESULT)),
287*b1cdbd2cSJim Jagielski aWndFormResult ( pParent, ModuleRes( WND_FORMULA_RESULT)),
288*b1cdbd2cSJim Jagielski //
289*b1cdbd2cSJim Jagielski pTheRefEdit (NULL),
290*b1cdbd2cSJim Jagielski pMEdit (NULL),
291*b1cdbd2cSJim Jagielski bUserMatrixFlag (sal_False),
292*b1cdbd2cSJim Jagielski //
293*b1cdbd2cSJim Jagielski aTitle1 ( ModuleRes( STR_TITLE1 ) ), // lokale Resource
294*b1cdbd2cSJim Jagielski aTitle2 ( ModuleRes( STR_TITLE2 ) ), // lokale Resource
295*b1cdbd2cSJim Jagielski aTxtEnd ( ModuleRes( STR_END ) ), // lokale Resource
296*b1cdbd2cSJim Jagielski aTxtOk ( aBtnEnd.GetText() ),
297*b1cdbd2cSJim Jagielski m_aFormulaHelper(_pFunctionMgr),
298*b1cdbd2cSJim Jagielski //
299*b1cdbd2cSJim Jagielski bIsShutDown (sal_False),
300*b1cdbd2cSJim Jagielski nEdFocus (0),
301*b1cdbd2cSJim Jagielski pFuncDesc (NULL),
302*b1cdbd2cSJim Jagielski nArgs (0)
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski pParaWin = new ParaWin( pParent,_pDlg, aGEdit.GetPosPixel());
305*b1cdbd2cSJim Jagielski aGEdit.Hide();
306*b1cdbd2cSJim Jagielski pParaWin->Hide();
307*b1cdbd2cSJim Jagielski aFtEditName.Hide();
308*b1cdbd2cSJim Jagielski aEdRef.Hide();
309*b1cdbd2cSJim Jagielski aRefBtn.Hide();
310*b1cdbd2cSJim Jagielski
311*b1cdbd2cSJim Jagielski pMEdit = aMEFormula.GetEdit();
312*b1cdbd2cSJim Jagielski aMEFormula.SetAccessibleName(aFtFormula.GetText());
313*b1cdbd2cSJim Jagielski if (pMEdit)
314*b1cdbd2cSJim Jagielski pMEdit->SetAccessibleName(aFtFormula.GetText());
315*b1cdbd2cSJim Jagielski m_aEditHelpId = pMEdit->GetHelpId();
316*b1cdbd2cSJim Jagielski pMEdit->SetUniqueId( m_aEditHelpId );
317*b1cdbd2cSJim Jagielski
318*b1cdbd2cSJim Jagielski bEditFlag=sal_False;
319*b1cdbd2cSJim Jagielski bStructUpdate=sal_True;
320*b1cdbd2cSJim Jagielski Point aPos=aGEdit.GetPosPixel();
321*b1cdbd2cSJim Jagielski pParaWin->SetPosPixel(aPos);
322*b1cdbd2cSJim Jagielski pParaWin->SetArgModifiedHdl(LINK( this, FormulaDlg_Impl, ModifyHdl ) );
323*b1cdbd2cSJim Jagielski pParaWin->SetFxHdl(LINK( this, FormulaDlg_Impl, FxHdl ) );
324*b1cdbd2cSJim Jagielski
325*b1cdbd2cSJim Jagielski pFuncPage= new FuncPage( &aTabCtrl,_pFunctionMgr);
326*b1cdbd2cSJim Jagielski pStructPage= new StructPage( &aTabCtrl);
327*b1cdbd2cSJim Jagielski pFuncPage->Hide();
328*b1cdbd2cSJim Jagielski pStructPage->Hide();
329*b1cdbd2cSJim Jagielski aTabCtrl.SetTabPage( TP_FUNCTION, pFuncPage);
330*b1cdbd2cSJim Jagielski aTabCtrl.SetTabPage( TP_STRUCT, pStructPage);
331*b1cdbd2cSJim Jagielski
332*b1cdbd2cSJim Jagielski aOldHelp = pParent->GetHelpId(); // HelpId aus Resource immer fuer "Seite 1"
333*b1cdbd2cSJim Jagielski aOldUnique = pParent->GetUniqueId();
334*b1cdbd2cSJim Jagielski
335*b1cdbd2cSJim Jagielski aFtResult.Show( _bSupportResult );
336*b1cdbd2cSJim Jagielski aWndResult.Show( _bSupportResult );
337*b1cdbd2cSJim Jagielski
338*b1cdbd2cSJim Jagielski aFtFormResult.Show( _bSupportFunctionResult );
339*b1cdbd2cSJim Jagielski aWndFormResult.Show( _bSupportFunctionResult );
340*b1cdbd2cSJim Jagielski
341*b1cdbd2cSJim Jagielski if ( _bSupportMatrix )
342*b1cdbd2cSJim Jagielski aBtnMatrix.SetClickHdl(LINK( this, FormulaDlg_Impl, MatrixHdl ) );
343*b1cdbd2cSJim Jagielski else
344*b1cdbd2cSJim Jagielski aBtnMatrix.Hide();
345*b1cdbd2cSJim Jagielski
346*b1cdbd2cSJim Jagielski aBtnCancel .SetClickHdl( LINK( this, FormulaDlg_Impl, BtnHdl ) );
347*b1cdbd2cSJim Jagielski aBtnEnd .SetClickHdl( LINK( this, FormulaDlg_Impl, BtnHdl ) );
348*b1cdbd2cSJim Jagielski aBtnForward .SetClickHdl( LINK( this, FormulaDlg_Impl, BtnHdl ) );
349*b1cdbd2cSJim Jagielski aBtnBackward.SetClickHdl( LINK( this, FormulaDlg_Impl, BtnHdl ) );
350*b1cdbd2cSJim Jagielski
351*b1cdbd2cSJim Jagielski pFuncPage->SetDoubleClickHdl( LINK( this, FormulaDlg_Impl, DblClkHdl ) );
352*b1cdbd2cSJim Jagielski pFuncPage->SetSelectHdl( LINK( this, FormulaDlg_Impl, FuncSelHdl) );
353*b1cdbd2cSJim Jagielski pStructPage->SetSelectionHdl( LINK( this, FormulaDlg_Impl, StructSelHdl ) );
354*b1cdbd2cSJim Jagielski pMEdit->SetModifyHdl( LINK( this, FormulaDlg_Impl, FormulaHdl ) );
355*b1cdbd2cSJim Jagielski aMEFormula.SetSelChangedHdl( LINK( this, FormulaDlg_Impl, FormulaCursorHdl ) );
356*b1cdbd2cSJim Jagielski
357*b1cdbd2cSJim Jagielski aFntLight = aFtFormula.GetFont();
358*b1cdbd2cSJim Jagielski aFntLight.SetTransparent( sal_True );
359*b1cdbd2cSJim Jagielski aFntBold = aFntLight;
360*b1cdbd2cSJim Jagielski aFntBold.SetWeight( WEIGHT_BOLD );
361*b1cdbd2cSJim Jagielski
362*b1cdbd2cSJim Jagielski pParaWin->SetArgumentFonts(aFntBold,aFntLight);
363*b1cdbd2cSJim Jagielski
364*b1cdbd2cSJim Jagielski // function description for choosing a function is no longer in a different color
365*b1cdbd2cSJim Jagielski
366*b1cdbd2cSJim Jagielski aFtHeadLine.SetFont(aFntBold);
367*b1cdbd2cSJim Jagielski aFtFuncName.SetFont(aFntLight);
368*b1cdbd2cSJim Jagielski aFtFuncDesc.SetFont(aFntLight);
369*b1cdbd2cSJim Jagielski }
~FormulaDlg_Impl()370*b1cdbd2cSJim Jagielski FormulaDlg_Impl::~FormulaDlg_Impl()
371*b1cdbd2cSJim Jagielski {
372*b1cdbd2cSJim Jagielski if(aTimer.IsActive())
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski aTimer.SetTimeoutHdl(Link());
375*b1cdbd2cSJim Jagielski aTimer.Stop();
376*b1cdbd2cSJim Jagielski } // if(aTimer.IsActive())
377*b1cdbd2cSJim Jagielski bIsShutDown=sal_True;// Setzen, damit PreNotify keinen GetFocus speichert.
378*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
379*b1cdbd2cSJim Jagielski if (pData) // wird nicht ueber Close zerstoert;
380*b1cdbd2cSJim Jagielski {
381*b1cdbd2cSJim Jagielski pData->SetFStart((xub_StrLen)pMEdit->GetSelection().Min());
382*b1cdbd2cSJim Jagielski pData->SetSelection(pMEdit->GetSelection());
383*b1cdbd2cSJim Jagielski
384*b1cdbd2cSJim Jagielski if(aTabCtrl.GetCurPageId()==TP_FUNCTION)
385*b1cdbd2cSJim Jagielski pData->SetMode( (sal_uInt16) FORMULA_FORMDLG_FORMULA );
386*b1cdbd2cSJim Jagielski else
387*b1cdbd2cSJim Jagielski pData->SetMode( (sal_uInt16) FORMULA_FORMDLG_EDIT );
388*b1cdbd2cSJim Jagielski pData->SetUndoStr(pMEdit->GetText());
389*b1cdbd2cSJim Jagielski pData->SetMatrixFlag(aBtnMatrix.IsChecked());
390*b1cdbd2cSJim Jagielski }
391*b1cdbd2cSJim Jagielski
392*b1cdbd2cSJim Jagielski aTabCtrl.RemovePage(TP_FUNCTION);
393*b1cdbd2cSJim Jagielski aTabCtrl.RemovePage(TP_STRUCT);
394*b1cdbd2cSJim Jagielski
395*b1cdbd2cSJim Jagielski delete pStructPage;
396*b1cdbd2cSJim Jagielski delete pFuncPage;
397*b1cdbd2cSJim Jagielski delete pParaWin;
398*b1cdbd2cSJim Jagielski DeleteArgs();
399*b1cdbd2cSJim Jagielski }
400*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
PreNotify(NotifyEvent & rNEvt)401*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::PreNotify( NotifyEvent& rNEvt )
402*b1cdbd2cSJim Jagielski {
403*b1cdbd2cSJim Jagielski sal_uInt16 nSwitch=rNEvt.GetType();
404*b1cdbd2cSJim Jagielski if(nSwitch==EVENT_GETFOCUS && !bIsShutDown)
405*b1cdbd2cSJim Jagielski {
406*b1cdbd2cSJim Jagielski Window* pWin=rNEvt.GetWindow();
407*b1cdbd2cSJim Jagielski if(pWin!=NULL)
408*b1cdbd2cSJim Jagielski {
409*b1cdbd2cSJim Jagielski aActivWinId = pWin->GetUniqueId();
410*b1cdbd2cSJim Jagielski if(aActivWinId.getLength()==0)
411*b1cdbd2cSJim Jagielski {
412*b1cdbd2cSJim Jagielski Window* pParent=pWin->GetParent();
413*b1cdbd2cSJim Jagielski while(pParent!=NULL)
414*b1cdbd2cSJim Jagielski {
415*b1cdbd2cSJim Jagielski aActivWinId=pParent->GetUniqueId();
416*b1cdbd2cSJim Jagielski
417*b1cdbd2cSJim Jagielski if(aActivWinId.getLength()!=0) break;
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski pParent=pParent->GetParent();
420*b1cdbd2cSJim Jagielski }
421*b1cdbd2cSJim Jagielski }
422*b1cdbd2cSJim Jagielski if(aActivWinId.getLength())
423*b1cdbd2cSJim Jagielski {
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
426*b1cdbd2cSJim Jagielski
427*b1cdbd2cSJim Jagielski if (pData && !aTimer.IsActive()) // wird nicht ueber Close zerstoert;
428*b1cdbd2cSJim Jagielski {
429*b1cdbd2cSJim Jagielski pData->SetUniqueId(aActivWinId);
430*b1cdbd2cSJim Jagielski }
431*b1cdbd2cSJim Jagielski }
432*b1cdbd2cSJim Jagielski }
433*b1cdbd2cSJim Jagielski }
434*b1cdbd2cSJim Jagielski }
GetFormulaOpCodeMapper() const435*b1cdbd2cSJim Jagielski uno::Reference< sheet::XFormulaOpCodeMapper > FormulaDlg_Impl::GetFormulaOpCodeMapper() const
436*b1cdbd2cSJim Jagielski {
437*b1cdbd2cSJim Jagielski if ( !m_xOpCodeMapper.is() )
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski m_xOpCodeMapper = m_pHelper->getFormulaOpCodeMapper();
440*b1cdbd2cSJim Jagielski m_aFunctionOpCodes = m_xOpCodeMapper->getAvailableMappings(sheet::FormulaLanguage::ODFF,sheet::FormulaMapGroup::FUNCTIONS);
441*b1cdbd2cSJim Jagielski m_pFunctionOpCodesEnd = m_aFunctionOpCodes.getConstArray() + m_aFunctionOpCodes.getLength();
442*b1cdbd2cSJim Jagielski
443*b1cdbd2cSJim Jagielski m_aUnaryOpCodes = m_xOpCodeMapper->getAvailableMappings(sheet::FormulaLanguage::ODFF,sheet::FormulaMapGroup::UNARY_OPERATORS);
444*b1cdbd2cSJim Jagielski m_pUnaryOpCodesEnd = m_aUnaryOpCodes.getConstArray() + m_aUnaryOpCodes.getLength();
445*b1cdbd2cSJim Jagielski
446*b1cdbd2cSJim Jagielski m_aBinaryOpCodes = m_xOpCodeMapper->getAvailableMappings(sheet::FormulaLanguage::ODFF,sheet::FormulaMapGroup::BINARY_OPERATORS);
447*b1cdbd2cSJim Jagielski m_pBinaryOpCodesEnd = m_aBinaryOpCodes.getConstArray() + m_aBinaryOpCodes.getLength();
448*b1cdbd2cSJim Jagielski
449*b1cdbd2cSJim Jagielski uno::Sequence< ::rtl::OUString > aArgs(3);
450*b1cdbd2cSJim Jagielski aArgs[TOKEN_OPEN] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("("));
451*b1cdbd2cSJim Jagielski aArgs[TOKEN_CLOSE] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(")"));
452*b1cdbd2cSJim Jagielski aArgs[TOKEN_SEP] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
453*b1cdbd2cSJim Jagielski m_aSeparatorsOpCodes = m_xOpCodeMapper->getMappings(aArgs,sheet::FormulaLanguage::ODFF);
454*b1cdbd2cSJim Jagielski
455*b1cdbd2cSJim Jagielski m_aSpecialOpCodes = m_xOpCodeMapper->getAvailableMappings(sheet::FormulaLanguage::ODFF,sheet::FormulaMapGroup::SPECIAL);
456*b1cdbd2cSJim Jagielski m_pSpecialOpCodesEnd = m_aSpecialOpCodes.getConstArray() + m_aSpecialOpCodes.getLength();
457*b1cdbd2cSJim Jagielski } // if ( !m_xOpCodeMapper.is() )
458*b1cdbd2cSJim Jagielski return m_xOpCodeMapper;
459*b1cdbd2cSJim Jagielski }
460*b1cdbd2cSJim Jagielski
DeleteArgs()461*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::DeleteArgs()
462*b1cdbd2cSJim Jagielski {
463*b1cdbd2cSJim Jagielski ::std::vector< ::rtl::OUString>().swap(m_aArguments);
464*b1cdbd2cSJim Jagielski nArgs = 0;
465*b1cdbd2cSJim Jagielski }
466*b1cdbd2cSJim Jagielski namespace
467*b1cdbd2cSJim Jagielski {
468*b1cdbd2cSJim Jagielski // comparing two property instances
469*b1cdbd2cSJim Jagielski struct OpCodeCompare : public ::std::binary_function< sheet::FormulaOpCodeMapEntry, sal_Int32 , bool >
470*b1cdbd2cSJim Jagielski {
operator ()formula::__anon36bb530e0111::OpCodeCompare471*b1cdbd2cSJim Jagielski bool operator() (const sheet::FormulaOpCodeMapEntry& x, sal_Int32 y) const
472*b1cdbd2cSJim Jagielski {
473*b1cdbd2cSJim Jagielski return x.Token.OpCode == y;
474*b1cdbd2cSJim Jagielski }
475*b1cdbd2cSJim Jagielski };
476*b1cdbd2cSJim Jagielski }
477*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetFunctionPos(xub_StrLen nPos)478*b1cdbd2cSJim Jagielski xub_StrLen FormulaDlg_Impl::GetFunctionPos(xub_StrLen nPos)
479*b1cdbd2cSJim Jagielski {
480*b1cdbd2cSJim Jagielski const sal_Unicode sep = m_pHelper->getFunctionManager()->getSingleToken(IFunctionManager::eSep);
481*b1cdbd2cSJim Jagielski
482*b1cdbd2cSJim Jagielski xub_StrLen nTokPos=1;
483*b1cdbd2cSJim Jagielski xub_StrLen nOldTokPos=1;
484*b1cdbd2cSJim Jagielski xub_StrLen nFuncPos=STRING_NOTFOUND; //@ Testweise
485*b1cdbd2cSJim Jagielski xub_StrLen nPrevFuncPos=1;
486*b1cdbd2cSJim Jagielski short nBracketCount=0;
487*b1cdbd2cSJim Jagielski sal_Bool bFlag=sal_False;
488*b1cdbd2cSJim Jagielski String aFormString = pMEdit->GetText();
489*b1cdbd2cSJim Jagielski m_aFormulaHelper.GetCharClass()->toUpper( aFormString );
490*b1cdbd2cSJim Jagielski
491*b1cdbd2cSJim Jagielski if ( m_aTokenList.getLength() )
492*b1cdbd2cSJim Jagielski {
493*b1cdbd2cSJim Jagielski const uno::Reference< sheet::XFormulaParser > xParser(m_pHelper->getFormulaParser());
494*b1cdbd2cSJim Jagielski const table::CellAddress aRefPos(m_pHelper->getReferencePosition());
495*b1cdbd2cSJim Jagielski
496*b1cdbd2cSJim Jagielski const sheet::FormulaToken* pIter = m_aTokenList.getConstArray();
497*b1cdbd2cSJim Jagielski const sheet::FormulaToken* pEnd = pIter + m_aTokenList.getLength();
498*b1cdbd2cSJim Jagielski //if ( pIter != pEnd && aFormString.GetChar(0) == '=' )
499*b1cdbd2cSJim Jagielski // ++pIter;
500*b1cdbd2cSJim Jagielski try
501*b1cdbd2cSJim Jagielski {
502*b1cdbd2cSJim Jagielski while ( pIter != pEnd )
503*b1cdbd2cSJim Jagielski {
504*b1cdbd2cSJim Jagielski const sal_Int32 eOp = pIter->OpCode;
505*b1cdbd2cSJim Jagielski uno::Sequence<sheet::FormulaToken> aArgs(1);
506*b1cdbd2cSJim Jagielski aArgs[0] = *pIter;
507*b1cdbd2cSJim Jagielski const String aString = xParser->printFormula(aArgs, aRefPos);
508*b1cdbd2cSJim Jagielski const sheet::FormulaToken* pNextToken = pIter + 1;
509*b1cdbd2cSJim Jagielski
510*b1cdbd2cSJim Jagielski if(!bUserMatrixFlag && FormulaCompiler::IsMatrixFunction((OpCode)eOp) )
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski aBtnMatrix.Check();
513*b1cdbd2cSJim Jagielski }
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski if ( eOp == m_aSpecialOpCodes[sheet::FormulaMapGroupSpecialOffset::PUSH].Token.OpCode || eOp == m_aSpecialOpCodes[sheet::FormulaMapGroupSpecialOffset::SPACES].Token.OpCode )
516*b1cdbd2cSJim Jagielski {
517*b1cdbd2cSJim Jagielski const xub_StrLen n1=aFormString.Search(sep, nTokPos);
518*b1cdbd2cSJim Jagielski const xub_StrLen n2=aFormString.Search(')',nTokPos);
519*b1cdbd2cSJim Jagielski xub_StrLen nXXX=nTokPos;
520*b1cdbd2cSJim Jagielski if(n1<n2)
521*b1cdbd2cSJim Jagielski {
522*b1cdbd2cSJim Jagielski nTokPos=n1;
523*b1cdbd2cSJim Jagielski }
524*b1cdbd2cSJim Jagielski else
525*b1cdbd2cSJim Jagielski {
526*b1cdbd2cSJim Jagielski nTokPos=n2;
527*b1cdbd2cSJim Jagielski }
528*b1cdbd2cSJim Jagielski if ( pNextToken != pEnd )
529*b1cdbd2cSJim Jagielski {
530*b1cdbd2cSJim Jagielski aArgs[0] = *pNextToken;
531*b1cdbd2cSJim Jagielski const String a2String = xParser->printFormula(aArgs, aRefPos);
532*b1cdbd2cSJim Jagielski const xub_StrLen n3 = aFormString.Search(a2String,nXXX);
533*b1cdbd2cSJim Jagielski if ( n3 < nTokPos )
534*b1cdbd2cSJim Jagielski nTokPos = n3;
535*b1cdbd2cSJim Jagielski }
536*b1cdbd2cSJim Jagielski }
537*b1cdbd2cSJim Jagielski else
538*b1cdbd2cSJim Jagielski {
539*b1cdbd2cSJim Jagielski nTokPos = sal::static_int_cast<xub_StrLen>( nTokPos + aString.Len() );
540*b1cdbd2cSJim Jagielski }
541*b1cdbd2cSJim Jagielski
542*b1cdbd2cSJim Jagielski if ( eOp == m_aSeparatorsOpCodes[TOKEN_OPEN].OpCode )
543*b1cdbd2cSJim Jagielski {
544*b1cdbd2cSJim Jagielski nBracketCount++;
545*b1cdbd2cSJim Jagielski bFlag=sal_True;
546*b1cdbd2cSJim Jagielski }
547*b1cdbd2cSJim Jagielski else if ( eOp == m_aSeparatorsOpCodes[TOKEN_CLOSE].OpCode )
548*b1cdbd2cSJim Jagielski {
549*b1cdbd2cSJim Jagielski nBracketCount--;
550*b1cdbd2cSJim Jagielski bFlag=sal_False;
551*b1cdbd2cSJim Jagielski nFuncPos=nPrevFuncPos;
552*b1cdbd2cSJim Jagielski }
553*b1cdbd2cSJim Jagielski bool bIsFunction = ::std::find_if(m_aFunctionOpCodes.getConstArray(),m_pFunctionOpCodesEnd,::std::bind2nd(OpCodeCompare(),boost::cref(eOp))) != m_pFunctionOpCodesEnd;
554*b1cdbd2cSJim Jagielski
555*b1cdbd2cSJim Jagielski if ( bIsFunction && m_aSpecialOpCodes[sheet::FormulaMapGroupSpecialOffset::SPACES].Token.OpCode != eOp )
556*b1cdbd2cSJim Jagielski {
557*b1cdbd2cSJim Jagielski nPrevFuncPos = nFuncPos;
558*b1cdbd2cSJim Jagielski nFuncPos = nOldTokPos;
559*b1cdbd2cSJim Jagielski }
560*b1cdbd2cSJim Jagielski
561*b1cdbd2cSJim Jagielski if ( nOldTokPos <= nPos && nPos < nTokPos )
562*b1cdbd2cSJim Jagielski {
563*b1cdbd2cSJim Jagielski if ( !bIsFunction )
564*b1cdbd2cSJim Jagielski {
565*b1cdbd2cSJim Jagielski if ( nBracketCount < 1 )
566*b1cdbd2cSJim Jagielski {
567*b1cdbd2cSJim Jagielski nFuncPos= pMEdit->GetText().Len();
568*b1cdbd2cSJim Jagielski }
569*b1cdbd2cSJim Jagielski else if ( !bFlag )
570*b1cdbd2cSJim Jagielski {
571*b1cdbd2cSJim Jagielski nFuncPos=nPrevFuncPos;
572*b1cdbd2cSJim Jagielski }
573*b1cdbd2cSJim Jagielski }
574*b1cdbd2cSJim Jagielski break;
575*b1cdbd2cSJim Jagielski }
576*b1cdbd2cSJim Jagielski
577*b1cdbd2cSJim Jagielski pIter = pNextToken;
578*b1cdbd2cSJim Jagielski nOldTokPos = nTokPos;
579*b1cdbd2cSJim Jagielski } // while ( pIter != pEnd )
580*b1cdbd2cSJim Jagielski }
581*b1cdbd2cSJim Jagielski catch(const uno::Exception& )
582*b1cdbd2cSJim Jagielski {
583*b1cdbd2cSJim Jagielski DBG_ERROR("Exception caught!");
584*b1cdbd2cSJim Jagielski }
585*b1cdbd2cSJim Jagielski }
586*b1cdbd2cSJim Jagielski
587*b1cdbd2cSJim Jagielski return nFuncPos;
588*b1cdbd2cSJim Jagielski }
589*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
CalcValue(const String & rStrExp,String & rStrResult)590*b1cdbd2cSJim Jagielski sal_Bool FormulaDlg_Impl::CalcValue( const String& rStrExp, String& rStrResult )
591*b1cdbd2cSJim Jagielski {
592*b1cdbd2cSJim Jagielski sal_Bool bResult = sal_True;
593*b1cdbd2cSJim Jagielski
594*b1cdbd2cSJim Jagielski if ( rStrExp.Len() > 0 )
595*b1cdbd2cSJim Jagielski {
596*b1cdbd2cSJim Jagielski // nur, wenn keine Tastatureingabe mehr anliegt, den Wert berechnen:
597*b1cdbd2cSJim Jagielski
598*b1cdbd2cSJim Jagielski if ( !Application::AnyInput( INPUT_KEYBOARD ) )
599*b1cdbd2cSJim Jagielski {
600*b1cdbd2cSJim Jagielski bResult = m_pHelper->calculateValue(rStrExp,rStrResult);
601*b1cdbd2cSJim Jagielski }
602*b1cdbd2cSJim Jagielski else
603*b1cdbd2cSJim Jagielski bResult = sal_False;
604*b1cdbd2cSJim Jagielski }
605*b1cdbd2cSJim Jagielski
606*b1cdbd2cSJim Jagielski return bResult;
607*b1cdbd2cSJim Jagielski }
608*b1cdbd2cSJim Jagielski
UpdateValues()609*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::UpdateValues()
610*b1cdbd2cSJim Jagielski {
611*b1cdbd2cSJim Jagielski String aStrResult;
612*b1cdbd2cSJim Jagielski
613*b1cdbd2cSJim Jagielski if ( CalcValue( pFuncDesc->getFormula( m_aArguments ), aStrResult ) )
614*b1cdbd2cSJim Jagielski aWndResult.SetValue( aStrResult );
615*b1cdbd2cSJim Jagielski
616*b1cdbd2cSJim Jagielski aStrResult.Erase();
617*b1cdbd2cSJim Jagielski if ( CalcValue(m_pHelper->getCurrentFormula(), aStrResult ) )
618*b1cdbd2cSJim Jagielski aWndFormResult.SetValue( aStrResult );
619*b1cdbd2cSJim Jagielski else
620*b1cdbd2cSJim Jagielski {
621*b1cdbd2cSJim Jagielski aStrResult.Erase();
622*b1cdbd2cSJim Jagielski aWndFormResult.SetValue( aStrResult );
623*b1cdbd2cSJim Jagielski }
624*b1cdbd2cSJim Jagielski CalcStruct(pMEdit->GetText());
625*b1cdbd2cSJim Jagielski }
626*b1cdbd2cSJim Jagielski
CalcStruct(const String & rStrExp)627*b1cdbd2cSJim Jagielski sal_Bool FormulaDlg_Impl::CalcStruct( const String& rStrExp)
628*b1cdbd2cSJim Jagielski {
629*b1cdbd2cSJim Jagielski sal_Bool bResult = sal_True;
630*b1cdbd2cSJim Jagielski xub_StrLen nLength=rStrExp.Len();
631*b1cdbd2cSJim Jagielski
632*b1cdbd2cSJim Jagielski if ( rStrExp.Len() > 0 && aOldFormula!=rStrExp && bStructUpdate)
633*b1cdbd2cSJim Jagielski {
634*b1cdbd2cSJim Jagielski // nur, wenn keine Tastatureingabe mehr anliegt, den Wert berechnen:
635*b1cdbd2cSJim Jagielski
636*b1cdbd2cSJim Jagielski if ( !Application::AnyInput( INPUT_KEYBOARD ) )
637*b1cdbd2cSJim Jagielski {
638*b1cdbd2cSJim Jagielski pStructPage->ClearStruct();
639*b1cdbd2cSJim Jagielski
640*b1cdbd2cSJim Jagielski String aString=rStrExp;
641*b1cdbd2cSJim Jagielski if(rStrExp.GetChar(nLength-1)=='(')
642*b1cdbd2cSJim Jagielski {
643*b1cdbd2cSJim Jagielski aString.Erase((xub_StrLen)(nLength-1));
644*b1cdbd2cSJim Jagielski }
645*b1cdbd2cSJim Jagielski
646*b1cdbd2cSJim Jagielski aString.EraseAllChars('\n');
647*b1cdbd2cSJim Jagielski String aStrResult;
648*b1cdbd2cSJim Jagielski
649*b1cdbd2cSJim Jagielski if ( CalcValue(aString, aStrResult ) )
650*b1cdbd2cSJim Jagielski aWndFormResult.SetValue( aStrResult );
651*b1cdbd2cSJim Jagielski
652*b1cdbd2cSJim Jagielski UpdateTokenArray(aString);
653*b1cdbd2cSJim Jagielski fillTree(pStructPage);
654*b1cdbd2cSJim Jagielski
655*b1cdbd2cSJim Jagielski aOldFormula=rStrExp;
656*b1cdbd2cSJim Jagielski if(rStrExp.GetChar(nLength-1)=='(')
657*b1cdbd2cSJim Jagielski UpdateTokenArray(rStrExp);
658*b1cdbd2cSJim Jagielski }
659*b1cdbd2cSJim Jagielski else
660*b1cdbd2cSJim Jagielski bResult = sal_False;
661*b1cdbd2cSJim Jagielski }
662*b1cdbd2cSJim Jagielski return bResult;
663*b1cdbd2cSJim Jagielski }
664*b1cdbd2cSJim Jagielski
665*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
MakeTree(IStructHelper * _pTree,SvLBoxEntry * pParent,FormulaToken * _pToken,long Count)666*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::MakeTree(IStructHelper* _pTree,SvLBoxEntry* pParent,FormulaToken* _pToken,long Count)
667*b1cdbd2cSJim Jagielski {
668*b1cdbd2cSJim Jagielski if( _pToken != NULL && Count > 0 )
669*b1cdbd2cSJim Jagielski {
670*b1cdbd2cSJim Jagielski long nParas = _pToken->GetParamCount();
671*b1cdbd2cSJim Jagielski OpCode eOp = _pToken->GetOpCode();
672*b1cdbd2cSJim Jagielski
673*b1cdbd2cSJim Jagielski // #i101512# for output, the original token is needed
674*b1cdbd2cSJim Jagielski FormulaToken* pOrigToken = (_pToken->GetType() == svFAP) ? _pToken->GetFAPOrigToken() : _pToken;
675*b1cdbd2cSJim Jagielski uno::Sequence<sheet::FormulaToken> aArgs(1);
676*b1cdbd2cSJim Jagielski aArgs[0] = m_aTokenMap.find(pOrigToken)->second;
677*b1cdbd2cSJim Jagielski try
678*b1cdbd2cSJim Jagielski {
679*b1cdbd2cSJim Jagielski const table::CellAddress aRefPos(m_pHelper->getReferencePosition());
680*b1cdbd2cSJim Jagielski const String aResult = m_pHelper->getFormulaParser()->printFormula(aArgs, aRefPos);
681*b1cdbd2cSJim Jagielski
682*b1cdbd2cSJim Jagielski if ( nParas > 0 )
683*b1cdbd2cSJim Jagielski {
684*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry;
685*b1cdbd2cSJim Jagielski
686*b1cdbd2cSJim Jagielski String aTest=_pTree->GetEntryText(pParent);
687*b1cdbd2cSJim Jagielski
688*b1cdbd2cSJim Jagielski if(aTest==aResult &&
689*b1cdbd2cSJim Jagielski (eOp==ocAdd || eOp==ocMul ||
690*b1cdbd2cSJim Jagielski eOp==ocAmpersand))
691*b1cdbd2cSJim Jagielski {
692*b1cdbd2cSJim Jagielski pEntry=pParent;
693*b1cdbd2cSJim Jagielski }
694*b1cdbd2cSJim Jagielski else
695*b1cdbd2cSJim Jagielski {
696*b1cdbd2cSJim Jagielski if(eOp==ocBad)
697*b1cdbd2cSJim Jagielski {
698*b1cdbd2cSJim Jagielski pEntry=_pTree->InsertEntry(aResult,pParent,STRUCT_ERROR,0,_pToken);
699*b1cdbd2cSJim Jagielski }
700*b1cdbd2cSJim Jagielski else
701*b1cdbd2cSJim Jagielski {
702*b1cdbd2cSJim Jagielski pEntry=_pTree->InsertEntry(aResult,pParent,STRUCT_FOLDER,0,_pToken);
703*b1cdbd2cSJim Jagielski }
704*b1cdbd2cSJim Jagielski }
705*b1cdbd2cSJim Jagielski
706*b1cdbd2cSJim Jagielski MakeTree(_pTree,pEntry,m_pTokenArray->PrevRPN(),nParas);
707*b1cdbd2cSJim Jagielski --Count;
708*b1cdbd2cSJim Jagielski m_pTokenArray->NextRPN();
709*b1cdbd2cSJim Jagielski MakeTree(_pTree,pParent,m_pTokenArray->PrevRPN(),Count);
710*b1cdbd2cSJim Jagielski }
711*b1cdbd2cSJim Jagielski else
712*b1cdbd2cSJim Jagielski {
713*b1cdbd2cSJim Jagielski if(eOp==ocBad)
714*b1cdbd2cSJim Jagielski {
715*b1cdbd2cSJim Jagielski _pTree->InsertEntry(aResult,pParent,STRUCT_ERROR,0,_pToken);
716*b1cdbd2cSJim Jagielski }
717*b1cdbd2cSJim Jagielski else
718*b1cdbd2cSJim Jagielski {
719*b1cdbd2cSJim Jagielski _pTree->InsertEntry(aResult,pParent,STRUCT_END,0,_pToken);
720*b1cdbd2cSJim Jagielski }
721*b1cdbd2cSJim Jagielski --Count;
722*b1cdbd2cSJim Jagielski MakeTree(_pTree,pParent,m_pTokenArray->PrevRPN(),Count);
723*b1cdbd2cSJim Jagielski }
724*b1cdbd2cSJim Jagielski }
725*b1cdbd2cSJim Jagielski catch(uno::Exception&)
726*b1cdbd2cSJim Jagielski {
727*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
728*b1cdbd2cSJim Jagielski }
729*b1cdbd2cSJim Jagielski }
730*b1cdbd2cSJim Jagielski }
731*b1cdbd2cSJim Jagielski
fillTree(IStructHelper * _pTree)732*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::fillTree(IStructHelper* _pTree)
733*b1cdbd2cSJim Jagielski {
734*b1cdbd2cSJim Jagielski GetFormulaOpCodeMapper();
735*b1cdbd2cSJim Jagielski FormulaToken* pToken = m_pTokenArray->LastRPN();
736*b1cdbd2cSJim Jagielski
737*b1cdbd2cSJim Jagielski if( pToken != NULL)
738*b1cdbd2cSJim Jagielski {
739*b1cdbd2cSJim Jagielski MakeTree(_pTree,NULL,pToken,1);
740*b1cdbd2cSJim Jagielski }
741*b1cdbd2cSJim Jagielski }
UpdateTokenArray(const String & rStrExp)742*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::UpdateTokenArray( const String& rStrExp)
743*b1cdbd2cSJim Jagielski {
744*b1cdbd2cSJim Jagielski m_aTokenMap.clear();
745*b1cdbd2cSJim Jagielski m_aTokenList.realloc(0);
746*b1cdbd2cSJim Jagielski try
747*b1cdbd2cSJim Jagielski {
748*b1cdbd2cSJim Jagielski const table::CellAddress aRefPos(m_pHelper->getReferencePosition());
749*b1cdbd2cSJim Jagielski m_aTokenList = m_pHelper->getFormulaParser()->parseFormula(rStrExp, aRefPos);
750*b1cdbd2cSJim Jagielski }
751*b1cdbd2cSJim Jagielski catch(const uno::Exception&)
752*b1cdbd2cSJim Jagielski {
753*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
754*b1cdbd2cSJim Jagielski }
755*b1cdbd2cSJim Jagielski GetFormulaOpCodeMapper(); // just to get it initialized
756*b1cdbd2cSJim Jagielski m_pTokenArray = m_pHelper->convertToTokenArray(m_aTokenList);
757*b1cdbd2cSJim Jagielski const sal_Int32 nLen = static_cast<sal_Int32>(m_pTokenArray->GetLen());
758*b1cdbd2cSJim Jagielski FormulaToken** pTokens = m_pTokenArray->GetArray();
759*b1cdbd2cSJim Jagielski if ( pTokens && nLen == m_aTokenList.getLength() )
760*b1cdbd2cSJim Jagielski {
761*b1cdbd2cSJim Jagielski for (sal_Int32 nPos=0; nPos<nLen; nPos++)
762*b1cdbd2cSJim Jagielski {
763*b1cdbd2cSJim Jagielski m_aTokenMap.insert(::std::map<FormulaToken*,sheet::FormulaToken>::value_type(pTokens[nPos],m_aTokenList[nPos]));
764*b1cdbd2cSJim Jagielski }
765*b1cdbd2cSJim Jagielski } // if ( pTokens && nLen == m_aTokenList.getLength() )
766*b1cdbd2cSJim Jagielski
767*b1cdbd2cSJim Jagielski FormulaCompiler aCompiler(*m_pTokenArray.get());
768*b1cdbd2cSJim Jagielski aCompiler.SetCompileForFAP(sal_True); // #i101512# special handling is needed
769*b1cdbd2cSJim Jagielski aCompiler.CompileTokenArray();
770*b1cdbd2cSJim Jagielski }
771*b1cdbd2cSJim Jagielski
FillDialog(sal_Bool nFlag)772*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::FillDialog(sal_Bool nFlag)
773*b1cdbd2cSJim Jagielski {
774*b1cdbd2cSJim Jagielski sal_Bool bNext=sal_True, bPrev=sal_True;
775*b1cdbd2cSJim Jagielski if(nFlag)
776*b1cdbd2cSJim Jagielski FillControls(bNext, bPrev);
777*b1cdbd2cSJim Jagielski FillListboxes();
778*b1cdbd2cSJim Jagielski if(nFlag)
779*b1cdbd2cSJim Jagielski {
780*b1cdbd2cSJim Jagielski aBtnBackward.Enable(bPrev);
781*b1cdbd2cSJim Jagielski aBtnForward.Enable(bNext);
782*b1cdbd2cSJim Jagielski }
783*b1cdbd2cSJim Jagielski
784*b1cdbd2cSJim Jagielski String aStrResult;
785*b1cdbd2cSJim Jagielski
786*b1cdbd2cSJim Jagielski if ( CalcValue(m_pHelper->getCurrentFormula(), aStrResult ) )
787*b1cdbd2cSJim Jagielski aWndFormResult.SetValue( aStrResult );
788*b1cdbd2cSJim Jagielski else
789*b1cdbd2cSJim Jagielski {
790*b1cdbd2cSJim Jagielski aStrResult.Erase();
791*b1cdbd2cSJim Jagielski aWndFormResult.SetValue( aStrResult );
792*b1cdbd2cSJim Jagielski }
793*b1cdbd2cSJim Jagielski }
794*b1cdbd2cSJim Jagielski
795*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
FillListboxes()796*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::FillListboxes()
797*b1cdbd2cSJim Jagielski {
798*b1cdbd2cSJim Jagielski // Umschalten zwischen den "Seiten"
799*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
800*b1cdbd2cSJim Jagielski String aNewTitle;
801*b1cdbd2cSJim Jagielski // 1. Seite: Funktion auswaehlen
802*b1cdbd2cSJim Jagielski if ( pFuncDesc && pFuncDesc->getCategory() )
803*b1cdbd2cSJim Jagielski {
804*b1cdbd2cSJim Jagielski if( pFuncPage->GetCategory() != pFuncDesc->getCategory()->getNumber() + 1 )
805*b1cdbd2cSJim Jagielski pFuncPage->SetCategory(static_cast<sal_uInt16>(pFuncDesc->getCategory()->getNumber() + 1));
806*b1cdbd2cSJim Jagielski
807*b1cdbd2cSJim Jagielski sal_uInt16 nPos=pFuncPage->GetFuncPos(pFuncDesc);
808*b1cdbd2cSJim Jagielski
809*b1cdbd2cSJim Jagielski pFuncPage->SetFunction(nPos);
810*b1cdbd2cSJim Jagielski }
811*b1cdbd2cSJim Jagielski else if ( pData )
812*b1cdbd2cSJim Jagielski {
813*b1cdbd2cSJim Jagielski pFuncPage->SetCategory( pData->GetCatSel() );
814*b1cdbd2cSJim Jagielski pFuncPage->SetFunction( pData->GetFuncSel() );
815*b1cdbd2cSJim Jagielski }
816*b1cdbd2cSJim Jagielski FuncSelHdl(NULL);
817*b1cdbd2cSJim Jagielski
818*b1cdbd2cSJim Jagielski // ResizeArgArr jetzt schon in UpdateFunctionDesc
819*b1cdbd2cSJim Jagielski
820*b1cdbd2cSJim Jagielski
821*b1cdbd2cSJim Jagielski m_pHelper->setDispatcherLock( sal_True);// Modal-Modus einschalten
822*b1cdbd2cSJim Jagielski
823*b1cdbd2cSJim Jagielski aNewTitle = aTitle1;
824*b1cdbd2cSJim Jagielski
825*b1cdbd2cSJim Jagielski // HelpId fuer 1. Seite ist die aus der Resource
826*b1cdbd2cSJim Jagielski m_pParent->SetHelpId( aOldHelp );
827*b1cdbd2cSJim Jagielski m_pParent->SetUniqueId( aOldUnique );
828*b1cdbd2cSJim Jagielski }
829*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
FillControls(sal_Bool & rbNext,sal_Bool & rbPrev)830*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::FillControls(sal_Bool &rbNext, sal_Bool &rbPrev)
831*b1cdbd2cSJim Jagielski {
832*b1cdbd2cSJim Jagielski // Umschalten zwischen den "Seiten"
833*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
834*b1cdbd2cSJim Jagielski if (!pData )
835*b1cdbd2cSJim Jagielski return;
836*b1cdbd2cSJim Jagielski
837*b1cdbd2cSJim Jagielski String aNewTitle;
838*b1cdbd2cSJim Jagielski // 2. Seite oder Editieren: ausgewaehlte Funktion anzeigen
839*b1cdbd2cSJim Jagielski
840*b1cdbd2cSJim Jagielski xub_StrLen nFStart = pData->GetFStart();
841*b1cdbd2cSJim Jagielski String aFormula = m_pHelper->getCurrentFormula();
842*b1cdbd2cSJim Jagielski xub_StrLen nNextFStart = nFStart;
843*b1cdbd2cSJim Jagielski xub_StrLen nNextFEnd = 0;
844*b1cdbd2cSJim Jagielski
845*b1cdbd2cSJim Jagielski aFormula.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " )" ));
846*b1cdbd2cSJim Jagielski DeleteArgs();
847*b1cdbd2cSJim Jagielski const IFunctionDescription* pOldFuncDesc = pFuncDesc;
848*b1cdbd2cSJim Jagielski sal_Bool bTestFlag = sal_False;
849*b1cdbd2cSJim Jagielski
850*b1cdbd2cSJim Jagielski if ( m_aFormulaHelper.GetNextFunc( aFormula, sal_False,
851*b1cdbd2cSJim Jagielski nNextFStart, &nNextFEnd, &pFuncDesc, &m_aArguments ) )
852*b1cdbd2cSJim Jagielski {
853*b1cdbd2cSJim Jagielski bTestFlag = (pOldFuncDesc != pFuncDesc);
854*b1cdbd2cSJim Jagielski if(bTestFlag)
855*b1cdbd2cSJim Jagielski {
856*b1cdbd2cSJim Jagielski aFtHeadLine.Hide();
857*b1cdbd2cSJim Jagielski aFtFuncName.Hide();
858*b1cdbd2cSJim Jagielski aFtFuncDesc.Hide();
859*b1cdbd2cSJim Jagielski pParaWin->SetFunctionDesc(pFuncDesc);
860*b1cdbd2cSJim Jagielski aFtEditName.SetText( pFuncDesc->getFunctionName() );
861*b1cdbd2cSJim Jagielski aFtEditName.Show();
862*b1cdbd2cSJim Jagielski pParaWin->Show();
863*b1cdbd2cSJim Jagielski const rtl::OString aHelpId = pFuncDesc->getHelpId();
864*b1cdbd2cSJim Jagielski if ( aHelpId.getLength() )
865*b1cdbd2cSJim Jagielski pMEdit->SetHelpId(aHelpId);
866*b1cdbd2cSJim Jagielski }
867*b1cdbd2cSJim Jagielski
868*b1cdbd2cSJim Jagielski xub_StrLen nOldStart, nOldEnd;
869*b1cdbd2cSJim Jagielski m_pHelper->getSelection( nOldStart, nOldEnd );
870*b1cdbd2cSJim Jagielski if ( nOldStart != nNextFStart || nOldEnd != nNextFEnd )
871*b1cdbd2cSJim Jagielski {
872*b1cdbd2cSJim Jagielski m_pHelper->setSelection( nNextFStart, nNextFEnd );
873*b1cdbd2cSJim Jagielski }
874*b1cdbd2cSJim Jagielski aFuncSel.Min() = nNextFStart;
875*b1cdbd2cSJim Jagielski aFuncSel.Max() = nNextFEnd;
876*b1cdbd2cSJim Jagielski
877*b1cdbd2cSJim Jagielski if(!bEditFlag)
878*b1cdbd2cSJim Jagielski pMEdit->SetText(m_pHelper->getCurrentFormula());
879*b1cdbd2cSJim Jagielski xub_StrLen PrivStart, PrivEnd;
880*b1cdbd2cSJim Jagielski m_pHelper->getSelection( PrivStart, PrivEnd);
881*b1cdbd2cSJim Jagielski if(!bEditFlag)
882*b1cdbd2cSJim Jagielski pMEdit->SetSelection( Selection(PrivStart, PrivEnd));
883*b1cdbd2cSJim Jagielski
884*b1cdbd2cSJim Jagielski nArgs = pFuncDesc->getSuppressedArgumentCount();
885*b1cdbd2cSJim Jagielski sal_uInt16 nOffset = pData->GetOffset();
886*b1cdbd2cSJim Jagielski nEdFocus = pData->GetEdFocus();
887*b1cdbd2cSJim Jagielski
888*b1cdbd2cSJim Jagielski // Verkettung der Edit's fuer Focus-Kontrolle
889*b1cdbd2cSJim Jagielski
890*b1cdbd2cSJim Jagielski if(bTestFlag)
891*b1cdbd2cSJim Jagielski pParaWin->SetArgumentOffset(nOffset);
892*b1cdbd2cSJim Jagielski sal_uInt16 nActiv=0;
893*b1cdbd2cSJim Jagielski xub_StrLen nArgPos= m_aFormulaHelper.GetArgStart( aFormula, nFStart, 0 );
894*b1cdbd2cSJim Jagielski xub_StrLen nEditPos=(xub_StrLen) pMEdit->GetSelection().Min();
895*b1cdbd2cSJim Jagielski sal_Bool bFlag=sal_False;
896*b1cdbd2cSJim Jagielski
897*b1cdbd2cSJim Jagielski for(sal_uInt16 i=0;i<nArgs;i++)
898*b1cdbd2cSJim Jagielski {
899*b1cdbd2cSJim Jagielski sal_Int32 nLength = m_aArguments[i].getLength()+1;
900*b1cdbd2cSJim Jagielski pParaWin->SetArgument(i,m_aArguments[i]);
901*b1cdbd2cSJim Jagielski if(nArgPos<=nEditPos && nEditPos<nArgPos+nLength)
902*b1cdbd2cSJim Jagielski {
903*b1cdbd2cSJim Jagielski nActiv=i;
904*b1cdbd2cSJim Jagielski bFlag=sal_True;
905*b1cdbd2cSJim Jagielski }
906*b1cdbd2cSJim Jagielski nArgPos = sal::static_int_cast<xub_StrLen>( nArgPos + nLength );
907*b1cdbd2cSJim Jagielski }
908*b1cdbd2cSJim Jagielski pParaWin->UpdateParas();
909*b1cdbd2cSJim Jagielski
910*b1cdbd2cSJim Jagielski if(bFlag)
911*b1cdbd2cSJim Jagielski {
912*b1cdbd2cSJim Jagielski pParaWin->SetActiveLine(nActiv);
913*b1cdbd2cSJim Jagielski }
914*b1cdbd2cSJim Jagielski
915*b1cdbd2cSJim Jagielski //pParaWin->SetEdFocus( nEdFocus );
916*b1cdbd2cSJim Jagielski UpdateValues();
917*b1cdbd2cSJim Jagielski }
918*b1cdbd2cSJim Jagielski else
919*b1cdbd2cSJim Jagielski {
920*b1cdbd2cSJim Jagielski aFtEditName.SetText(String());
921*b1cdbd2cSJim Jagielski pMEdit->SetHelpId( m_aEditHelpId );
922*b1cdbd2cSJim Jagielski }
923*b1cdbd2cSJim Jagielski // Test, ob vorne/hinten noch mehr Funktionen sind
924*b1cdbd2cSJim Jagielski
925*b1cdbd2cSJim Jagielski xub_StrLen nTempStart = m_aFormulaHelper.GetArgStart( aFormula, nFStart, 0 );
926*b1cdbd2cSJim Jagielski rbNext = m_aFormulaHelper.GetNextFunc( aFormula, sal_False, nTempStart );
927*b1cdbd2cSJim Jagielski nTempStart=(xub_StrLen)pMEdit->GetSelection().Min();
928*b1cdbd2cSJim Jagielski pData->SetFStart(nTempStart);
929*b1cdbd2cSJim Jagielski rbPrev = m_aFormulaHelper.GetNextFunc( aFormula, sal_True, nTempStart );
930*b1cdbd2cSJim Jagielski }
931*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
932*b1cdbd2cSJim Jagielski
ClearAllParas()933*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::ClearAllParas()
934*b1cdbd2cSJim Jagielski {
935*b1cdbd2cSJim Jagielski DeleteArgs();
936*b1cdbd2cSJim Jagielski pFuncDesc = NULL;
937*b1cdbd2cSJim Jagielski pParaWin->ClearAll();
938*b1cdbd2cSJim Jagielski aWndResult.SetValue(String());
939*b1cdbd2cSJim Jagielski aFtFuncName.SetText(String());
940*b1cdbd2cSJim Jagielski FuncSelHdl(NULL);
941*b1cdbd2cSJim Jagielski
942*b1cdbd2cSJim Jagielski if(pFuncPage->IsVisible())
943*b1cdbd2cSJim Jagielski {
944*b1cdbd2cSJim Jagielski aFtEditName.Hide();
945*b1cdbd2cSJim Jagielski pParaWin->Hide();
946*b1cdbd2cSJim Jagielski
947*b1cdbd2cSJim Jagielski aBtnForward.Enable(sal_True); //@new
948*b1cdbd2cSJim Jagielski aFtHeadLine.Show();
949*b1cdbd2cSJim Jagielski aFtFuncName.Show();
950*b1cdbd2cSJim Jagielski aFtFuncDesc.Show();
951*b1cdbd2cSJim Jagielski }
952*b1cdbd2cSJim Jagielski }
RepairFormula(const String & aFormula)953*b1cdbd2cSJim Jagielski String FormulaDlg_Impl::RepairFormula(const String& aFormula)
954*b1cdbd2cSJim Jagielski {
955*b1cdbd2cSJim Jagielski String aResult('=');
956*b1cdbd2cSJim Jagielski try
957*b1cdbd2cSJim Jagielski {
958*b1cdbd2cSJim Jagielski UpdateTokenArray(aFormula);
959*b1cdbd2cSJim Jagielski
960*b1cdbd2cSJim Jagielski if ( m_aTokenList.getLength() )
961*b1cdbd2cSJim Jagielski {
962*b1cdbd2cSJim Jagielski const table::CellAddress aRefPos(m_pHelper->getReferencePosition());
963*b1cdbd2cSJim Jagielski const String sFormula(m_pHelper->getFormulaParser()->printFormula(m_aTokenList, aRefPos));
964*b1cdbd2cSJim Jagielski if ( !sFormula.Len() || sFormula.GetChar(0) != '=' )
965*b1cdbd2cSJim Jagielski aResult += sFormula;
966*b1cdbd2cSJim Jagielski else
967*b1cdbd2cSJim Jagielski aResult = sFormula;
968*b1cdbd2cSJim Jagielski
969*b1cdbd2cSJim Jagielski }
970*b1cdbd2cSJim Jagielski }
971*b1cdbd2cSJim Jagielski catch(const uno::Exception& )
972*b1cdbd2cSJim Jagielski {
973*b1cdbd2cSJim Jagielski DBG_ERROR("Exception caught!");
974*b1cdbd2cSJim Jagielski }
975*b1cdbd2cSJim Jagielski return aResult;
976*b1cdbd2cSJim Jagielski }
977*b1cdbd2cSJim Jagielski
DoEnter(sal_Bool bOk)978*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::DoEnter(sal_Bool bOk)
979*b1cdbd2cSJim Jagielski {
980*b1cdbd2cSJim Jagielski // Eingabe ins Dokument uebernehmen oder abbrechen
981*b1cdbd2cSJim Jagielski if ( bOk)
982*b1cdbd2cSJim Jagielski {
983*b1cdbd2cSJim Jagielski // ggf. Dummy-Argumente entfernen
984*b1cdbd2cSJim Jagielski String aInputFormula = m_pHelper->getCurrentFormula();
985*b1cdbd2cSJim Jagielski String aString = RepairFormula(pMEdit->GetText());
986*b1cdbd2cSJim Jagielski m_pHelper->setSelection(0, aInputFormula.Len());
987*b1cdbd2cSJim Jagielski m_pHelper->setCurrentFormula(aString);
988*b1cdbd2cSJim Jagielski }
989*b1cdbd2cSJim Jagielski
990*b1cdbd2cSJim Jagielski m_pHelper->switchBack();
991*b1cdbd2cSJim Jagielski
992*b1cdbd2cSJim Jagielski m_pHelper->dispatch(bOk,aBtnMatrix.IsChecked());
993*b1cdbd2cSJim Jagielski // Daten loeschen
994*b1cdbd2cSJim Jagielski m_pHelper->deleteFormData();
995*b1cdbd2cSJim Jagielski
996*b1cdbd2cSJim Jagielski // Dialog schliessen
997*b1cdbd2cSJim Jagielski m_pHelper->doClose(bOk);
998*b1cdbd2cSJim Jagielski }
999*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
1000*b1cdbd2cSJim Jagielski
IMPL_LINK(FormulaDlg_Impl,BtnHdl,PushButton *,pBtn)1001*b1cdbd2cSJim Jagielski IMPL_LINK( FormulaDlg_Impl, BtnHdl, PushButton*, pBtn )
1002*b1cdbd2cSJim Jagielski {
1003*b1cdbd2cSJim Jagielski if ( pBtn == &aBtnCancel )
1004*b1cdbd2cSJim Jagielski {
1005*b1cdbd2cSJim Jagielski DoEnter(sal_False); // schliesst den Dialog
1006*b1cdbd2cSJim Jagielski }
1007*b1cdbd2cSJim Jagielski else if ( pBtn == &aBtnEnd )
1008*b1cdbd2cSJim Jagielski {
1009*b1cdbd2cSJim Jagielski DoEnter(sal_True); // schliesst den Dialog
1010*b1cdbd2cSJim Jagielski }
1011*b1cdbd2cSJim Jagielski else if ( pBtn == &aBtnForward )
1012*b1cdbd2cSJim Jagielski {
1013*b1cdbd2cSJim Jagielski //@pMEdit->GrabFocus(); // Damit die Selektion auch angezeigt wird.
1014*b1cdbd2cSJim Jagielski const IFunctionDescription* pDesc =pFuncPage->GetFuncDesc( pFuncPage->GetFunction() );
1015*b1cdbd2cSJim Jagielski
1016*b1cdbd2cSJim Jagielski if(pDesc==pFuncDesc || !pFuncPage->IsVisible())
1017*b1cdbd2cSJim Jagielski EditNextFunc( sal_True );
1018*b1cdbd2cSJim Jagielski else
1019*b1cdbd2cSJim Jagielski {
1020*b1cdbd2cSJim Jagielski DblClkHdl(pFuncPage); //new
1021*b1cdbd2cSJim Jagielski aBtnForward.Enable(sal_False); //new
1022*b1cdbd2cSJim Jagielski }
1023*b1cdbd2cSJim Jagielski //@EditNextFunc( sal_True );
1024*b1cdbd2cSJim Jagielski }
1025*b1cdbd2cSJim Jagielski else if ( pBtn == &aBtnBackward )
1026*b1cdbd2cSJim Jagielski {
1027*b1cdbd2cSJim Jagielski bEditFlag=sal_False;
1028*b1cdbd2cSJim Jagielski aBtnForward.Enable(sal_True);
1029*b1cdbd2cSJim Jagielski EditNextFunc( sal_False );
1030*b1cdbd2cSJim Jagielski aMEFormula.Invalidate();
1031*b1cdbd2cSJim Jagielski aMEFormula.Update();
1032*b1cdbd2cSJim Jagielski }
1033*b1cdbd2cSJim Jagielski //...
1034*b1cdbd2cSJim Jagielski
1035*b1cdbd2cSJim Jagielski return 0;
1036*b1cdbd2cSJim Jagielski }
1037*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
1038*b1cdbd2cSJim Jagielski
1039*b1cdbd2cSJim Jagielski
1040*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------------
1041*b1cdbd2cSJim Jagielski // Funktionen fuer 1. Seite
1042*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------------
1043*b1cdbd2cSJim Jagielski
ResizeArgArr(const IFunctionDescription * pNewFunc)1044*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::ResizeArgArr( const IFunctionDescription* pNewFunc )
1045*b1cdbd2cSJim Jagielski {
1046*b1cdbd2cSJim Jagielski if ( pFuncDesc != pNewFunc )
1047*b1cdbd2cSJim Jagielski {
1048*b1cdbd2cSJim Jagielski DeleteArgs();
1049*b1cdbd2cSJim Jagielski
1050*b1cdbd2cSJim Jagielski if ( pNewFunc )
1051*b1cdbd2cSJim Jagielski nArgs = pNewFunc->getSuppressedArgumentCount();
1052*b1cdbd2cSJim Jagielski
1053*b1cdbd2cSJim Jagielski pFuncDesc = pNewFunc;
1054*b1cdbd2cSJim Jagielski }
1055*b1cdbd2cSJim Jagielski }
1056*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
1057*b1cdbd2cSJim Jagielski
UpdateFunctionDesc()1058*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::UpdateFunctionDesc()
1059*b1cdbd2cSJim Jagielski {
1060*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
1061*b1cdbd2cSJim Jagielski if (!pData)
1062*b1cdbd2cSJim Jagielski return;
1063*b1cdbd2cSJim Jagielski sal_uInt16 nCat = pFuncPage->GetCategory();
1064*b1cdbd2cSJim Jagielski if ( nCat == LISTBOX_ENTRY_NOTFOUND )
1065*b1cdbd2cSJim Jagielski nCat = 0;
1066*b1cdbd2cSJim Jagielski pData->SetCatSel( nCat );
1067*b1cdbd2cSJim Jagielski sal_uInt16 nFunc = pFuncPage->GetFunction();
1068*b1cdbd2cSJim Jagielski if ( nFunc == LISTBOX_ENTRY_NOTFOUND )
1069*b1cdbd2cSJim Jagielski nFunc = 0;
1070*b1cdbd2cSJim Jagielski pData->SetFuncSel( nFunc );
1071*b1cdbd2cSJim Jagielski
1072*b1cdbd2cSJim Jagielski if ( (pFuncPage->GetFunctionEntryCount() > 0)
1073*b1cdbd2cSJim Jagielski && (pFuncPage->GetFunction() != LISTBOX_ENTRY_NOTFOUND) )
1074*b1cdbd2cSJim Jagielski {
1075*b1cdbd2cSJim Jagielski const IFunctionDescription* pDesc = pFuncPage->GetFuncDesc(pFuncPage->GetFunction() );
1076*b1cdbd2cSJim Jagielski if (pDesc)
1077*b1cdbd2cSJim Jagielski {
1078*b1cdbd2cSJim Jagielski pDesc->initArgumentInfo(); // full argument info is needed
1079*b1cdbd2cSJim Jagielski
1080*b1cdbd2cSJim Jagielski String aSig = pDesc->getSignature();
1081*b1cdbd2cSJim Jagielski
1082*b1cdbd2cSJim Jagielski aFtFuncName.SetText( aSig );
1083*b1cdbd2cSJim Jagielski aFtFuncDesc.SetText( pDesc->getDescription() );
1084*b1cdbd2cSJim Jagielski ResizeArgArr( pDesc );
1085*b1cdbd2cSJim Jagielski
1086*b1cdbd2cSJim Jagielski if ( !m_aArguments.empty() ) // noch Argumente da?
1087*b1cdbd2cSJim Jagielski aSig = pDesc->getFormula( m_aArguments ); // fuer Eingabezeile
1088*b1cdbd2cSJim Jagielski //@ m_pHelper->setCurrentFormula( aSig );
1089*b1cdbd2cSJim Jagielski }
1090*b1cdbd2cSJim Jagielski }
1091*b1cdbd2cSJim Jagielski else
1092*b1cdbd2cSJim Jagielski {
1093*b1cdbd2cSJim Jagielski aFtFuncName.SetText( String() );
1094*b1cdbd2cSJim Jagielski aFtFuncDesc.SetText( String() );
1095*b1cdbd2cSJim Jagielski
1096*b1cdbd2cSJim Jagielski //ResizeArgArr( NULL );
1097*b1cdbd2cSJim Jagielski m_pHelper->setCurrentFormula( String() );
1098*b1cdbd2cSJim Jagielski }
1099*b1cdbd2cSJim Jagielski }
1100*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
1101*b1cdbd2cSJim Jagielski
1102*b1cdbd2cSJim Jagielski // Handler fuer Listboxen
1103*b1cdbd2cSJim Jagielski
IMPL_LINK(FormulaDlg_Impl,DblClkHdl,FuncPage *,EMPTYARG)1104*b1cdbd2cSJim Jagielski IMPL_LINK( FormulaDlg_Impl, DblClkHdl, FuncPage*, EMPTYARG )
1105*b1cdbd2cSJim Jagielski {
1106*b1cdbd2cSJim Jagielski sal_uInt16 nFunc = pFuncPage->GetFunction();
1107*b1cdbd2cSJim Jagielski
1108*b1cdbd2cSJim Jagielski // ex-UpdateLRUList
1109*b1cdbd2cSJim Jagielski const IFunctionDescription* pDesc = pFuncPage->GetFuncDesc(nFunc);
1110*b1cdbd2cSJim Jagielski m_pHelper->insertEntryToLRUList(pDesc);
1111*b1cdbd2cSJim Jagielski
1112*b1cdbd2cSJim Jagielski String aFuncName = pFuncPage->GetSelFunctionName();
1113*b1cdbd2cSJim Jagielski aFuncName.AppendAscii(RTL_CONSTASCII_STRINGPARAM( "()" ));
1114*b1cdbd2cSJim Jagielski m_pHelper->setCurrentFormula(aFuncName);
1115*b1cdbd2cSJim Jagielski pMEdit->ReplaceSelected(aFuncName);
1116*b1cdbd2cSJim Jagielski
1117*b1cdbd2cSJim Jagielski Selection aSel=pMEdit->GetSelection();
1118*b1cdbd2cSJim Jagielski aSel.Max()=aSel.Max()-1;
1119*b1cdbd2cSJim Jagielski pMEdit->SetSelection(aSel);
1120*b1cdbd2cSJim Jagielski
1121*b1cdbd2cSJim Jagielski FormulaHdl(pMEdit);
1122*b1cdbd2cSJim Jagielski
1123*b1cdbd2cSJim Jagielski aSel.Min()=aSel.Max();
1124*b1cdbd2cSJim Jagielski pMEdit->SetSelection(aSel);
1125*b1cdbd2cSJim Jagielski
1126*b1cdbd2cSJim Jagielski if(nArgs==0)
1127*b1cdbd2cSJim Jagielski {
1128*b1cdbd2cSJim Jagielski BtnHdl(&aBtnBackward);
1129*b1cdbd2cSJim Jagielski }
1130*b1cdbd2cSJim Jagielski
1131*b1cdbd2cSJim Jagielski pParaWin->SetEdFocus(0);
1132*b1cdbd2cSJim Jagielski aBtnForward.Enable(sal_False); //@New
1133*b1cdbd2cSJim Jagielski
1134*b1cdbd2cSJim Jagielski return 0;
1135*b1cdbd2cSJim Jagielski }
1136*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
1137*b1cdbd2cSJim Jagielski
1138*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------------
1139*b1cdbd2cSJim Jagielski // Funktionen fuer rechte Seite
1140*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------------
SetData(xub_StrLen nFStart,xub_StrLen nNextFStart,xub_StrLen nNextFEnd,xub_StrLen & PrivStart,xub_StrLen & PrivEnd)1141*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::SetData(xub_StrLen nFStart,xub_StrLen nNextFStart,xub_StrLen nNextFEnd,xub_StrLen& PrivStart,xub_StrLen& PrivEnd)
1142*b1cdbd2cSJim Jagielski {
1143*b1cdbd2cSJim Jagielski xub_StrLen nFEnd;
1144*b1cdbd2cSJim Jagielski
1145*b1cdbd2cSJim Jagielski // Selektion merken und neue setzen
1146*b1cdbd2cSJim Jagielski m_pHelper->getSelection( nFStart, nFEnd );
1147*b1cdbd2cSJim Jagielski m_pHelper->setSelection( nNextFStart, nNextFEnd );
1148*b1cdbd2cSJim Jagielski if(!bEditFlag)
1149*b1cdbd2cSJim Jagielski pMEdit->SetText(m_pHelper->getCurrentFormula());
1150*b1cdbd2cSJim Jagielski
1151*b1cdbd2cSJim Jagielski
1152*b1cdbd2cSJim Jagielski m_pHelper->getSelection( PrivStart, PrivEnd);
1153*b1cdbd2cSJim Jagielski if(!bEditFlag)
1154*b1cdbd2cSJim Jagielski {
1155*b1cdbd2cSJim Jagielski pMEdit->SetSelection( Selection(PrivStart, PrivEnd));
1156*b1cdbd2cSJim Jagielski aMEFormula.UpdateOldSel();
1157*b1cdbd2cSJim Jagielski }
1158*b1cdbd2cSJim Jagielski
1159*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
1160*b1cdbd2cSJim Jagielski pData->SetFStart( nNextFStart );
1161*b1cdbd2cSJim Jagielski pData->SetOffset( 0 );
1162*b1cdbd2cSJim Jagielski pData->SetEdFocus( 0 );
1163*b1cdbd2cSJim Jagielski
1164*b1cdbd2cSJim Jagielski FillDialog();
1165*b1cdbd2cSJim Jagielski }
1166*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
EditThisFunc(xub_StrLen nFStart)1167*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::EditThisFunc(xub_StrLen nFStart)
1168*b1cdbd2cSJim Jagielski {
1169*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
1170*b1cdbd2cSJim Jagielski if (!pData) return;
1171*b1cdbd2cSJim Jagielski
1172*b1cdbd2cSJim Jagielski String aFormula = m_pHelper->getCurrentFormula();
1173*b1cdbd2cSJim Jagielski
1174*b1cdbd2cSJim Jagielski if(nFStart==NOT_FOUND)
1175*b1cdbd2cSJim Jagielski {
1176*b1cdbd2cSJim Jagielski nFStart = pData->GetFStart();
1177*b1cdbd2cSJim Jagielski }
1178*b1cdbd2cSJim Jagielski else
1179*b1cdbd2cSJim Jagielski {
1180*b1cdbd2cSJim Jagielski pData->SetFStart(nFStart);
1181*b1cdbd2cSJim Jagielski }
1182*b1cdbd2cSJim Jagielski
1183*b1cdbd2cSJim Jagielski xub_StrLen nNextFStart = nFStart;
1184*b1cdbd2cSJim Jagielski xub_StrLen nNextFEnd = 0;
1185*b1cdbd2cSJim Jagielski
1186*b1cdbd2cSJim Jagielski sal_Bool bFound;
1187*b1cdbd2cSJim Jagielski
1188*b1cdbd2cSJim Jagielski //@bFound = m_pHelper->getNextFunction( aFormula, sal_False, nNextFStart, &nNextFEnd, &pFuncDesc );
1189*b1cdbd2cSJim Jagielski
1190*b1cdbd2cSJim Jagielski bFound = m_aFormulaHelper.GetNextFunc( aFormula, sal_False, nNextFStart, &nNextFEnd);
1191*b1cdbd2cSJim Jagielski if ( bFound )
1192*b1cdbd2cSJim Jagielski {
1193*b1cdbd2cSJim Jagielski xub_StrLen PrivStart, PrivEnd;
1194*b1cdbd2cSJim Jagielski SetData(nFStart,nNextFStart,nNextFEnd,PrivStart, PrivEnd);
1195*b1cdbd2cSJim Jagielski m_pHelper->showReference(aFormula.Copy(PrivStart, PrivEnd-PrivStart));
1196*b1cdbd2cSJim Jagielski }
1197*b1cdbd2cSJim Jagielski else
1198*b1cdbd2cSJim Jagielski {
1199*b1cdbd2cSJim Jagielski ClearAllParas();
1200*b1cdbd2cSJim Jagielski }
1201*b1cdbd2cSJim Jagielski }
1202*b1cdbd2cSJim Jagielski
EditNextFunc(sal_Bool bForward,xub_StrLen nFStart)1203*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::EditNextFunc( sal_Bool bForward, xub_StrLen nFStart )
1204*b1cdbd2cSJim Jagielski {
1205*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
1206*b1cdbd2cSJim Jagielski if (!pData)
1207*b1cdbd2cSJim Jagielski return;
1208*b1cdbd2cSJim Jagielski
1209*b1cdbd2cSJim Jagielski String aFormula = m_pHelper->getCurrentFormula();
1210*b1cdbd2cSJim Jagielski
1211*b1cdbd2cSJim Jagielski if(nFStart==NOT_FOUND)
1212*b1cdbd2cSJim Jagielski {
1213*b1cdbd2cSJim Jagielski nFStart = pData->GetFStart();
1214*b1cdbd2cSJim Jagielski }
1215*b1cdbd2cSJim Jagielski else
1216*b1cdbd2cSJim Jagielski {
1217*b1cdbd2cSJim Jagielski pData->SetFStart(nFStart);
1218*b1cdbd2cSJim Jagielski }
1219*b1cdbd2cSJim Jagielski
1220*b1cdbd2cSJim Jagielski xub_StrLen nNextFStart = 0;
1221*b1cdbd2cSJim Jagielski xub_StrLen nNextFEnd = 0;
1222*b1cdbd2cSJim Jagielski
1223*b1cdbd2cSJim Jagielski sal_Bool bFound;
1224*b1cdbd2cSJim Jagielski if ( bForward )
1225*b1cdbd2cSJim Jagielski {
1226*b1cdbd2cSJim Jagielski nNextFStart = m_aFormulaHelper.GetArgStart( aFormula, nFStart, 0 );
1227*b1cdbd2cSJim Jagielski //@bFound = m_pHelper->getNextFunction( aFormula, sal_False, nNextFStart, &nNextFEnd, &pFuncDesc );
1228*b1cdbd2cSJim Jagielski bFound = m_aFormulaHelper.GetNextFunc( aFormula, sal_False, nNextFStart, &nNextFEnd);
1229*b1cdbd2cSJim Jagielski }
1230*b1cdbd2cSJim Jagielski else
1231*b1cdbd2cSJim Jagielski {
1232*b1cdbd2cSJim Jagielski nNextFStart = nFStart;
1233*b1cdbd2cSJim Jagielski //@bFound = m_pHelper->getNextFunction( aFormula, sal_True, nNextFStart, &nNextFEnd, &pFuncDesc );
1234*b1cdbd2cSJim Jagielski bFound = m_aFormulaHelper.GetNextFunc( aFormula, sal_True, nNextFStart, &nNextFEnd);
1235*b1cdbd2cSJim Jagielski }
1236*b1cdbd2cSJim Jagielski
1237*b1cdbd2cSJim Jagielski if ( bFound )
1238*b1cdbd2cSJim Jagielski {
1239*b1cdbd2cSJim Jagielski xub_StrLen PrivStart, PrivEnd;
1240*b1cdbd2cSJim Jagielski SetData(nFStart,nNextFStart,nNextFEnd,PrivStart, PrivEnd);
1241*b1cdbd2cSJim Jagielski }
1242*b1cdbd2cSJim Jagielski }
1243*b1cdbd2cSJim Jagielski
EditFuncParas(xub_StrLen nEditPos)1244*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::EditFuncParas(xub_StrLen nEditPos)
1245*b1cdbd2cSJim Jagielski {
1246*b1cdbd2cSJim Jagielski if(pFuncDesc!=NULL)
1247*b1cdbd2cSJim Jagielski {
1248*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
1249*b1cdbd2cSJim Jagielski if (!pData) return;
1250*b1cdbd2cSJim Jagielski
1251*b1cdbd2cSJim Jagielski String aFormula = m_pHelper->getCurrentFormula();
1252*b1cdbd2cSJim Jagielski aFormula +=')';
1253*b1cdbd2cSJim Jagielski xub_StrLen nFStart = pData->GetFStart();
1254*b1cdbd2cSJim Jagielski
1255*b1cdbd2cSJim Jagielski DeleteArgs();
1256*b1cdbd2cSJim Jagielski
1257*b1cdbd2cSJim Jagielski nArgs = pFuncDesc->getSuppressedArgumentCount();
1258*b1cdbd2cSJim Jagielski
1259*b1cdbd2cSJim Jagielski sal_Int32 nArgPos=m_aFormulaHelper.GetArgStart( aFormula, nFStart, 0 );
1260*b1cdbd2cSJim Jagielski m_aFormulaHelper.GetArgStrings(m_aArguments,aFormula, nFStart, nArgs );
1261*b1cdbd2cSJim Jagielski // m_aArguments = ScFormulaUtil::GetArgStrings( aFormula, nFStart, nArgs );
1262*b1cdbd2cSJim Jagielski
1263*b1cdbd2cSJim Jagielski sal_uInt16 nActiv=pParaWin->GetSliderPos();
1264*b1cdbd2cSJim Jagielski sal_Bool bFlag=sal_False;
1265*b1cdbd2cSJim Jagielski ::std::vector< ::rtl::OUString >::iterator aIter = m_aArguments.begin();
1266*b1cdbd2cSJim Jagielski ::std::vector< ::rtl::OUString >::iterator aEnd = m_aArguments.end();
1267*b1cdbd2cSJim Jagielski for(sal_uInt16 i=0;aIter != aEnd;i++,++aIter)
1268*b1cdbd2cSJim Jagielski {
1269*b1cdbd2cSJim Jagielski sal_Int32 nLength=(*aIter).getLength();
1270*b1cdbd2cSJim Jagielski pParaWin->SetArgument(i,(*aIter));
1271*b1cdbd2cSJim Jagielski if(nArgPos<=nEditPos && nEditPos<nArgPos+nLength)
1272*b1cdbd2cSJim Jagielski {
1273*b1cdbd2cSJim Jagielski nActiv=i;
1274*b1cdbd2cSJim Jagielski bFlag=sal_True;
1275*b1cdbd2cSJim Jagielski }
1276*b1cdbd2cSJim Jagielski nArgPos+=nLength+1;
1277*b1cdbd2cSJim Jagielski }
1278*b1cdbd2cSJim Jagielski
1279*b1cdbd2cSJim Jagielski if(bFlag)
1280*b1cdbd2cSJim Jagielski {
1281*b1cdbd2cSJim Jagielski pParaWin->SetSliderPos(nActiv);
1282*b1cdbd2cSJim Jagielski }
1283*b1cdbd2cSJim Jagielski
1284*b1cdbd2cSJim Jagielski pParaWin->UpdateParas();
1285*b1cdbd2cSJim Jagielski UpdateValues();
1286*b1cdbd2cSJim Jagielski }
1287*b1cdbd2cSJim Jagielski
1288*b1cdbd2cSJim Jagielski }
1289*b1cdbd2cSJim Jagielski
SaveArg(sal_uInt16 nEd)1290*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::SaveArg( sal_uInt16 nEd )
1291*b1cdbd2cSJim Jagielski {
1292*b1cdbd2cSJim Jagielski if (nEd<nArgs)
1293*b1cdbd2cSJim Jagielski {
1294*b1cdbd2cSJim Jagielski sal_uInt16 i;
1295*b1cdbd2cSJim Jagielski for(i=0;i<=nEd;i++)
1296*b1cdbd2cSJim Jagielski {
1297*b1cdbd2cSJim Jagielski if ( m_aArguments[i].getLength() == 0 )
1298*b1cdbd2cSJim Jagielski m_aArguments[i] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" "));
1299*b1cdbd2cSJim Jagielski }
1300*b1cdbd2cSJim Jagielski if(pParaWin->GetArgument(nEd).Len()!=0)
1301*b1cdbd2cSJim Jagielski m_aArguments[nEd] = pParaWin->GetArgument(nEd);
1302*b1cdbd2cSJim Jagielski
1303*b1cdbd2cSJim Jagielski sal_uInt16 nClearPos=nEd+1;
1304*b1cdbd2cSJim Jagielski for(i=nEd+1;i<nArgs;i++)
1305*b1cdbd2cSJim Jagielski {
1306*b1cdbd2cSJim Jagielski if(pParaWin->GetArgument(i).Len()!=0)
1307*b1cdbd2cSJim Jagielski {
1308*b1cdbd2cSJim Jagielski nClearPos=i+1;
1309*b1cdbd2cSJim Jagielski }
1310*b1cdbd2cSJim Jagielski }
1311*b1cdbd2cSJim Jagielski
1312*b1cdbd2cSJim Jagielski for(i=nClearPos;i<nArgs;i++)
1313*b1cdbd2cSJim Jagielski {
1314*b1cdbd2cSJim Jagielski m_aArguments[i] = ::rtl::OUString();
1315*b1cdbd2cSJim Jagielski }
1316*b1cdbd2cSJim Jagielski }
1317*b1cdbd2cSJim Jagielski }
1318*b1cdbd2cSJim Jagielski
IMPL_LINK(FormulaDlg_Impl,FxHdl,ParaWin *,pPtr)1319*b1cdbd2cSJim Jagielski IMPL_LINK( FormulaDlg_Impl, FxHdl, ParaWin*, pPtr )
1320*b1cdbd2cSJim Jagielski {
1321*b1cdbd2cSJim Jagielski if(pPtr==pParaWin)
1322*b1cdbd2cSJim Jagielski {
1323*b1cdbd2cSJim Jagielski aBtnForward.Enable(sal_True); //@ Damit eine neue Fkt eingegeben werden kann.
1324*b1cdbd2cSJim Jagielski aTabCtrl.SetCurPageId(TP_FUNCTION);
1325*b1cdbd2cSJim Jagielski
1326*b1cdbd2cSJim Jagielski String aUndoStr = m_pHelper->getCurrentFormula(); // bevor unten ein ";" eingefuegt wird
1327*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
1328*b1cdbd2cSJim Jagielski if (!pData) return 0;
1329*b1cdbd2cSJim Jagielski
1330*b1cdbd2cSJim Jagielski sal_uInt16 nArgNo = pParaWin->GetActiveLine();
1331*b1cdbd2cSJim Jagielski nEdFocus=nArgNo;
1332*b1cdbd2cSJim Jagielski
1333*b1cdbd2cSJim Jagielski SaveArg(nArgNo);
1334*b1cdbd2cSJim Jagielski UpdateSelection();
1335*b1cdbd2cSJim Jagielski
1336*b1cdbd2cSJim Jagielski xub_StrLen nFormulaStrPos = pData->GetFStart();
1337*b1cdbd2cSJim Jagielski
1338*b1cdbd2cSJim Jagielski String aFormula = m_pHelper->getCurrentFormula();
1339*b1cdbd2cSJim Jagielski xub_StrLen n1 = m_aFormulaHelper.GetArgStart( aFormula, nFormulaStrPos, nEdFocus+pData->GetOffset() );
1340*b1cdbd2cSJim Jagielski
1341*b1cdbd2cSJim Jagielski pData->SetEdFocus( nEdFocus );
1342*b1cdbd2cSJim Jagielski pData->SaveValues();
1343*b1cdbd2cSJim Jagielski pData->SetMode( (sal_uInt16) FORMULA_FORMDLG_FORMULA );
1344*b1cdbd2cSJim Jagielski pData->SetFStart( n1 );
1345*b1cdbd2cSJim Jagielski pData->SetUndoStr( aUndoStr );
1346*b1cdbd2cSJim Jagielski ClearAllParas();
1347*b1cdbd2cSJim Jagielski
1348*b1cdbd2cSJim Jagielski FillDialog(sal_False);
1349*b1cdbd2cSJim Jagielski pFuncPage->SetFocus(); //Da Parawin nicht mehr sichtbar
1350*b1cdbd2cSJim Jagielski }
1351*b1cdbd2cSJim Jagielski return 0;
1352*b1cdbd2cSJim Jagielski }
1353*b1cdbd2cSJim Jagielski
IMPL_LINK(FormulaDlg_Impl,ModifyHdl,ParaWin *,pPtr)1354*b1cdbd2cSJim Jagielski IMPL_LINK( FormulaDlg_Impl, ModifyHdl, ParaWin*, pPtr )
1355*b1cdbd2cSJim Jagielski {
1356*b1cdbd2cSJim Jagielski if(pPtr==pParaWin)
1357*b1cdbd2cSJim Jagielski {
1358*b1cdbd2cSJim Jagielski SaveArg(pParaWin->GetActiveLine());
1359*b1cdbd2cSJim Jagielski UpdateValues();
1360*b1cdbd2cSJim Jagielski
1361*b1cdbd2cSJim Jagielski UpdateSelection();
1362*b1cdbd2cSJim Jagielski CalcStruct(pMEdit->GetText());
1363*b1cdbd2cSJim Jagielski }
1364*b1cdbd2cSJim Jagielski return 0;
1365*b1cdbd2cSJim Jagielski }
1366*b1cdbd2cSJim Jagielski
IMPL_LINK(FormulaDlg_Impl,FormulaHdl,MultiLineEdit *,EMPTYARG)1367*b1cdbd2cSJim Jagielski IMPL_LINK( FormulaDlg_Impl, FormulaHdl, MultiLineEdit*, EMPTYARG )
1368*b1cdbd2cSJim Jagielski {
1369*b1cdbd2cSJim Jagielski
1370*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
1371*b1cdbd2cSJim Jagielski if (!pData) return 0;
1372*b1cdbd2cSJim Jagielski
1373*b1cdbd2cSJim Jagielski bEditFlag=sal_True;
1374*b1cdbd2cSJim Jagielski String aInputFormula=m_pHelper->getCurrentFormula();
1375*b1cdbd2cSJim Jagielski String aString=pMEdit->GetText();
1376*b1cdbd2cSJim Jagielski
1377*b1cdbd2cSJim Jagielski Selection aSel =pMEdit->GetSelection();
1378*b1cdbd2cSJim Jagielski xub_StrLen nTest=0;
1379*b1cdbd2cSJim Jagielski
1380*b1cdbd2cSJim Jagielski if(aString.Len()==0) //falls alles geloescht wurde
1381*b1cdbd2cSJim Jagielski {
1382*b1cdbd2cSJim Jagielski aString +='=';
1383*b1cdbd2cSJim Jagielski pMEdit->SetText(aString);
1384*b1cdbd2cSJim Jagielski aSel .Min()=1;
1385*b1cdbd2cSJim Jagielski aSel .Max()=1;
1386*b1cdbd2cSJim Jagielski pMEdit->SetSelection(aSel);
1387*b1cdbd2cSJim Jagielski }
1388*b1cdbd2cSJim Jagielski else if(aString.GetChar(nTest)!='=') //falls ersetzt wurde;
1389*b1cdbd2cSJim Jagielski {
1390*b1cdbd2cSJim Jagielski aString.Insert( (sal_Unicode)'=', 0 );
1391*b1cdbd2cSJim Jagielski pMEdit->SetText(aString);
1392*b1cdbd2cSJim Jagielski aSel .Min()+=1;
1393*b1cdbd2cSJim Jagielski aSel .Max()+=1;
1394*b1cdbd2cSJim Jagielski pMEdit->SetSelection(aSel);
1395*b1cdbd2cSJim Jagielski }
1396*b1cdbd2cSJim Jagielski
1397*b1cdbd2cSJim Jagielski
1398*b1cdbd2cSJim Jagielski m_pHelper->setSelection(0, aInputFormula.Len());
1399*b1cdbd2cSJim Jagielski m_pHelper->setCurrentFormula(aString);
1400*b1cdbd2cSJim Jagielski m_pHelper->setSelection((xub_StrLen)aSel.Min(),(xub_StrLen)aSel.Max());
1401*b1cdbd2cSJim Jagielski
1402*b1cdbd2cSJim Jagielski xub_StrLen nPos=(xub_StrLen)aSel.Min()-1;
1403*b1cdbd2cSJim Jagielski
1404*b1cdbd2cSJim Jagielski String aStrResult;
1405*b1cdbd2cSJim Jagielski
1406*b1cdbd2cSJim Jagielski if ( CalcValue(m_pHelper->getCurrentFormula(), aStrResult ) )
1407*b1cdbd2cSJim Jagielski aWndFormResult.SetValue( aStrResult );
1408*b1cdbd2cSJim Jagielski else
1409*b1cdbd2cSJim Jagielski {
1410*b1cdbd2cSJim Jagielski aStrResult.Erase();
1411*b1cdbd2cSJim Jagielski aWndFormResult.SetValue( aStrResult );
1412*b1cdbd2cSJim Jagielski }
1413*b1cdbd2cSJim Jagielski CalcStruct(aString);
1414*b1cdbd2cSJim Jagielski
1415*b1cdbd2cSJim Jagielski nPos=GetFunctionPos(nPos);
1416*b1cdbd2cSJim Jagielski
1417*b1cdbd2cSJim Jagielski if(nPos<aSel.Min()-1)
1418*b1cdbd2cSJim Jagielski {
1419*b1cdbd2cSJim Jagielski xub_StrLen nPos1=aString.Search('(',nPos);
1420*b1cdbd2cSJim Jagielski EditNextFunc( sal_False, nPos1);
1421*b1cdbd2cSJim Jagielski }
1422*b1cdbd2cSJim Jagielski else
1423*b1cdbd2cSJim Jagielski {
1424*b1cdbd2cSJim Jagielski ClearAllParas();
1425*b1cdbd2cSJim Jagielski }
1426*b1cdbd2cSJim Jagielski
1427*b1cdbd2cSJim Jagielski m_pHelper->setSelection((xub_StrLen)aSel.Min(),(xub_StrLen)aSel.Max());
1428*b1cdbd2cSJim Jagielski bEditFlag=sal_False;
1429*b1cdbd2cSJim Jagielski return 0;
1430*b1cdbd2cSJim Jagielski }
1431*b1cdbd2cSJim Jagielski
IMPL_LINK(FormulaDlg_Impl,FormulaCursorHdl,EditBox *,EMPTYARG)1432*b1cdbd2cSJim Jagielski IMPL_LINK( FormulaDlg_Impl, FormulaCursorHdl, EditBox*, EMPTYARG )
1433*b1cdbd2cSJim Jagielski {
1434*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
1435*b1cdbd2cSJim Jagielski if (!pData) return 0;
1436*b1cdbd2cSJim Jagielski xub_StrLen nFStart = pData->GetFStart();
1437*b1cdbd2cSJim Jagielski
1438*b1cdbd2cSJim Jagielski bEditFlag=sal_True;
1439*b1cdbd2cSJim Jagielski
1440*b1cdbd2cSJim Jagielski String aInputFormula=m_pHelper->getCurrentFormula();
1441*b1cdbd2cSJim Jagielski String aString=pMEdit->GetText();
1442*b1cdbd2cSJim Jagielski
1443*b1cdbd2cSJim Jagielski Selection aSel =pMEdit->GetSelection();
1444*b1cdbd2cSJim Jagielski m_pHelper->setSelection((xub_StrLen)aSel.Min(),(xub_StrLen)aSel.Max());
1445*b1cdbd2cSJim Jagielski
1446*b1cdbd2cSJim Jagielski if(aSel.Min()==0)
1447*b1cdbd2cSJim Jagielski {
1448*b1cdbd2cSJim Jagielski aSel.Min()=1;
1449*b1cdbd2cSJim Jagielski pMEdit->SetSelection(aSel);
1450*b1cdbd2cSJim Jagielski }
1451*b1cdbd2cSJim Jagielski
1452*b1cdbd2cSJim Jagielski if(aSel.Min()!=aString.Len())
1453*b1cdbd2cSJim Jagielski {
1454*b1cdbd2cSJim Jagielski xub_StrLen nPos=(xub_StrLen)aSel.Min();
1455*b1cdbd2cSJim Jagielski
1456*b1cdbd2cSJim Jagielski nFStart=GetFunctionPos(nPos - 1);
1457*b1cdbd2cSJim Jagielski
1458*b1cdbd2cSJim Jagielski if(nFStart<nPos)
1459*b1cdbd2cSJim Jagielski {
1460*b1cdbd2cSJim Jagielski xub_StrLen nPos1=m_aFormulaHelper.GetFunctionEnd(aString,nFStart);
1461*b1cdbd2cSJim Jagielski
1462*b1cdbd2cSJim Jagielski if(nPos1>nPos || nPos1==STRING_NOTFOUND)
1463*b1cdbd2cSJim Jagielski {
1464*b1cdbd2cSJim Jagielski EditThisFunc(nFStart);
1465*b1cdbd2cSJim Jagielski }
1466*b1cdbd2cSJim Jagielski else
1467*b1cdbd2cSJim Jagielski {
1468*b1cdbd2cSJim Jagielski xub_StrLen n=nPos;
1469*b1cdbd2cSJim Jagielski short nCount=1;
1470*b1cdbd2cSJim Jagielski while(n>0)
1471*b1cdbd2cSJim Jagielski {
1472*b1cdbd2cSJim Jagielski if(aString.GetChar(n)==')')
1473*b1cdbd2cSJim Jagielski nCount++;
1474*b1cdbd2cSJim Jagielski else if(aString.GetChar(n)=='(')
1475*b1cdbd2cSJim Jagielski nCount--;
1476*b1cdbd2cSJim Jagielski if(nCount==0) break;
1477*b1cdbd2cSJim Jagielski n--;
1478*b1cdbd2cSJim Jagielski }
1479*b1cdbd2cSJim Jagielski if(nCount==0)
1480*b1cdbd2cSJim Jagielski {
1481*b1cdbd2cSJim Jagielski nFStart=m_aFormulaHelper.GetFunctionStart(aString,n,sal_True);
1482*b1cdbd2cSJim Jagielski EditThisFunc(nFStart);
1483*b1cdbd2cSJim Jagielski }
1484*b1cdbd2cSJim Jagielski else
1485*b1cdbd2cSJim Jagielski {
1486*b1cdbd2cSJim Jagielski ClearAllParas();
1487*b1cdbd2cSJim Jagielski }
1488*b1cdbd2cSJim Jagielski }
1489*b1cdbd2cSJim Jagielski }
1490*b1cdbd2cSJim Jagielski else
1491*b1cdbd2cSJim Jagielski {
1492*b1cdbd2cSJim Jagielski ClearAllParas();
1493*b1cdbd2cSJim Jagielski }
1494*b1cdbd2cSJim Jagielski }
1495*b1cdbd2cSJim Jagielski m_pHelper->setSelection((xub_StrLen)aSel.Min(),(xub_StrLen)aSel.Max());
1496*b1cdbd2cSJim Jagielski
1497*b1cdbd2cSJim Jagielski bEditFlag=sal_False;
1498*b1cdbd2cSJim Jagielski return 0;
1499*b1cdbd2cSJim Jagielski }
1500*b1cdbd2cSJim Jagielski
UpdateSelection()1501*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::UpdateSelection()
1502*b1cdbd2cSJim Jagielski {
1503*b1cdbd2cSJim Jagielski m_pHelper->setSelection((xub_StrLen)aFuncSel.Min(),(xub_StrLen)aFuncSel.Max());
1504*b1cdbd2cSJim Jagielski m_pHelper->setCurrentFormula( pFuncDesc->getFormula( m_aArguments ) );
1505*b1cdbd2cSJim Jagielski pMEdit->SetText(m_pHelper->getCurrentFormula());
1506*b1cdbd2cSJim Jagielski xub_StrLen PrivStart, PrivEnd;
1507*b1cdbd2cSJim Jagielski m_pHelper->getSelection( PrivStart, PrivEnd);
1508*b1cdbd2cSJim Jagielski aFuncSel.Min()=PrivStart;
1509*b1cdbd2cSJim Jagielski aFuncSel.Max()=PrivEnd;
1510*b1cdbd2cSJim Jagielski
1511*b1cdbd2cSJim Jagielski nArgs = pFuncDesc->getSuppressedArgumentCount();
1512*b1cdbd2cSJim Jagielski
1513*b1cdbd2cSJim Jagielski String aFormula=pMEdit->GetText();
1514*b1cdbd2cSJim Jagielski sal_Int32 nArgPos=m_aFormulaHelper.GetArgStart( aFormula,PrivStart,0);
1515*b1cdbd2cSJim Jagielski
1516*b1cdbd2cSJim Jagielski sal_uInt16 nPos=pParaWin->GetActiveLine();
1517*b1cdbd2cSJim Jagielski
1518*b1cdbd2cSJim Jagielski for(sal_uInt16 i=0;i<nPos;i++)
1519*b1cdbd2cSJim Jagielski {
1520*b1cdbd2cSJim Jagielski nArgPos += (m_aArguments[i].getLength() + 1);
1521*b1cdbd2cSJim Jagielski }
1522*b1cdbd2cSJim Jagielski sal_Int32 nLength= m_aArguments[nPos].getLength();
1523*b1cdbd2cSJim Jagielski
1524*b1cdbd2cSJim Jagielski Selection aSel(nArgPos,nArgPos+nLength);
1525*b1cdbd2cSJim Jagielski m_pHelper->setSelection((sal_uInt16)nArgPos,(sal_uInt16)(nArgPos+nLength));
1526*b1cdbd2cSJim Jagielski pMEdit->SetSelection(aSel);
1527*b1cdbd2cSJim Jagielski aMEFormula.UpdateOldSel();
1528*b1cdbd2cSJim Jagielski }
RefInputStartBefore(RefEdit * pEdit,RefButton * pButton)1529*b1cdbd2cSJim Jagielski ::std::pair<RefButton*,RefEdit*> FormulaDlg_Impl::RefInputStartBefore( RefEdit* pEdit, RefButton* pButton )
1530*b1cdbd2cSJim Jagielski {
1531*b1cdbd2cSJim Jagielski aEdRef.Show();
1532*b1cdbd2cSJim Jagielski pTheRefEdit = pEdit;
1533*b1cdbd2cSJim Jagielski pTheRefButton = pButton;
1534*b1cdbd2cSJim Jagielski
1535*b1cdbd2cSJim Jagielski if( pTheRefEdit )
1536*b1cdbd2cSJim Jagielski {
1537*b1cdbd2cSJim Jagielski aEdRef.SetRefString( pTheRefEdit->GetText() );
1538*b1cdbd2cSJim Jagielski aEdRef.SetSelection( pTheRefEdit->GetSelection() );
1539*b1cdbd2cSJim Jagielski aEdRef.SetHelpId( pTheRefEdit->GetHelpId() );
1540*b1cdbd2cSJim Jagielski aEdRef.SetUniqueId( pTheRefEdit->GetUniqueId() );
1541*b1cdbd2cSJim Jagielski }
1542*b1cdbd2cSJim Jagielski
1543*b1cdbd2cSJim Jagielski aRefBtn.Show( pButton != NULL );
1544*b1cdbd2cSJim Jagielski
1545*b1cdbd2cSJim Jagielski //m_pHelper->RefInputStart( &aEdRef, pButton ? &aRefBtn : NULL );
1546*b1cdbd2cSJim Jagielski ::std::pair<RefButton*,RefEdit*> aPair;
1547*b1cdbd2cSJim Jagielski aPair.first = pButton ? &aRefBtn : NULL;
1548*b1cdbd2cSJim Jagielski aPair.second = &aEdRef;
1549*b1cdbd2cSJim Jagielski return aPair;
1550*b1cdbd2cSJim Jagielski }
RefInputStartAfter(RefEdit *,RefButton *)1551*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::RefInputStartAfter( RefEdit* /*pEdit*/, RefButton* /*pButton*/ )
1552*b1cdbd2cSJim Jagielski {
1553*b1cdbd2cSJim Jagielski aRefBtn.SetEndImage();
1554*b1cdbd2cSJim Jagielski
1555*b1cdbd2cSJim Jagielski if( pTheRefEdit )
1556*b1cdbd2cSJim Jagielski {
1557*b1cdbd2cSJim Jagielski String aStr = aTitle2;
1558*b1cdbd2cSJim Jagielski aStr += ' ';
1559*b1cdbd2cSJim Jagielski aStr += aFtEditName.GetText();
1560*b1cdbd2cSJim Jagielski aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "( " ) );
1561*b1cdbd2cSJim Jagielski if( pParaWin->GetActiveLine() > 0 )
1562*b1cdbd2cSJim Jagielski aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "...; " ) );
1563*b1cdbd2cSJim Jagielski aStr += pParaWin->GetActiveArgName();
1564*b1cdbd2cSJim Jagielski if( pParaWin->GetActiveLine() + 1 < nArgs )
1565*b1cdbd2cSJim Jagielski aStr.AppendAscii(RTL_CONSTASCII_STRINGPARAM( "; ..." ));
1566*b1cdbd2cSJim Jagielski aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " )" ) );
1567*b1cdbd2cSJim Jagielski
1568*b1cdbd2cSJim Jagielski m_pParent->SetText( MnemonicGenerator::EraseAllMnemonicChars( aStr ) );
1569*b1cdbd2cSJim Jagielski }
1570*b1cdbd2cSJim Jagielski }
RefInputDoneAfter(sal_Bool bForced)1571*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::RefInputDoneAfter( sal_Bool bForced )
1572*b1cdbd2cSJim Jagielski {
1573*b1cdbd2cSJim Jagielski aRefBtn.SetStartImage();
1574*b1cdbd2cSJim Jagielski if( bForced || !aRefBtn.IsVisible() )
1575*b1cdbd2cSJim Jagielski {
1576*b1cdbd2cSJim Jagielski aEdRef.Hide();
1577*b1cdbd2cSJim Jagielski aRefBtn.Hide();
1578*b1cdbd2cSJim Jagielski if( pTheRefEdit )
1579*b1cdbd2cSJim Jagielski {
1580*b1cdbd2cSJim Jagielski pTheRefEdit->SetRefString( aEdRef.GetText() );
1581*b1cdbd2cSJim Jagielski pTheRefEdit->GrabFocus();
1582*b1cdbd2cSJim Jagielski
1583*b1cdbd2cSJim Jagielski if( pTheRefButton )
1584*b1cdbd2cSJim Jagielski pTheRefButton->SetStartImage();
1585*b1cdbd2cSJim Jagielski
1586*b1cdbd2cSJim Jagielski sal_uInt16 nPrivActiv = pParaWin->GetActiveLine();
1587*b1cdbd2cSJim Jagielski pParaWin->SetArgument( nPrivActiv, aEdRef.GetText() );
1588*b1cdbd2cSJim Jagielski ModifyHdl( pParaWin );
1589*b1cdbd2cSJim Jagielski pTheRefEdit = NULL;
1590*b1cdbd2cSJim Jagielski }
1591*b1cdbd2cSJim Jagielski m_pParent->SetText( aTitle1 );
1592*b1cdbd2cSJim Jagielski }
1593*b1cdbd2cSJim Jagielski }
GetCurrRefEdit()1594*b1cdbd2cSJim Jagielski RefEdit* FormulaDlg_Impl::GetCurrRefEdit()
1595*b1cdbd2cSJim Jagielski {
1596*b1cdbd2cSJim Jagielski return aEdRef.IsVisible() ? &aEdRef : pParaWin->GetActiveEdit();
1597*b1cdbd2cSJim Jagielski }
Update()1598*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::Update()
1599*b1cdbd2cSJim Jagielski {
1600*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
1601*b1cdbd2cSJim Jagielski const String sExpression = pMEdit->GetText();
1602*b1cdbd2cSJim Jagielski aOldFormula = String();
1603*b1cdbd2cSJim Jagielski UpdateTokenArray(sExpression);
1604*b1cdbd2cSJim Jagielski FormulaCursorHdl(&aMEFormula);
1605*b1cdbd2cSJim Jagielski CalcStruct(sExpression);
1606*b1cdbd2cSJim Jagielski if(pData->GetMode() == FORMULA_FORMDLG_FORMULA)
1607*b1cdbd2cSJim Jagielski aTabCtrl.SetCurPageId(TP_FUNCTION);
1608*b1cdbd2cSJim Jagielski else
1609*b1cdbd2cSJim Jagielski aTabCtrl.SetCurPageId(TP_STRUCT);
1610*b1cdbd2cSJim Jagielski aBtnMatrix.Check(pData->GetMatrixFlag());
1611*b1cdbd2cSJim Jagielski /*aTimer.SetTimeout(200);
1612*b1cdbd2cSJim Jagielski aTimer.SetTimeoutHdl(LINK( this, FormulaDlg_Impl, UpdateFocusHdl));
1613*b1cdbd2cSJim Jagielski aTimer.Start();*/
1614*b1cdbd2cSJim Jagielski }
Update(const String & _sExp)1615*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::Update(const String& _sExp)
1616*b1cdbd2cSJim Jagielski {
1617*b1cdbd2cSJim Jagielski CalcStruct(_sExp);
1618*b1cdbd2cSJim Jagielski FillDialog();
1619*b1cdbd2cSJim Jagielski //aBtnForward.Enable(sal_True); //@New
1620*b1cdbd2cSJim Jagielski FuncSelHdl(NULL);
1621*b1cdbd2cSJim Jagielski }
SetMeText(const String & _sText)1622*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::SetMeText(const String& _sText)
1623*b1cdbd2cSJim Jagielski {
1624*b1cdbd2cSJim Jagielski FormEditData* pData = m_pHelper->getFormEditData();
1625*b1cdbd2cSJim Jagielski pMEdit->SetText(_sText);
1626*b1cdbd2cSJim Jagielski pMEdit->SetSelection( pData->GetSelection());
1627*b1cdbd2cSJim Jagielski aMEFormula.UpdateOldSel();
1628*b1cdbd2cSJim Jagielski }
SetMeText(const String & _sText,xub_StrLen PrivStart,xub_StrLen PrivEnd,sal_Bool bMatrix,sal_Bool _bSelect,sal_Bool _bUpdate)1629*b1cdbd2cSJim Jagielski FormulaDlgMode FormulaDlg_Impl::SetMeText(const String& _sText,xub_StrLen PrivStart, xub_StrLen PrivEnd,sal_Bool bMatrix,sal_Bool _bSelect,sal_Bool _bUpdate)
1630*b1cdbd2cSJim Jagielski {
1631*b1cdbd2cSJim Jagielski FormulaDlgMode eMode = FORMULA_FORMDLG_FORMULA;
1632*b1cdbd2cSJim Jagielski if(!bEditFlag)
1633*b1cdbd2cSJim Jagielski pMEdit->SetText(_sText);
1634*b1cdbd2cSJim Jagielski
1635*b1cdbd2cSJim Jagielski if ( _bSelect || !bEditFlag )
1636*b1cdbd2cSJim Jagielski pMEdit->SetSelection( Selection(PrivStart, PrivEnd));
1637*b1cdbd2cSJim Jagielski if ( _bUpdate )
1638*b1cdbd2cSJim Jagielski {
1639*b1cdbd2cSJim Jagielski aMEFormula.UpdateOldSel();
1640*b1cdbd2cSJim Jagielski pMEdit->Invalidate();
1641*b1cdbd2cSJim Jagielski m_pHelper->showReference(pMEdit->GetSelected());
1642*b1cdbd2cSJim Jagielski eMode = FORMULA_FORMDLG_EDIT;
1643*b1cdbd2cSJim Jagielski
1644*b1cdbd2cSJim Jagielski aBtnMatrix.Check( bMatrix );
1645*b1cdbd2cSJim Jagielski } // if ( _bUpdate )
1646*b1cdbd2cSJim Jagielski return eMode;
1647*b1cdbd2cSJim Jagielski }
CheckMatrix(String & aFormula)1648*b1cdbd2cSJim Jagielski sal_Bool FormulaDlg_Impl::CheckMatrix(String& aFormula)
1649*b1cdbd2cSJim Jagielski {
1650*b1cdbd2cSJim Jagielski pMEdit->GrabFocus();
1651*b1cdbd2cSJim Jagielski xub_StrLen nLen = aFormula.Len();
1652*b1cdbd2cSJim Jagielski sal_Bool bMatrix = nLen > 3 // Matrix-Formel ?
1653*b1cdbd2cSJim Jagielski && aFormula.GetChar(0) == '{'
1654*b1cdbd2cSJim Jagielski && aFormula.GetChar(1) == '='
1655*b1cdbd2cSJim Jagielski && aFormula.GetChar(nLen-1) == '}';
1656*b1cdbd2cSJim Jagielski if ( bMatrix )
1657*b1cdbd2cSJim Jagielski {
1658*b1cdbd2cSJim Jagielski aFormula.Erase( 0, 1 );
1659*b1cdbd2cSJim Jagielski aFormula.Erase( aFormula.Len()-1, 1);
1660*b1cdbd2cSJim Jagielski aBtnMatrix.Check( bMatrix );
1661*b1cdbd2cSJim Jagielski aBtnMatrix.Disable();
1662*b1cdbd2cSJim Jagielski } // if ( bMatrix )
1663*b1cdbd2cSJim Jagielski
1664*b1cdbd2cSJim Jagielski aTabCtrl.SetCurPageId(TP_STRUCT);
1665*b1cdbd2cSJim Jagielski return bMatrix;
1666*b1cdbd2cSJim Jagielski }
IMPL_LINK(FormulaDlg_Impl,StructSelHdl,StructPage *,pStruP)1667*b1cdbd2cSJim Jagielski IMPL_LINK( FormulaDlg_Impl, StructSelHdl, StructPage*, pStruP )
1668*b1cdbd2cSJim Jagielski {
1669*b1cdbd2cSJim Jagielski bStructUpdate=sal_False;
1670*b1cdbd2cSJim Jagielski if(pStructPage->IsVisible()) aBtnForward.Enable(sal_False); //@New
1671*b1cdbd2cSJim Jagielski
1672*b1cdbd2cSJim Jagielski if(pStructPage==pStruP)
1673*b1cdbd2cSJim Jagielski {
1674*b1cdbd2cSJim Jagielski /// TODO
1675*b1cdbd2cSJim Jagielski //ScToken* pSelToken = pStructPage->GetSelectedToken();
1676*b1cdbd2cSJim Jagielski // ScToken* pOrigToken = ((pSelToken && pSelToken->GetType() == svFAP) ?
1677*b1cdbd2cSJim Jagielski // pSelToken->GetFAPOrigToken() : pSelToken);
1678*b1cdbd2cSJim Jagielski //xub_StrLen nTokPos=1;
1679*b1cdbd2cSJim Jagielski
1680*b1cdbd2cSJim Jagielski //if(pScTokA!=NULL)
1681*b1cdbd2cSJim Jagielski //{
1682*b1cdbd2cSJim Jagielski // ScToken* pToken = pScTokA->First();
1683*b1cdbd2cSJim Jagielski
1684*b1cdbd2cSJim Jagielski // while(pToken!=NULL)
1685*b1cdbd2cSJim Jagielski // {
1686*b1cdbd2cSJim Jagielski // String aString;
1687*b1cdbd2cSJim Jagielski // if ( pToken == pOrigToken )
1688*b1cdbd2cSJim Jagielski // break;
1689*b1cdbd2cSJim Jagielski // pComp->CreateStringFromToken( aString,pToken);
1690*b1cdbd2cSJim Jagielski // nTokPos = sal::static_int_cast<xub_StrLen>( nTokPos + aString.Len() );
1691*b1cdbd2cSJim Jagielski // pToken=pScTokA->Next();
1692*b1cdbd2cSJim Jagielski // }
1693*b1cdbd2cSJim Jagielski // EditThisFunc(nTokPos);
1694*b1cdbd2cSJim Jagielski //}
1695*b1cdbd2cSJim Jagielski
1696*b1cdbd2cSJim Jagielski //if( pOrigToken )
1697*b1cdbd2cSJim Jagielski //{
1698*b1cdbd2cSJim Jagielski // String aStr;
1699*b1cdbd2cSJim Jagielski // pComp->CreateStringFromToken( aStr, pOrigToken );
1700*b1cdbd2cSJim Jagielski // String aEntryTxt=pStructPage->GetSelectedEntryText();
1701*b1cdbd2cSJim Jagielski
1702*b1cdbd2cSJim Jagielski // if(aEntryTxt!=aStr)
1703*b1cdbd2cSJim Jagielski // ShowReference(aEntryTxt);
1704*b1cdbd2cSJim Jagielski //}
1705*b1cdbd2cSJim Jagielski
1706*b1cdbd2cSJim Jagielski }
1707*b1cdbd2cSJim Jagielski bStructUpdate=sal_True;
1708*b1cdbd2cSJim Jagielski return 0;
1709*b1cdbd2cSJim Jagielski }
IMPL_LINK(FormulaDlg_Impl,MatrixHdl,CheckBox *,EMPTYARG)1710*b1cdbd2cSJim Jagielski IMPL_LINK( FormulaDlg_Impl, MatrixHdl, CheckBox *, EMPTYARG )
1711*b1cdbd2cSJim Jagielski {
1712*b1cdbd2cSJim Jagielski bUserMatrixFlag=sal_True;
1713*b1cdbd2cSJim Jagielski return 0;
1714*b1cdbd2cSJim Jagielski }
1715*b1cdbd2cSJim Jagielski
IMPL_LINK(FormulaDlg_Impl,FuncSelHdl,FuncPage *,EMPTYARG)1716*b1cdbd2cSJim Jagielski IMPL_LINK( FormulaDlg_Impl, FuncSelHdl, FuncPage*, EMPTYARG )
1717*b1cdbd2cSJim Jagielski {
1718*b1cdbd2cSJim Jagielski sal_uInt16 nCat = pFuncPage->GetCategory();
1719*b1cdbd2cSJim Jagielski if ( nCat == LISTBOX_ENTRY_NOTFOUND ) nCat = 0;
1720*b1cdbd2cSJim Jagielski sal_uInt16 nFunc = pFuncPage->GetFunction();
1721*b1cdbd2cSJim Jagielski if ( nFunc == LISTBOX_ENTRY_NOTFOUND ) nFunc = 0;
1722*b1cdbd2cSJim Jagielski
1723*b1cdbd2cSJim Jagielski if ( (pFuncPage->GetFunctionEntryCount() > 0)
1724*b1cdbd2cSJim Jagielski && (pFuncPage->GetFunction() != LISTBOX_ENTRY_NOTFOUND) )
1725*b1cdbd2cSJim Jagielski {
1726*b1cdbd2cSJim Jagielski const IFunctionDescription* pDesc =pFuncPage->GetFuncDesc( pFuncPage->GetFunction() );
1727*b1cdbd2cSJim Jagielski
1728*b1cdbd2cSJim Jagielski if(pDesc!=pFuncDesc) aBtnForward.Enable(sal_True); //new
1729*b1cdbd2cSJim Jagielski
1730*b1cdbd2cSJim Jagielski if (pDesc)
1731*b1cdbd2cSJim Jagielski {
1732*b1cdbd2cSJim Jagielski pDesc->initArgumentInfo(); // full argument info is needed
1733*b1cdbd2cSJim Jagielski
1734*b1cdbd2cSJim Jagielski String aSig = pDesc->getSignature();
1735*b1cdbd2cSJim Jagielski aFtHeadLine.SetText( pDesc->getFunctionName() );
1736*b1cdbd2cSJim Jagielski aFtFuncName.SetText( aSig );
1737*b1cdbd2cSJim Jagielski aFtFuncDesc.SetText( pDesc->getDescription() );
1738*b1cdbd2cSJim Jagielski }
1739*b1cdbd2cSJim Jagielski }
1740*b1cdbd2cSJim Jagielski else
1741*b1cdbd2cSJim Jagielski {
1742*b1cdbd2cSJim Jagielski aFtHeadLine.SetText( String() );
1743*b1cdbd2cSJim Jagielski aFtFuncName.SetText( String() );
1744*b1cdbd2cSJim Jagielski aFtFuncDesc.SetText( String() );
1745*b1cdbd2cSJim Jagielski }
1746*b1cdbd2cSJim Jagielski return 0;
1747*b1cdbd2cSJim Jagielski }
1748*b1cdbd2cSJim Jagielski
UpdateParaWin(const Selection & _rSelection,const String & _sRefStr)1749*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::UpdateParaWin(const Selection& _rSelection,const String& _sRefStr)
1750*b1cdbd2cSJim Jagielski {
1751*b1cdbd2cSJim Jagielski Selection theSel = _rSelection;
1752*b1cdbd2cSJim Jagielski aEdRef.ReplaceSelected( _sRefStr );
1753*b1cdbd2cSJim Jagielski theSel.Max() = theSel.Min() + _sRefStr.Len();
1754*b1cdbd2cSJim Jagielski aEdRef.SetSelection( theSel );
1755*b1cdbd2cSJim Jagielski
1756*b1cdbd2cSJim Jagielski //-------------------------------------
1757*b1cdbd2cSJim Jagielski // Manuelles Update der Ergebnisfelder:
1758*b1cdbd2cSJim Jagielski //-------------------------------------
1759*b1cdbd2cSJim Jagielski sal_uInt16 nPrivActiv = pParaWin->GetActiveLine();
1760*b1cdbd2cSJim Jagielski pParaWin->SetArgument(nPrivActiv,aEdRef.GetText());
1761*b1cdbd2cSJim Jagielski pParaWin->UpdateParas();
1762*b1cdbd2cSJim Jagielski
1763*b1cdbd2cSJim Jagielski Edit* pEd = GetCurrRefEdit();
1764*b1cdbd2cSJim Jagielski if( pEd != NULL )
1765*b1cdbd2cSJim Jagielski pEd->SetSelection( theSel );
1766*b1cdbd2cSJim Jagielski
1767*b1cdbd2cSJim Jagielski pParaWin->SetRefMode(sal_False);
1768*b1cdbd2cSJim Jagielski }
UpdateParaWin(Selection & _rSelection)1769*b1cdbd2cSJim Jagielski sal_Bool FormulaDlg_Impl::UpdateParaWin(Selection& _rSelection)
1770*b1cdbd2cSJim Jagielski {
1771*b1cdbd2cSJim Jagielski pParaWin->SetRefMode(sal_True);
1772*b1cdbd2cSJim Jagielski
1773*b1cdbd2cSJim Jagielski String aStrEd;
1774*b1cdbd2cSJim Jagielski Edit* pEd = GetCurrRefEdit();
1775*b1cdbd2cSJim Jagielski if(pEd!=NULL && pTheRefEdit==NULL)
1776*b1cdbd2cSJim Jagielski {
1777*b1cdbd2cSJim Jagielski _rSelection=pEd->GetSelection();
1778*b1cdbd2cSJim Jagielski _rSelection.Justify();
1779*b1cdbd2cSJim Jagielski aStrEd=pEd->GetText();
1780*b1cdbd2cSJim Jagielski aEdRef.SetRefString(aStrEd);
1781*b1cdbd2cSJim Jagielski aEdRef.SetSelection( _rSelection );
1782*b1cdbd2cSJim Jagielski }
1783*b1cdbd2cSJim Jagielski else
1784*b1cdbd2cSJim Jagielski {
1785*b1cdbd2cSJim Jagielski _rSelection=aEdRef.GetSelection();
1786*b1cdbd2cSJim Jagielski _rSelection.Justify();
1787*b1cdbd2cSJim Jagielski aStrEd= aEdRef.GetText();
1788*b1cdbd2cSJim Jagielski }
1789*b1cdbd2cSJim Jagielski return pTheRefEdit == NULL;
1790*b1cdbd2cSJim Jagielski }
FindFocusWin(Window * pWin)1791*b1cdbd2cSJim Jagielski rtl::OString FormulaDlg_Impl::FindFocusWin(Window *pWin)
1792*b1cdbd2cSJim Jagielski {
1793*b1cdbd2cSJim Jagielski rtl::OString aUniqueId;
1794*b1cdbd2cSJim Jagielski if(pWin->HasFocus())
1795*b1cdbd2cSJim Jagielski {
1796*b1cdbd2cSJim Jagielski aUniqueId=pWin->GetUniqueId();
1797*b1cdbd2cSJim Jagielski if(aUniqueId.getLength()==0)
1798*b1cdbd2cSJim Jagielski {
1799*b1cdbd2cSJim Jagielski Window* pParent=pWin->GetParent();
1800*b1cdbd2cSJim Jagielski while(pParent!=NULL)
1801*b1cdbd2cSJim Jagielski {
1802*b1cdbd2cSJim Jagielski aUniqueId=pParent->GetUniqueId();
1803*b1cdbd2cSJim Jagielski
1804*b1cdbd2cSJim Jagielski if(aUniqueId.getLength()!=0) break;
1805*b1cdbd2cSJim Jagielski
1806*b1cdbd2cSJim Jagielski pParent=pParent->GetParent();
1807*b1cdbd2cSJim Jagielski }
1808*b1cdbd2cSJim Jagielski }
1809*b1cdbd2cSJim Jagielski }
1810*b1cdbd2cSJim Jagielski else
1811*b1cdbd2cSJim Jagielski {
1812*b1cdbd2cSJim Jagielski sal_uInt16 nCount=pWin->GetChildCount();
1813*b1cdbd2cSJim Jagielski
1814*b1cdbd2cSJim Jagielski for(sal_uInt16 i=0;i<nCount;i++)
1815*b1cdbd2cSJim Jagielski {
1816*b1cdbd2cSJim Jagielski Window* pChild=pWin->GetChild(i);
1817*b1cdbd2cSJim Jagielski aUniqueId=FindFocusWin(pChild);
1818*b1cdbd2cSJim Jagielski if(aUniqueId.getLength()>0) break;
1819*b1cdbd2cSJim Jagielski }
1820*b1cdbd2cSJim Jagielski }
1821*b1cdbd2cSJim Jagielski return aUniqueId;
1822*b1cdbd2cSJim Jagielski }
1823*b1cdbd2cSJim Jagielski
SetEdSelection()1824*b1cdbd2cSJim Jagielski void FormulaDlg_Impl::SetEdSelection()
1825*b1cdbd2cSJim Jagielski {
1826*b1cdbd2cSJim Jagielski Edit* pEd = GetCurrRefEdit()/*aScParaWin.GetActiveEdit()*/;
1827*b1cdbd2cSJim Jagielski if( pEd )
1828*b1cdbd2cSJim Jagielski {
1829*b1cdbd2cSJim Jagielski Selection theSel = aEdRef.GetSelection();
1830*b1cdbd2cSJim Jagielski // Edit may have the focus -> call ModifyHdl in addition
1831*b1cdbd2cSJim Jagielski // to what's happening in GetFocus
1832*b1cdbd2cSJim Jagielski pEd->GetModifyHdl().Call(pEd);
1833*b1cdbd2cSJim Jagielski pEd->GrabFocus();
1834*b1cdbd2cSJim Jagielski pEd->SetSelection(theSel);
1835*b1cdbd2cSJim Jagielski } // if( pEd )
1836*b1cdbd2cSJim Jagielski }
1837*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetFormulaHelper() const1838*b1cdbd2cSJim Jagielski const FormulaHelper& FormulaDlg_Impl::GetFormulaHelper() const
1839*b1cdbd2cSJim Jagielski {
1840*b1cdbd2cSJim Jagielski return m_aFormulaHelper;
1841*b1cdbd2cSJim Jagielski }
1842*b1cdbd2cSJim Jagielski //============================================================================
FormulaModalDialog(Window * pParent,bool _bSupportFunctionResult,bool _bSupportResult,bool _bSupportMatrix,IFormulaEditorHelper * _pHelper,IFunctionManager * _pFunctionMgr,IControlReferenceHandler * _pDlg)1843*b1cdbd2cSJim Jagielski FormulaModalDialog::FormulaModalDialog( Window* pParent
1844*b1cdbd2cSJim Jagielski , bool _bSupportFunctionResult
1845*b1cdbd2cSJim Jagielski , bool _bSupportResult
1846*b1cdbd2cSJim Jagielski , bool _bSupportMatrix
1847*b1cdbd2cSJim Jagielski , IFormulaEditorHelper* _pHelper
1848*b1cdbd2cSJim Jagielski , IFunctionManager* _pFunctionMgr
1849*b1cdbd2cSJim Jagielski , IControlReferenceHandler* _pDlg ) :
1850*b1cdbd2cSJim Jagielski ModalDialog( pParent, ModuleRes(RID_FORMULADLG_FORMULA_MODAL) ),
1851*b1cdbd2cSJim Jagielski m_pImpl( new FormulaDlg_Impl(this,_bSupportFunctionResult
1852*b1cdbd2cSJim Jagielski , _bSupportResult
1853*b1cdbd2cSJim Jagielski , _bSupportMatrix
1854*b1cdbd2cSJim Jagielski ,_pHelper,_pFunctionMgr,_pDlg))
1855*b1cdbd2cSJim Jagielski {
1856*b1cdbd2cSJim Jagielski FreeResource();
1857*b1cdbd2cSJim Jagielski SetText(m_pImpl->aTitle1);
1858*b1cdbd2cSJim Jagielski }
~FormulaModalDialog()1859*b1cdbd2cSJim Jagielski FormulaModalDialog::~FormulaModalDialog()
1860*b1cdbd2cSJim Jagielski {
1861*b1cdbd2cSJim Jagielski }
1862*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
Update(const String & _sExp)1863*b1cdbd2cSJim Jagielski void FormulaModalDialog::Update(const String& _sExp)
1864*b1cdbd2cSJim Jagielski {
1865*b1cdbd2cSJim Jagielski m_pImpl->Update(_sExp);
1866*b1cdbd2cSJim Jagielski }
1867*b1cdbd2cSJim Jagielski
1868*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
SetMeText(const String & _sText)1869*b1cdbd2cSJim Jagielski void FormulaModalDialog::SetMeText(const String& _sText)
1870*b1cdbd2cSJim Jagielski {
1871*b1cdbd2cSJim Jagielski m_pImpl->SetMeText(_sText);
1872*b1cdbd2cSJim Jagielski }
1873*b1cdbd2cSJim Jagielski
1874*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
SetMeText(const String & _sText,xub_StrLen PrivStart,xub_StrLen PrivEnd,sal_Bool bMatrix,sal_Bool _bSelect,sal_Bool _bUpdate)1875*b1cdbd2cSJim Jagielski FormulaDlgMode FormulaModalDialog::SetMeText(const String& _sText,xub_StrLen PrivStart, xub_StrLen PrivEnd,sal_Bool bMatrix,sal_Bool _bSelect,sal_Bool _bUpdate)
1876*b1cdbd2cSJim Jagielski {
1877*b1cdbd2cSJim Jagielski return m_pImpl->SetMeText(_sText,PrivStart, PrivEnd,bMatrix,_bSelect,_bUpdate);
1878*b1cdbd2cSJim Jagielski }
1879*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
CheckMatrix()1880*b1cdbd2cSJim Jagielski void FormulaModalDialog::CheckMatrix()
1881*b1cdbd2cSJim Jagielski {
1882*b1cdbd2cSJim Jagielski m_pImpl->aBtnMatrix.Check();
1883*b1cdbd2cSJim Jagielski }
1884*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
CheckMatrix(String & aFormula)1885*b1cdbd2cSJim Jagielski sal_Bool FormulaModalDialog::CheckMatrix(String& aFormula)
1886*b1cdbd2cSJim Jagielski {
1887*b1cdbd2cSJim Jagielski return m_pImpl->CheckMatrix(aFormula);
1888*b1cdbd2cSJim Jagielski }
1889*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetMeText() const1890*b1cdbd2cSJim Jagielski String FormulaModalDialog::GetMeText() const
1891*b1cdbd2cSJim Jagielski {
1892*b1cdbd2cSJim Jagielski return m_pImpl->pMEdit->GetText();
1893*b1cdbd2cSJim Jagielski }
1894*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
Update()1895*b1cdbd2cSJim Jagielski void FormulaModalDialog::Update()
1896*b1cdbd2cSJim Jagielski {
1897*b1cdbd2cSJim Jagielski m_pImpl->Update();
1898*b1cdbd2cSJim Jagielski }
1899*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetFormulaHelper() const1900*b1cdbd2cSJim Jagielski const FormulaHelper& FormulaModalDialog::GetFormulaHelper() const
1901*b1cdbd2cSJim Jagielski {
1902*b1cdbd2cSJim Jagielski return m_pImpl->GetFormulaHelper();
1903*b1cdbd2cSJim Jagielski }
1904*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
isUserMatrix() const1905*b1cdbd2cSJim Jagielski sal_Bool FormulaModalDialog::isUserMatrix() const
1906*b1cdbd2cSJim Jagielski {
1907*b1cdbd2cSJim Jagielski return m_pImpl->bUserMatrixFlag;
1908*b1cdbd2cSJim Jagielski }
DoEnter(sal_Bool _bOk)1909*b1cdbd2cSJim Jagielski void FormulaModalDialog::DoEnter(sal_Bool _bOk)
1910*b1cdbd2cSJim Jagielski {
1911*b1cdbd2cSJim Jagielski m_pImpl->DoEnter(_bOk);
1912*b1cdbd2cSJim Jagielski }
RefInputStartBefore(RefEdit * pEdit,RefButton * pButton)1913*b1cdbd2cSJim Jagielski ::std::pair<RefButton*,RefEdit*> FormulaModalDialog::RefInputStartBefore( RefEdit* pEdit, RefButton* pButton )
1914*b1cdbd2cSJim Jagielski {
1915*b1cdbd2cSJim Jagielski return m_pImpl->RefInputStartBefore( pEdit, pButton );
1916*b1cdbd2cSJim Jagielski }
RefInputStartAfter(RefEdit * pEdit,RefButton * pButton)1917*b1cdbd2cSJim Jagielski void FormulaModalDialog::RefInputStartAfter( RefEdit* pEdit, RefButton* pButton )
1918*b1cdbd2cSJim Jagielski {
1919*b1cdbd2cSJim Jagielski m_pImpl->RefInputStartAfter( pEdit, pButton );
1920*b1cdbd2cSJim Jagielski }
RefInputDoneAfter(sal_Bool bForced)1921*b1cdbd2cSJim Jagielski void FormulaModalDialog::RefInputDoneAfter( sal_Bool bForced )
1922*b1cdbd2cSJim Jagielski {
1923*b1cdbd2cSJim Jagielski m_pImpl->RefInputDoneAfter( bForced );
1924*b1cdbd2cSJim Jagielski }
1925*b1cdbd2cSJim Jagielski
FindFocusWin(Window * pWin)1926*b1cdbd2cSJim Jagielski rtl::OString FormulaModalDialog::FindFocusWin(Window *pWin)
1927*b1cdbd2cSJim Jagielski {
1928*b1cdbd2cSJim Jagielski return m_pImpl->FindFocusWin( pWin );
1929*b1cdbd2cSJim Jagielski }
1930*b1cdbd2cSJim Jagielski
SetFocusWin(Window * pWin,const rtl::OString & nUniqueId)1931*b1cdbd2cSJim Jagielski void FormulaModalDialog::SetFocusWin(Window *pWin,const rtl::OString& nUniqueId)
1932*b1cdbd2cSJim Jagielski {
1933*b1cdbd2cSJim Jagielski if(pWin->GetUniqueId()==nUniqueId)
1934*b1cdbd2cSJim Jagielski {
1935*b1cdbd2cSJim Jagielski pWin->GrabFocus();
1936*b1cdbd2cSJim Jagielski }
1937*b1cdbd2cSJim Jagielski else
1938*b1cdbd2cSJim Jagielski {
1939*b1cdbd2cSJim Jagielski sal_uInt16 nCount=pWin->GetChildCount();
1940*b1cdbd2cSJim Jagielski
1941*b1cdbd2cSJim Jagielski for(sal_uInt16 i=0;i<nCount;i++)
1942*b1cdbd2cSJim Jagielski {
1943*b1cdbd2cSJim Jagielski Window* pChild=pWin->GetChild(i);
1944*b1cdbd2cSJim Jagielski SetFocusWin(pChild,nUniqueId);
1945*b1cdbd2cSJim Jagielski }
1946*b1cdbd2cSJim Jagielski }
1947*b1cdbd2cSJim Jagielski }
1948*b1cdbd2cSJim Jagielski
1949*b1cdbd2cSJim Jagielski
PreNotify(NotifyEvent & rNEvt)1950*b1cdbd2cSJim Jagielski long FormulaModalDialog::PreNotify( NotifyEvent& rNEvt )
1951*b1cdbd2cSJim Jagielski {
1952*b1cdbd2cSJim Jagielski m_pImpl->PreNotify( rNEvt );
1953*b1cdbd2cSJim Jagielski
1954*b1cdbd2cSJim Jagielski return ModalDialog::PreNotify(rNEvt);
1955*b1cdbd2cSJim Jagielski }
1956*b1cdbd2cSJim Jagielski
HighlightFunctionParas(const String & aFormula)1957*b1cdbd2cSJim Jagielski void FormulaModalDialog::HighlightFunctionParas(const String& aFormula)
1958*b1cdbd2cSJim Jagielski {
1959*b1cdbd2cSJim Jagielski m_pImpl->m_pHelper->showReference(aFormula);
1960*b1cdbd2cSJim Jagielski }
1961*b1cdbd2cSJim Jagielski
disableOk()1962*b1cdbd2cSJim Jagielski void FormulaModalDialog::disableOk()
1963*b1cdbd2cSJim Jagielski {
1964*b1cdbd2cSJim Jagielski m_pImpl->aBtnEnd.Disable();
1965*b1cdbd2cSJim Jagielski }
1966*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getCurrentFunctionDescription() const1967*b1cdbd2cSJim Jagielski const IFunctionDescription* FormulaModalDialog::getCurrentFunctionDescription() const
1968*b1cdbd2cSJim Jagielski {
1969*b1cdbd2cSJim Jagielski OSL_VERIFY(!m_pImpl->pFuncDesc || m_pImpl->pFuncDesc->getSuppressedArgumentCount() == m_pImpl->nArgs);
1970*b1cdbd2cSJim Jagielski return m_pImpl->pFuncDesc;
1971*b1cdbd2cSJim Jagielski }
1972*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
UpdateParaWin(const Selection & _rSelection,const String & _sRefStr)1973*b1cdbd2cSJim Jagielski void FormulaModalDialog::UpdateParaWin(const Selection& _rSelection,const String& _sRefStr)
1974*b1cdbd2cSJim Jagielski {
1975*b1cdbd2cSJim Jagielski m_pImpl->UpdateParaWin(_rSelection,_sRefStr);
1976*b1cdbd2cSJim Jagielski }
UpdateParaWin(Selection & _rSelection)1977*b1cdbd2cSJim Jagielski sal_Bool FormulaModalDialog::UpdateParaWin(Selection& _rSelection)
1978*b1cdbd2cSJim Jagielski {
1979*b1cdbd2cSJim Jagielski return m_pImpl->UpdateParaWin(_rSelection);
1980*b1cdbd2cSJim Jagielski }
1981*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetActiveEdit()1982*b1cdbd2cSJim Jagielski RefEdit* FormulaModalDialog::GetActiveEdit()
1983*b1cdbd2cSJim Jagielski {
1984*b1cdbd2cSJim Jagielski return m_pImpl->pParaWin->GetActiveEdit();
1985*b1cdbd2cSJim Jagielski }
1986*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
SetEdSelection()1987*b1cdbd2cSJim Jagielski void FormulaModalDialog::SetEdSelection()
1988*b1cdbd2cSJim Jagielski {
1989*b1cdbd2cSJim Jagielski m_pImpl->SetEdSelection();
1990*b1cdbd2cSJim Jagielski }
1991*b1cdbd2cSJim Jagielski
1992*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------------
1993*b1cdbd2cSJim Jagielski // Initialisierung / gemeinsaME Funktionen fuer Dialog
1994*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------------
FormulaDlg(SfxBindings * pB,SfxChildWindow * pCW,Window * pParent,bool _bSupportFunctionResult,bool _bSupportResult,bool _bSupportMatrix,IFormulaEditorHelper * _pHelper,IFunctionManager * _pFunctionMgr,IControlReferenceHandler * _pDlg)1995*b1cdbd2cSJim Jagielski FormulaDlg::FormulaDlg( SfxBindings* pB, SfxChildWindow* pCW,
1996*b1cdbd2cSJim Jagielski Window* pParent
1997*b1cdbd2cSJim Jagielski , bool _bSupportFunctionResult
1998*b1cdbd2cSJim Jagielski , bool _bSupportResult
1999*b1cdbd2cSJim Jagielski , bool _bSupportMatrix
2000*b1cdbd2cSJim Jagielski , IFormulaEditorHelper* _pHelper,IFunctionManager* _pFunctionMgr,IControlReferenceHandler* _pDlg ) :
2001*b1cdbd2cSJim Jagielski SfxModelessDialog( pB, pCW, pParent, ModuleRes(RID_FORMULADLG_FORMULA) ),
2002*b1cdbd2cSJim Jagielski m_pImpl( new FormulaDlg_Impl(this, _bSupportFunctionResult
2003*b1cdbd2cSJim Jagielski , _bSupportResult
2004*b1cdbd2cSJim Jagielski , _bSupportMatrix
2005*b1cdbd2cSJim Jagielski ,_pHelper,_pFunctionMgr,_pDlg))
2006*b1cdbd2cSJim Jagielski {
2007*b1cdbd2cSJim Jagielski FreeResource();
2008*b1cdbd2cSJim Jagielski if(!GetHelpId().getLength()) //Hack, da im SfxModelessDialog die HelpId
2009*b1cdbd2cSJim Jagielski SetHelpId(GetUniqueId()); //fuer einen ModelessDialog entfernt und
2010*b1cdbd2cSJim Jagielski //in eine UniqueId gewandelt wird, machen
2011*b1cdbd2cSJim Jagielski //wir das an dieser Stelle rueckgaengig.
2012*b1cdbd2cSJim Jagielski SetText(m_pImpl->aTitle1);
2013*b1cdbd2cSJim Jagielski }
2014*b1cdbd2cSJim Jagielski
~FormulaDlg()2015*b1cdbd2cSJim Jagielski FormulaDlg::~FormulaDlg()
2016*b1cdbd2cSJim Jagielski {
2017*b1cdbd2cSJim Jagielski }
2018*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
Update(const String & _sExp)2019*b1cdbd2cSJim Jagielski void FormulaDlg::Update(const String& _sExp)
2020*b1cdbd2cSJim Jagielski {
2021*b1cdbd2cSJim Jagielski m_pImpl->Update(_sExp);
2022*b1cdbd2cSJim Jagielski }
2023*b1cdbd2cSJim Jagielski
2024*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
SetMeText(const String & _sText)2025*b1cdbd2cSJim Jagielski void FormulaDlg::SetMeText(const String& _sText)
2026*b1cdbd2cSJim Jagielski {
2027*b1cdbd2cSJim Jagielski m_pImpl->SetMeText(_sText);
2028*b1cdbd2cSJim Jagielski }
2029*b1cdbd2cSJim Jagielski
2030*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
SetMeText(const String & _sText,xub_StrLen PrivStart,xub_StrLen PrivEnd,sal_Bool bMatrix,sal_Bool _bSelect,sal_Bool _bUpdate)2031*b1cdbd2cSJim Jagielski FormulaDlgMode FormulaDlg::SetMeText(const String& _sText,xub_StrLen PrivStart, xub_StrLen PrivEnd,sal_Bool bMatrix,sal_Bool _bSelect,sal_Bool _bUpdate)
2032*b1cdbd2cSJim Jagielski {
2033*b1cdbd2cSJim Jagielski return m_pImpl->SetMeText(_sText,PrivStart, PrivEnd,bMatrix,_bSelect,_bUpdate);
2034*b1cdbd2cSJim Jagielski }
2035*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
CheckMatrix()2036*b1cdbd2cSJim Jagielski void FormulaDlg::CheckMatrix()
2037*b1cdbd2cSJim Jagielski {
2038*b1cdbd2cSJim Jagielski m_pImpl->aBtnMatrix.Check();
2039*b1cdbd2cSJim Jagielski }
2040*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
CheckMatrix(String & aFormula)2041*b1cdbd2cSJim Jagielski sal_Bool FormulaDlg::CheckMatrix(String& aFormula)
2042*b1cdbd2cSJim Jagielski {
2043*b1cdbd2cSJim Jagielski return m_pImpl->CheckMatrix(aFormula);
2044*b1cdbd2cSJim Jagielski }
2045*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetMeText() const2046*b1cdbd2cSJim Jagielski String FormulaDlg::GetMeText() const
2047*b1cdbd2cSJim Jagielski {
2048*b1cdbd2cSJim Jagielski return m_pImpl->pMEdit->GetText();
2049*b1cdbd2cSJim Jagielski }
2050*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
Update()2051*b1cdbd2cSJim Jagielski void FormulaDlg::Update()
2052*b1cdbd2cSJim Jagielski {
2053*b1cdbd2cSJim Jagielski m_pImpl->Update();
2054*b1cdbd2cSJim Jagielski m_pImpl->aTimer.SetTimeout(200);
2055*b1cdbd2cSJim Jagielski m_pImpl->aTimer.SetTimeoutHdl(LINK( this, FormulaDlg, UpdateFocusHdl));
2056*b1cdbd2cSJim Jagielski m_pImpl->aTimer.Start();
2057*b1cdbd2cSJim Jagielski }
2058*b1cdbd2cSJim Jagielski
2059*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
isUserMatrix() const2060*b1cdbd2cSJim Jagielski sal_Bool FormulaDlg::isUserMatrix() const
2061*b1cdbd2cSJim Jagielski {
2062*b1cdbd2cSJim Jagielski return m_pImpl->bUserMatrixFlag;
2063*b1cdbd2cSJim Jagielski }
DoEnter(sal_Bool _bOk)2064*b1cdbd2cSJim Jagielski void FormulaDlg::DoEnter(sal_Bool _bOk)
2065*b1cdbd2cSJim Jagielski {
2066*b1cdbd2cSJim Jagielski m_pImpl->DoEnter(_bOk);
2067*b1cdbd2cSJim Jagielski }
RefInputStartBefore(RefEdit * pEdit,RefButton * pButton)2068*b1cdbd2cSJim Jagielski ::std::pair<RefButton*,RefEdit*> FormulaDlg::RefInputStartBefore( RefEdit* pEdit, RefButton* pButton )
2069*b1cdbd2cSJim Jagielski {
2070*b1cdbd2cSJim Jagielski return m_pImpl->RefInputStartBefore( pEdit, pButton );
2071*b1cdbd2cSJim Jagielski }
RefInputStartAfter(RefEdit * pEdit,RefButton * pButton)2072*b1cdbd2cSJim Jagielski void FormulaDlg::RefInputStartAfter( RefEdit* pEdit, RefButton* pButton )
2073*b1cdbd2cSJim Jagielski {
2074*b1cdbd2cSJim Jagielski m_pImpl->RefInputStartAfter( pEdit, pButton );
2075*b1cdbd2cSJim Jagielski }
RefInputDoneAfter(sal_Bool bForced)2076*b1cdbd2cSJim Jagielski void FormulaDlg::RefInputDoneAfter( sal_Bool bForced )
2077*b1cdbd2cSJim Jagielski {
2078*b1cdbd2cSJim Jagielski m_pImpl->RefInputDoneAfter( bForced );
2079*b1cdbd2cSJim Jagielski }
2080*b1cdbd2cSJim Jagielski
FindFocusWin(Window * pWin)2081*b1cdbd2cSJim Jagielski rtl::OString FormulaDlg::FindFocusWin(Window *pWin)
2082*b1cdbd2cSJim Jagielski {
2083*b1cdbd2cSJim Jagielski return m_pImpl->FindFocusWin( pWin );
2084*b1cdbd2cSJim Jagielski }
2085*b1cdbd2cSJim Jagielski
SetFocusWin(Window * pWin,const rtl::OString & nUniqueId)2086*b1cdbd2cSJim Jagielski void FormulaDlg::SetFocusWin(Window *pWin,const rtl::OString& nUniqueId)
2087*b1cdbd2cSJim Jagielski {
2088*b1cdbd2cSJim Jagielski if(pWin->GetUniqueId()==nUniqueId)
2089*b1cdbd2cSJim Jagielski {
2090*b1cdbd2cSJim Jagielski pWin->GrabFocus();
2091*b1cdbd2cSJim Jagielski }
2092*b1cdbd2cSJim Jagielski else
2093*b1cdbd2cSJim Jagielski {
2094*b1cdbd2cSJim Jagielski sal_uInt16 nCount=pWin->GetChildCount();
2095*b1cdbd2cSJim Jagielski
2096*b1cdbd2cSJim Jagielski for(sal_uInt16 i=0;i<nCount;i++)
2097*b1cdbd2cSJim Jagielski {
2098*b1cdbd2cSJim Jagielski Window* pChild=pWin->GetChild(i);
2099*b1cdbd2cSJim Jagielski SetFocusWin(pChild,nUniqueId);
2100*b1cdbd2cSJim Jagielski }
2101*b1cdbd2cSJim Jagielski }
2102*b1cdbd2cSJim Jagielski }
2103*b1cdbd2cSJim Jagielski
2104*b1cdbd2cSJim Jagielski
PreNotify(NotifyEvent & rNEvt)2105*b1cdbd2cSJim Jagielski long FormulaDlg::PreNotify( NotifyEvent& rNEvt )
2106*b1cdbd2cSJim Jagielski {
2107*b1cdbd2cSJim Jagielski m_pImpl->PreNotify( rNEvt );
2108*b1cdbd2cSJim Jagielski return SfxModelessDialog::PreNotify(rNEvt);
2109*b1cdbd2cSJim Jagielski }
2110*b1cdbd2cSJim Jagielski
HighlightFunctionParas(const String & aFormula)2111*b1cdbd2cSJim Jagielski void FormulaDlg::HighlightFunctionParas(const String& aFormula)
2112*b1cdbd2cSJim Jagielski {
2113*b1cdbd2cSJim Jagielski m_pImpl->m_pHelper->showReference(aFormula);
2114*b1cdbd2cSJim Jagielski }
2115*b1cdbd2cSJim Jagielski
disableOk()2116*b1cdbd2cSJim Jagielski void FormulaDlg::disableOk()
2117*b1cdbd2cSJim Jagielski {
2118*b1cdbd2cSJim Jagielski m_pImpl->aBtnEnd.Disable();
2119*b1cdbd2cSJim Jagielski }
2120*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getCurrentFunctionDescription() const2121*b1cdbd2cSJim Jagielski const IFunctionDescription* FormulaDlg::getCurrentFunctionDescription() const
2122*b1cdbd2cSJim Jagielski {
2123*b1cdbd2cSJim Jagielski OSL_VERIFY(!m_pImpl->pFuncDesc || m_pImpl->pFuncDesc->getSuppressedArgumentCount() == m_pImpl->nArgs);
2124*b1cdbd2cSJim Jagielski return m_pImpl->pFuncDesc;
2125*b1cdbd2cSJim Jagielski }
2126*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
UpdateParaWin(const Selection & _rSelection,const String & _sRefStr)2127*b1cdbd2cSJim Jagielski void FormulaDlg::UpdateParaWin(const Selection& _rSelection,const String& _sRefStr)
2128*b1cdbd2cSJim Jagielski {
2129*b1cdbd2cSJim Jagielski m_pImpl->UpdateParaWin(_rSelection,_sRefStr);
2130*b1cdbd2cSJim Jagielski }
UpdateParaWin(Selection & _rSelection)2131*b1cdbd2cSJim Jagielski sal_Bool FormulaDlg::UpdateParaWin(Selection& _rSelection)
2132*b1cdbd2cSJim Jagielski {
2133*b1cdbd2cSJim Jagielski return m_pImpl->UpdateParaWin(_rSelection);
2134*b1cdbd2cSJim Jagielski }
2135*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetActiveEdit()2136*b1cdbd2cSJim Jagielski RefEdit* FormulaDlg::GetActiveEdit()
2137*b1cdbd2cSJim Jagielski {
2138*b1cdbd2cSJim Jagielski return m_pImpl->pParaWin->GetActiveEdit();
2139*b1cdbd2cSJim Jagielski }
2140*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetFormulaHelper() const2141*b1cdbd2cSJim Jagielski const FormulaHelper& FormulaDlg::GetFormulaHelper() const
2142*b1cdbd2cSJim Jagielski {
2143*b1cdbd2cSJim Jagielski return m_pImpl->GetFormulaHelper();
2144*b1cdbd2cSJim Jagielski }
2145*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
SetEdSelection()2146*b1cdbd2cSJim Jagielski void FormulaDlg::SetEdSelection()
2147*b1cdbd2cSJim Jagielski {
2148*b1cdbd2cSJim Jagielski m_pImpl->SetEdSelection();
2149*b1cdbd2cSJim Jagielski }
IMPL_LINK(FormulaDlg,UpdateFocusHdl,Timer *,EMPTYARG)2150*b1cdbd2cSJim Jagielski IMPL_LINK( FormulaDlg, UpdateFocusHdl, Timer*, EMPTYARG )
2151*b1cdbd2cSJim Jagielski {
2152*b1cdbd2cSJim Jagielski FormEditData* pData = m_pImpl->m_pHelper->getFormEditData();
2153*b1cdbd2cSJim Jagielski
2154*b1cdbd2cSJim Jagielski if (pData) // wird nicht ueber Close zerstoert;
2155*b1cdbd2cSJim Jagielski {
2156*b1cdbd2cSJim Jagielski m_pImpl->m_pHelper->setReferenceInput(pData);
2157*b1cdbd2cSJim Jagielski rtl::OString nUniqueId(pData->GetUniqueId());
2158*b1cdbd2cSJim Jagielski SetFocusWin(this,nUniqueId);
2159*b1cdbd2cSJim Jagielski }
2160*b1cdbd2cSJim Jagielski return 0;
2161*b1cdbd2cSJim Jagielski }
2162*b1cdbd2cSJim Jagielski
2163*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
2164*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
SaveValues()2165*b1cdbd2cSJim Jagielski void FormEditData::SaveValues()
2166*b1cdbd2cSJim Jagielski {
2167*b1cdbd2cSJim Jagielski FormEditData* pTemp = new FormEditData(*this);
2168*b1cdbd2cSJim Jagielski
2169*b1cdbd2cSJim Jagielski Reset();
2170*b1cdbd2cSJim Jagielski pParent = pTemp;
2171*b1cdbd2cSJim Jagielski }
2172*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
Reset()2173*b1cdbd2cSJim Jagielski void FormEditData::Reset()
2174*b1cdbd2cSJim Jagielski {
2175*b1cdbd2cSJim Jagielski pParent = NULL;
2176*b1cdbd2cSJim Jagielski nMode = 0;
2177*b1cdbd2cSJim Jagielski nFStart = 0;
2178*b1cdbd2cSJim Jagielski nCatSel = 1; //! oder 0 (zuletzt benutzte)
2179*b1cdbd2cSJim Jagielski nFuncSel = 0;
2180*b1cdbd2cSJim Jagielski nOffset = 0;
2181*b1cdbd2cSJim Jagielski nEdFocus = 0;
2182*b1cdbd2cSJim Jagielski bMatrix =sal_False;
2183*b1cdbd2cSJim Jagielski aUniqueId=rtl::OString();
2184*b1cdbd2cSJim Jagielski aSelection.Min()=0;
2185*b1cdbd2cSJim Jagielski aSelection.Max()=0;
2186*b1cdbd2cSJim Jagielski aUndoStr.Erase();
2187*b1cdbd2cSJim Jagielski }
2188*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
RestoreValues()2189*b1cdbd2cSJim Jagielski void FormEditData::RestoreValues()
2190*b1cdbd2cSJim Jagielski {
2191*b1cdbd2cSJim Jagielski FormEditData* pTemp = pParent;
2192*b1cdbd2cSJim Jagielski DBG_ASSERT(pTemp,"RestoreValues ohne Parent");
2193*b1cdbd2cSJim Jagielski if (pTemp)
2194*b1cdbd2cSJim Jagielski {
2195*b1cdbd2cSJim Jagielski *this = *pTemp;
2196*b1cdbd2cSJim Jagielski pTemp->pParent = NULL; // sonst wird der auch geloescht!
2197*b1cdbd2cSJim Jagielski delete pTemp;
2198*b1cdbd2cSJim Jagielski }
2199*b1cdbd2cSJim Jagielski }
2200*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
operator =(const FormEditData & r)2201*b1cdbd2cSJim Jagielski const FormEditData& FormEditData::operator=( const FormEditData& r )
2202*b1cdbd2cSJim Jagielski {
2203*b1cdbd2cSJim Jagielski pParent = r.pParent;
2204*b1cdbd2cSJim Jagielski nMode = r.nMode;
2205*b1cdbd2cSJim Jagielski nFStart = r.nFStart;
2206*b1cdbd2cSJim Jagielski nCatSel = r.nCatSel;
2207*b1cdbd2cSJim Jagielski nFuncSel = r.nFuncSel;
2208*b1cdbd2cSJim Jagielski nOffset = r.nOffset;
2209*b1cdbd2cSJim Jagielski nEdFocus = r.nEdFocus;
2210*b1cdbd2cSJim Jagielski aUndoStr = r.aUndoStr;
2211*b1cdbd2cSJim Jagielski bMatrix = r.bMatrix ;
2212*b1cdbd2cSJim Jagielski aUniqueId = r.aUniqueId;
2213*b1cdbd2cSJim Jagielski aSelection = r.aSelection;
2214*b1cdbd2cSJim Jagielski return *this;
2215*b1cdbd2cSJim Jagielski }
2216*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
FormEditData()2217*b1cdbd2cSJim Jagielski FormEditData::FormEditData()
2218*b1cdbd2cSJim Jagielski {
2219*b1cdbd2cSJim Jagielski Reset();
2220*b1cdbd2cSJim Jagielski }
2221*b1cdbd2cSJim Jagielski
~FormEditData()2222*b1cdbd2cSJim Jagielski FormEditData::~FormEditData()
2223*b1cdbd2cSJim Jagielski {
2224*b1cdbd2cSJim Jagielski delete pParent;
2225*b1cdbd2cSJim Jagielski }
2226*b1cdbd2cSJim Jagielski
FormEditData(const FormEditData & r)2227*b1cdbd2cSJim Jagielski FormEditData::FormEditData( const FormEditData& r )
2228*b1cdbd2cSJim Jagielski {
2229*b1cdbd2cSJim Jagielski *this = r;
2230*b1cdbd2cSJim Jagielski }
2231*b1cdbd2cSJim Jagielski
2232*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
2233*b1cdbd2cSJim Jagielski } // formula
2234*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
2235