xref: /aoo4110/main/formula/source/ui/dlg/structpg.cxx (revision b1cdbd2c)
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 
29*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include <svl/zforlist.hxx>
32*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #include "structpg.hxx"
35*b1cdbd2cSJim Jagielski #include "formdlgs.hrc"
36*b1cdbd2cSJim Jagielski #include "formula/formdata.hxx"
37*b1cdbd2cSJim Jagielski #include "formula/formula.hxx"
38*b1cdbd2cSJim Jagielski #include "ModuleHelper.hxx"
39*b1cdbd2cSJim Jagielski #include "formula/IFunctionDescription.hxx"
40*b1cdbd2cSJim Jagielski #include "ForResId.hrc"
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
43*b1cdbd2cSJim Jagielski namespace formula
44*b1cdbd2cSJim Jagielski {
StructListBox(Window * pParent,const ResId & rResId)45*b1cdbd2cSJim Jagielski StructListBox::StructListBox(Window* pParent, const ResId& rResId ):
46*b1cdbd2cSJim Jagielski 	SvTreeListBox(pParent,rResId )
47*b1cdbd2cSJim Jagielski {
48*b1cdbd2cSJim Jagielski 	bActiveFlag=sal_False;
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski     Font aFont( GetFont() );
51*b1cdbd2cSJim Jagielski     Size aSize = aFont.GetSize();
52*b1cdbd2cSJim Jagielski     aSize.Height() -= 2;
53*b1cdbd2cSJim Jagielski     aFont.SetSize( aSize );
54*b1cdbd2cSJim Jagielski     SetFont( aFont );
55*b1cdbd2cSJim Jagielski }
56*b1cdbd2cSJim Jagielski 
InsertStaticEntry(const XubString & rText,const Image & rEntryImg,const Image & rEntryImgHC,SvLBoxEntry * pParent,sal_uLong nPos,IFormulaToken * pToken)57*b1cdbd2cSJim Jagielski SvLBoxEntry* StructListBox::InsertStaticEntry(
58*b1cdbd2cSJim Jagielski         const XubString& rText,
59*b1cdbd2cSJim Jagielski         const Image& rEntryImg, const Image& rEntryImgHC,
60*b1cdbd2cSJim Jagielski         SvLBoxEntry* pParent, sal_uLong nPos, IFormulaToken* pToken )
61*b1cdbd2cSJim Jagielski {
62*b1cdbd2cSJim Jagielski     SvLBoxEntry* pEntry = InsertEntry( rText, rEntryImg, rEntryImg, pParent, sal_False, nPos, pToken );
63*b1cdbd2cSJim Jagielski     SvLBoxContextBmp* pBmpItem = static_cast< SvLBoxContextBmp* >( pEntry->GetFirstItem( SV_ITEM_ID_LBOXCONTEXTBMP ) );
64*b1cdbd2cSJim Jagielski     DBG_ASSERT( pBmpItem, "StructListBox::InsertStaticEntry - missing item" );
65*b1cdbd2cSJim Jagielski     pBmpItem->SetBitmap1( rEntryImgHC, BMP_COLOR_HIGHCONTRAST );
66*b1cdbd2cSJim Jagielski     pBmpItem->SetBitmap2( rEntryImgHC, BMP_COLOR_HIGHCONTRAST );
67*b1cdbd2cSJim Jagielski     return pEntry;
68*b1cdbd2cSJim Jagielski }
69*b1cdbd2cSJim Jagielski 
SetActiveFlag(sal_Bool bFlag)70*b1cdbd2cSJim Jagielski void StructListBox::SetActiveFlag(sal_Bool bFlag)
71*b1cdbd2cSJim Jagielski {
72*b1cdbd2cSJim Jagielski 	bActiveFlag=bFlag;
73*b1cdbd2cSJim Jagielski }
74*b1cdbd2cSJim Jagielski 
GetActiveFlag()75*b1cdbd2cSJim Jagielski sal_Bool StructListBox::GetActiveFlag()
76*b1cdbd2cSJim Jagielski {
77*b1cdbd2cSJim Jagielski 	return bActiveFlag;
78*b1cdbd2cSJim Jagielski }
79*b1cdbd2cSJim Jagielski 
MouseButtonDown(const MouseEvent & rMEvt)80*b1cdbd2cSJim Jagielski void StructListBox::MouseButtonDown( const MouseEvent& rMEvt )
81*b1cdbd2cSJim Jagielski {
82*b1cdbd2cSJim Jagielski 	bActiveFlag=sal_True;
83*b1cdbd2cSJim Jagielski 	SvTreeListBox::MouseButtonDown(rMEvt);
84*b1cdbd2cSJim Jagielski }
85*b1cdbd2cSJim Jagielski 
GetFocus()86*b1cdbd2cSJim Jagielski void StructListBox::GetFocus()
87*b1cdbd2cSJim Jagielski {
88*b1cdbd2cSJim Jagielski 	bActiveFlag=sal_True;
89*b1cdbd2cSJim Jagielski 	SvTreeListBox::GetFocus();
90*b1cdbd2cSJim Jagielski }
91*b1cdbd2cSJim Jagielski 
LoseFocus()92*b1cdbd2cSJim Jagielski void StructListBox::LoseFocus()
93*b1cdbd2cSJim Jagielski {
94*b1cdbd2cSJim Jagielski 	bActiveFlag=sal_False;
95*b1cdbd2cSJim Jagielski 	SvTreeListBox::LoseFocus();
96*b1cdbd2cSJim Jagielski }
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski //==============================================================================
99*b1cdbd2cSJim Jagielski 
StructPage(Window * pParent)100*b1cdbd2cSJim Jagielski StructPage::StructPage(Window* pParent):
101*b1cdbd2cSJim Jagielski 	TabPage(pParent,ModuleRes(RID_FORMULATAB_STRUCT)),
102*b1cdbd2cSJim Jagielski 	//
103*b1cdbd2cSJim Jagielski 	aFtStruct		( this, ModuleRes( FT_STRUCT ) ),
104*b1cdbd2cSJim Jagielski 	aTlbStruct		( this, ModuleRes( TLB_STRUCT ) ),
105*b1cdbd2cSJim Jagielski     maImgEnd        ( ModuleRes( BMP_STR_END ) ),
106*b1cdbd2cSJim Jagielski     maImgError      ( ModuleRes( BMP_STR_ERROR ) ),
107*b1cdbd2cSJim Jagielski     maImgEndHC      ( ModuleRes( BMP_STR_END_H ) ),
108*b1cdbd2cSJim Jagielski     maImgErrorHC    ( ModuleRes( BMP_STR_ERROR_H ) ),
109*b1cdbd2cSJim Jagielski 	pSelectedToken	( NULL )
110*b1cdbd2cSJim Jagielski {
111*b1cdbd2cSJim Jagielski 	aTlbStruct.SetStyle(aTlbStruct.GetStyle()|WB_HASLINES|WB_CLIPCHILDREN|
112*b1cdbd2cSJim Jagielski 						WB_HASBUTTONS|WB_HSCROLL|WB_NOINITIALSELECTION);
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski     aTlbStruct.SetNodeDefaultImages();
115*b1cdbd2cSJim Jagielski     aTlbStruct.SetDefaultExpandedEntryBmp( Image( ModuleRes( BMP_STR_OPEN ) ) );
116*b1cdbd2cSJim Jagielski     aTlbStruct.SetDefaultCollapsedEntryBmp( Image( ModuleRes( BMP_STR_CLOSE ) ) );
117*b1cdbd2cSJim Jagielski     aTlbStruct.SetDefaultExpandedEntryBmp( Image( ModuleRes( BMP_STR_OPEN_H ) ), BMP_COLOR_HIGHCONTRAST );
118*b1cdbd2cSJim Jagielski     aTlbStruct.SetDefaultCollapsedEntryBmp( Image( ModuleRes( BMP_STR_CLOSE_H ) ), BMP_COLOR_HIGHCONTRAST );
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski     FreeResource();
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski 	aTlbStruct.SetSelectHdl(LINK( this, StructPage, SelectHdl ) );
123*b1cdbd2cSJim Jagielski }
124*b1cdbd2cSJim Jagielski 
ClearStruct()125*b1cdbd2cSJim Jagielski void StructPage::ClearStruct()
126*b1cdbd2cSJim Jagielski {
127*b1cdbd2cSJim Jagielski 	aTlbStruct.SetActiveFlag(sal_False);
128*b1cdbd2cSJim Jagielski 	aTlbStruct.Clear();
129*b1cdbd2cSJim Jagielski }
130*b1cdbd2cSJim Jagielski 
InsertEntry(const XubString & rText,SvLBoxEntry * pParent,sal_uInt16 nFlag,sal_uLong nPos,IFormulaToken * pIFormulaToken)131*b1cdbd2cSJim Jagielski SvLBoxEntry* StructPage::InsertEntry( const XubString& rText, SvLBoxEntry* pParent,
132*b1cdbd2cSJim Jagielski 									   sal_uInt16 nFlag,sal_uLong nPos,IFormulaToken* pIFormulaToken)
133*b1cdbd2cSJim Jagielski {
134*b1cdbd2cSJim Jagielski     aTlbStruct.SetActiveFlag( sal_False );
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski     SvLBoxEntry* pEntry = NULL;
137*b1cdbd2cSJim Jagielski     switch( nFlag )
138*b1cdbd2cSJim Jagielski 	{
139*b1cdbd2cSJim Jagielski 		case STRUCT_FOLDER:
140*b1cdbd2cSJim Jagielski             pEntry = aTlbStruct.InsertEntry( rText, pParent, sal_False, nPos, pIFormulaToken );
141*b1cdbd2cSJim Jagielski         break;
142*b1cdbd2cSJim Jagielski         case STRUCT_END:
143*b1cdbd2cSJim Jagielski             pEntry = aTlbStruct.InsertStaticEntry( rText, maImgEnd, maImgEndHC, pParent, nPos, pIFormulaToken );
144*b1cdbd2cSJim Jagielski         break;
145*b1cdbd2cSJim Jagielski         case STRUCT_ERROR:
146*b1cdbd2cSJim Jagielski             pEntry = aTlbStruct.InsertStaticEntry( rText, maImgError, maImgErrorHC, pParent, nPos, pIFormulaToken );
147*b1cdbd2cSJim Jagielski         break;
148*b1cdbd2cSJim Jagielski 	}
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski     if( pEntry && pParent )
151*b1cdbd2cSJim Jagielski         aTlbStruct.Expand( pParent );
152*b1cdbd2cSJim Jagielski 	return pEntry;
153*b1cdbd2cSJim Jagielski }
154*b1cdbd2cSJim Jagielski 
GetEntryText(SvLBoxEntry * pEntry) const155*b1cdbd2cSJim Jagielski String StructPage::GetEntryText(SvLBoxEntry* pEntry) const
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski 	String aString;
158*b1cdbd2cSJim Jagielski 	if(pEntry!=NULL)
159*b1cdbd2cSJim Jagielski 		aString=aTlbStruct.GetEntryText(pEntry);
160*b1cdbd2cSJim Jagielski 	return	aString;
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski 
GetParent(SvLBoxEntry * pEntry) const163*b1cdbd2cSJim Jagielski SvLBoxEntry* StructPage::GetParent(SvLBoxEntry* pEntry) const
164*b1cdbd2cSJim Jagielski {
165*b1cdbd2cSJim Jagielski     return aTlbStruct.GetParent(pEntry);
166*b1cdbd2cSJim Jagielski }
GetFunctionEntry(SvLBoxEntry * pEntry)167*b1cdbd2cSJim Jagielski IFormulaToken* StructPage::GetFunctionEntry(SvLBoxEntry* pEntry)
168*b1cdbd2cSJim Jagielski {
169*b1cdbd2cSJim Jagielski 	if(pEntry!=NULL)
170*b1cdbd2cSJim Jagielski 	{
171*b1cdbd2cSJim Jagielski 		IFormulaToken * pToken=(IFormulaToken *)pEntry->GetUserData();
172*b1cdbd2cSJim Jagielski 		if(pToken!=NULL)
173*b1cdbd2cSJim Jagielski 		{
174*b1cdbd2cSJim Jagielski 			if ( !(pToken->isFunction() || pToken->getArgumentCount() > 1 ) )
175*b1cdbd2cSJim Jagielski 			{
176*b1cdbd2cSJim Jagielski 				return GetFunctionEntry(aTlbStruct.GetParent(pEntry));
177*b1cdbd2cSJim Jagielski 			}
178*b1cdbd2cSJim Jagielski 			else
179*b1cdbd2cSJim Jagielski 			{
180*b1cdbd2cSJim Jagielski 				return pToken;
181*b1cdbd2cSJim Jagielski 			}
182*b1cdbd2cSJim Jagielski 		}
183*b1cdbd2cSJim Jagielski 	}
184*b1cdbd2cSJim Jagielski 	return NULL;
185*b1cdbd2cSJim Jagielski }
186*b1cdbd2cSJim Jagielski 
IMPL_LINK(StructPage,SelectHdl,SvTreeListBox *,pTlb)187*b1cdbd2cSJim Jagielski IMPL_LINK( StructPage, SelectHdl, SvTreeListBox*, pTlb )
188*b1cdbd2cSJim Jagielski {
189*b1cdbd2cSJim Jagielski 	if(aTlbStruct.GetActiveFlag())
190*b1cdbd2cSJim Jagielski 	{
191*b1cdbd2cSJim Jagielski 		if(pTlb==&aTlbStruct)
192*b1cdbd2cSJim Jagielski 		{
193*b1cdbd2cSJim Jagielski 			SvLBoxEntry*	pCurEntry=aTlbStruct.GetCurEntry();
194*b1cdbd2cSJim Jagielski 			if(pCurEntry!=NULL)
195*b1cdbd2cSJim Jagielski 			{
196*b1cdbd2cSJim Jagielski 				pSelectedToken=(IFormulaToken *)pCurEntry->GetUserData();
197*b1cdbd2cSJim Jagielski 				if(pSelectedToken!=NULL)
198*b1cdbd2cSJim Jagielski 				{
199*b1cdbd2cSJim Jagielski 					if ( !(pSelectedToken->isFunction() || pSelectedToken->getArgumentCount() > 1) )
200*b1cdbd2cSJim Jagielski 					{
201*b1cdbd2cSJim Jagielski 						pSelectedToken = GetFunctionEntry(pCurEntry);
202*b1cdbd2cSJim Jagielski 					}
203*b1cdbd2cSJim Jagielski 				}
204*b1cdbd2cSJim Jagielski 			}
205*b1cdbd2cSJim Jagielski 		}
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski 		aSelLink.Call(this);
208*b1cdbd2cSJim Jagielski 	}
209*b1cdbd2cSJim Jagielski 	return 0;
210*b1cdbd2cSJim Jagielski }
211*b1cdbd2cSJim Jagielski 
GetSelectedToken()212*b1cdbd2cSJim Jagielski IFormulaToken* StructPage::GetSelectedToken()
213*b1cdbd2cSJim Jagielski {
214*b1cdbd2cSJim Jagielski 	return pSelectedToken;
215*b1cdbd2cSJim Jagielski }
216*b1cdbd2cSJim Jagielski 
GetSelectedEntryText()217*b1cdbd2cSJim Jagielski String StructPage::GetSelectedEntryText()
218*b1cdbd2cSJim Jagielski {
219*b1cdbd2cSJim Jagielski 	return aTlbStruct.GetEntryText(aTlbStruct.GetCurEntry());
220*b1cdbd2cSJim Jagielski }
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski } // formula
223*b1cdbd2cSJim Jagielski 
224