1*2ee96f1cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*2ee96f1cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*2ee96f1cSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*2ee96f1cSAndrew Rist * distributed with this work for additional information
6*2ee96f1cSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*2ee96f1cSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*2ee96f1cSAndrew Rist * "License"); you may not use this file except in compliance
9*2ee96f1cSAndrew Rist * with the License. You may obtain a copy of the License at
10*2ee96f1cSAndrew Rist *
11*2ee96f1cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*2ee96f1cSAndrew Rist *
13*2ee96f1cSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*2ee96f1cSAndrew Rist * software distributed under the License is distributed on an
15*2ee96f1cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2ee96f1cSAndrew Rist * KIND, either express or implied. See the License for the
17*2ee96f1cSAndrew Rist * specific language governing permissions and limitations
18*2ee96f1cSAndrew Rist * under the License.
19*2ee96f1cSAndrew Rist *
20*2ee96f1cSAndrew Rist *************************************************************/
21*2ee96f1cSAndrew Rist
22*2ee96f1cSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_cui.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "cfgutil.hxx"
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
30cdf0e10cSrcweir #include <com/sun/star/frame/XDispatchInformationProvider.hpp>
31cdf0e10cSrcweir #include <com/sun/star/uno/RuntimeException.hpp>
32cdf0e10cSrcweir #include <com/sun/star/script/provider/XScriptProviderSupplier.hpp>
33cdf0e10cSrcweir #include <com/sun/star/script/provider/XScriptProvider.hpp>
34cdf0e10cSrcweir #include <com/sun/star/script/browse/XBrowseNode.hpp>
35cdf0e10cSrcweir #include <com/sun/star/script/browse/BrowseNodeTypes.hpp>
36cdf0e10cSrcweir
37cdf0e10cSrcweir #include <com/sun/star/script/browse/XBrowseNodeFactory.hpp>
38cdf0e10cSrcweir #include <com/sun/star/script/browse/BrowseNodeFactoryViewTypes.hpp>
39cdf0e10cSrcweir #include <com/sun/star/frame/XModuleManager.hpp>
40cdf0e10cSrcweir #include <com/sun/star/frame/XDesktop.hpp>
41cdf0e10cSrcweir #include <com/sun/star/container/XEnumerationAccess.hpp>
42cdf0e10cSrcweir #include <com/sun/star/container/XEnumeration.hpp>
43cdf0e10cSrcweir #include <com/sun/star/document/XDocumentInfoSupplier.hpp>
44cdf0e10cSrcweir #include <com/sun/star/document/XScriptInvocationContext.hpp>
45cdf0e10cSrcweir #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
46cdf0e10cSrcweir
47cdf0e10cSrcweir #include "acccfg.hrc"
48cdf0e10cSrcweir #include "helpid.hrc"
49cdf0e10cSrcweir #include <basic/sbx.hxx>
50cdf0e10cSrcweir #include <basic/basicmanagerrepository.hxx>
51cdf0e10cSrcweir #include <basic/sbstar.hxx>
52cdf0e10cSrcweir #include <basic/sbxmeth.hxx>
53cdf0e10cSrcweir #include <basic/sbmod.hxx>
54cdf0e10cSrcweir #include <basic/basmgr.hxx>
55cdf0e10cSrcweir #include <tools/urlobj.hxx>
56cdf0e10cSrcweir #include "cuires.hrc"
57cdf0e10cSrcweir #include <sfx2/app.hxx>
58cdf0e10cSrcweir #include <sfx2/minfitem.hxx>
59cdf0e10cSrcweir #include <unotools/processfactory.hxx>
60cdf0e10cSrcweir #include <comphelper/documentinfo.hxx>
61cdf0e10cSrcweir #include <svtools/imagemgr.hxx>
62cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
63cdf0e10cSrcweir #include <comphelper/sequenceashashmap.hxx>
64cdf0e10cSrcweir #include <unotools/configmgr.hxx>
65cdf0e10cSrcweir #include "dialmgr.hxx"
66cdf0e10cSrcweir #include <svl/stritem.hxx>
67cdf0e10cSrcweir
68cdf0e10cSrcweir #define _SVSTDARR_STRINGSDTOR
69cdf0e10cSrcweir #include <svl/svstdarr.hxx>
70cdf0e10cSrcweir
71cdf0e10cSrcweir using namespace ::com::sun::star;
72cdf0e10cSrcweir using namespace ::com::sun::star::uno;
73cdf0e10cSrcweir using namespace ::com::sun::star::script;
74cdf0e10cSrcweir using namespace ::com::sun::star::frame;
75cdf0e10cSrcweir using namespace ::com::sun::star::document;
76cdf0e10cSrcweir namespace css = ::com::sun::star;
77cdf0e10cSrcweir
78cdf0e10cSrcweir static ::rtl::OUString SERVICE_UICATEGORYDESCRIPTION = ::rtl::OUString::createFromAscii("com.sun.star.ui.UICategoryDescription" );
79cdf0e10cSrcweir static ::rtl::OUString SERVICE_UICMDDESCRIPTION = ::rtl::OUString::createFromAscii("com.sun.star.frame.UICommandDescription");
80cdf0e10cSrcweir
SfxStylesInfo_Impl()81cdf0e10cSrcweir SfxStylesInfo_Impl::SfxStylesInfo_Impl()
82cdf0e10cSrcweir {}
83cdf0e10cSrcweir
setModel(const::com::sun::star::uno::Reference<::com::sun::star::frame::XModel> & xModel)84cdf0e10cSrcweir void SfxStylesInfo_Impl::setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& xModel)
85cdf0e10cSrcweir {
86cdf0e10cSrcweir m_xDoc = xModel;
87cdf0e10cSrcweir }
88cdf0e10cSrcweir
89cdf0e10cSrcweir static ::rtl::OUString FAMILY_CHARACTERSTYLE = ::rtl::OUString::createFromAscii("CharacterStyles");
90cdf0e10cSrcweir static ::rtl::OUString FAMILY_PARAGRAPHSTYLE = ::rtl::OUString::createFromAscii("ParagraphStyles");
91cdf0e10cSrcweir static ::rtl::OUString FAMILY_FRAMESTYLE = ::rtl::OUString::createFromAscii("FrameStyles" );
92cdf0e10cSrcweir static ::rtl::OUString FAMILY_PAGESTYLE = ::rtl::OUString::createFromAscii("PageStyles" );
93cdf0e10cSrcweir static ::rtl::OUString FAMILY_NUMBERINGSTYLE = ::rtl::OUString::createFromAscii("NumberingStyles");
94cdf0e10cSrcweir
95cdf0e10cSrcweir static ::rtl::OUString CMDURL_SPART = ::rtl::OUString::createFromAscii(".uno:StyleApply?Style:string=");
96cdf0e10cSrcweir static ::rtl::OUString CMDURL_FPART2 = ::rtl::OUString::createFromAscii("&FamilyName:string=");
97cdf0e10cSrcweir
98cdf0e10cSrcweir static ::rtl::OUString CMDURL_STYLEPROT_ONLY = ::rtl::OUString::createFromAscii(".uno:StyleApply?");
99cdf0e10cSrcweir static ::rtl::OUString CMDURL_SPART_ONLY = ::rtl::OUString::createFromAscii("Style:string=");
100cdf0e10cSrcweir static ::rtl::OUString CMDURL_FPART_ONLY = ::rtl::OUString::createFromAscii("FamilyName:string=");
101cdf0e10cSrcweir
102cdf0e10cSrcweir static ::rtl::OUString STYLEPROP_UINAME = ::rtl::OUString::createFromAscii("DisplayName");
103cdf0e10cSrcweir
generateCommand(const::rtl::OUString & sFamily,const::rtl::OUString & sStyle)104cdf0e10cSrcweir ::rtl::OUString SfxStylesInfo_Impl::generateCommand(const ::rtl::OUString& sFamily, const ::rtl::OUString& sStyle)
105cdf0e10cSrcweir {
106cdf0e10cSrcweir ::rtl::OUStringBuffer sCommand(1024);
107cdf0e10cSrcweir sCommand.append(CMDURL_SPART );
108cdf0e10cSrcweir sCommand.append(sStyle );
109cdf0e10cSrcweir sCommand.append(CMDURL_FPART2);
110cdf0e10cSrcweir sCommand.append(sFamily );
111cdf0e10cSrcweir return sCommand.makeStringAndClear();
112cdf0e10cSrcweir }
113cdf0e10cSrcweir
parseStyleCommand(SfxStyleInfo_Impl & aStyle)114cdf0e10cSrcweir sal_Bool SfxStylesInfo_Impl::parseStyleCommand(SfxStyleInfo_Impl& aStyle)
115cdf0e10cSrcweir {
116cdf0e10cSrcweir static sal_Int32 LEN_STYLEPROT = CMDURL_STYLEPROT_ONLY.getLength();
117cdf0e10cSrcweir static sal_Int32 LEN_SPART = CMDURL_SPART_ONLY.getLength();
118cdf0e10cSrcweir static sal_Int32 LEN_FPART = CMDURL_FPART_ONLY.getLength();
119cdf0e10cSrcweir
120cdf0e10cSrcweir if (aStyle.sCommand.indexOf(CMDURL_STYLEPROT_ONLY, 0) != 0)
121cdf0e10cSrcweir return sal_False;
122cdf0e10cSrcweir
123cdf0e10cSrcweir aStyle.sFamily = ::rtl::OUString();
124cdf0e10cSrcweir aStyle.sStyle = ::rtl::OUString();
125cdf0e10cSrcweir
126cdf0e10cSrcweir sal_Int32 nCmdLen = aStyle.sCommand.getLength();
127cdf0e10cSrcweir ::rtl::OUString sCmdArgs = aStyle.sCommand.copy(LEN_STYLEPROT, nCmdLen-LEN_STYLEPROT);
128cdf0e10cSrcweir sal_Int32 i = sCmdArgs.indexOf('&');
129cdf0e10cSrcweir if (i<0)
130cdf0e10cSrcweir return sal_False;
131cdf0e10cSrcweir
132cdf0e10cSrcweir ::rtl::OUString sArg = sCmdArgs.copy(0, i);
133cdf0e10cSrcweir if (sArg.indexOf(CMDURL_SPART_ONLY) == 0)
134cdf0e10cSrcweir aStyle.sStyle = sArg.copy(LEN_SPART, sArg.getLength()-LEN_SPART);
135cdf0e10cSrcweir else
136cdf0e10cSrcweir if (sArg.indexOf(CMDURL_FPART_ONLY) == 0)
137cdf0e10cSrcweir aStyle.sFamily = sArg.copy(LEN_FPART, sArg.getLength()-LEN_FPART);
138cdf0e10cSrcweir
139cdf0e10cSrcweir sArg = sCmdArgs.copy(i+1, sCmdArgs.getLength()-i-1);
140cdf0e10cSrcweir if (sArg.indexOf(CMDURL_SPART_ONLY) == 0)
141cdf0e10cSrcweir aStyle.sStyle = sArg.copy(LEN_SPART, sArg.getLength()-LEN_SPART);
142cdf0e10cSrcweir else
143cdf0e10cSrcweir if (sArg.indexOf(CMDURL_FPART_ONLY) == 0)
144cdf0e10cSrcweir aStyle.sFamily = sArg.copy(LEN_FPART, sArg.getLength()-LEN_FPART);
145cdf0e10cSrcweir
146cdf0e10cSrcweir if (aStyle.sFamily.getLength() && aStyle.sStyle.getLength())
147cdf0e10cSrcweir return sal_True;
148cdf0e10cSrcweir
149cdf0e10cSrcweir return sal_False;
150cdf0e10cSrcweir }
151cdf0e10cSrcweir
getLabel4Style(SfxStyleInfo_Impl & aStyle)152cdf0e10cSrcweir void SfxStylesInfo_Impl::getLabel4Style(SfxStyleInfo_Impl& aStyle)
153cdf0e10cSrcweir {
154cdf0e10cSrcweir try
155cdf0e10cSrcweir {
156cdf0e10cSrcweir css::uno::Reference< css::style::XStyleFamiliesSupplier > xModel(m_xDoc, css::uno::UNO_QUERY);
157cdf0e10cSrcweir
158cdf0e10cSrcweir css::uno::Reference< css::container::XNameAccess > xFamilies;
159cdf0e10cSrcweir if (xModel.is())
160cdf0e10cSrcweir xFamilies = xModel->getStyleFamilies();
161cdf0e10cSrcweir
162cdf0e10cSrcweir css::uno::Reference< css::container::XNameAccess > xStyleSet;
163cdf0e10cSrcweir if (xFamilies.is())
164cdf0e10cSrcweir xFamilies->getByName(aStyle.sFamily) >>= xStyleSet;
165cdf0e10cSrcweir
166cdf0e10cSrcweir css::uno::Reference< css::beans::XPropertySet > xStyle;
167cdf0e10cSrcweir if (xStyleSet.is())
168cdf0e10cSrcweir xStyleSet->getByName(aStyle.sStyle) >>= xStyle;
169cdf0e10cSrcweir
170cdf0e10cSrcweir aStyle.sLabel = ::rtl::OUString();
171cdf0e10cSrcweir if (xStyle.is())
172cdf0e10cSrcweir xStyle->getPropertyValue(STYLEPROP_UINAME) >>= aStyle.sLabel;
173cdf0e10cSrcweir }
174cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun)
175cdf0e10cSrcweir { throw exRun; }
176cdf0e10cSrcweir catch(const css::uno::Exception&)
177cdf0e10cSrcweir { aStyle.sLabel = ::rtl::OUString(); }
178cdf0e10cSrcweir
179cdf0e10cSrcweir if (!aStyle.sLabel.getLength())
180cdf0e10cSrcweir {
181cdf0e10cSrcweir aStyle.sLabel = aStyle.sCommand;
182cdf0e10cSrcweir /*
183cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
184cdf0e10cSrcweir ::rtl::OUStringBuffer sMsg(256);
185cdf0e10cSrcweir sMsg.appendAscii("There is no UIName for the style command \"");
186cdf0e10cSrcweir sMsg.append (aStyle.sCommand );
187cdf0e10cSrcweir sMsg.appendAscii("\". The UI will be invalid then ..." );
188cdf0e10cSrcweir OSL_ENSURE(sal_False, ::rtl::OUStringToOString(sMsg.makeStringAndClear(), RTL_TEXTENCODING_UTF8).getStr());
189cdf0e10cSrcweir #endif
190cdf0e10cSrcweir */
191cdf0e10cSrcweir }
192cdf0e10cSrcweir }
193cdf0e10cSrcweir
getStyleFamilies()194cdf0e10cSrcweir ::std::vector< SfxStyleInfo_Impl > SfxStylesInfo_Impl::getStyleFamilies()
195cdf0e10cSrcweir {
196cdf0e10cSrcweir // Its an optional interface!
197cdf0e10cSrcweir css::uno::Reference< css::style::XStyleFamiliesSupplier > xModel(m_xDoc, css::uno::UNO_QUERY);
198cdf0e10cSrcweir if (!xModel.is())
199cdf0e10cSrcweir return ::std::vector< SfxStyleInfo_Impl >();
200cdf0e10cSrcweir
201cdf0e10cSrcweir css::uno::Reference< css::container::XNameAccess > xCont = xModel->getStyleFamilies();
202cdf0e10cSrcweir css::uno::Sequence< ::rtl::OUString > lFamilyNames = xCont->getElementNames();
203cdf0e10cSrcweir ::std::vector< SfxStyleInfo_Impl > lFamilies;
204cdf0e10cSrcweir sal_Int32 c = lFamilyNames.getLength();
205cdf0e10cSrcweir sal_Int32 i = 0;
206cdf0e10cSrcweir for(i=0; i<c; ++i)
207cdf0e10cSrcweir {
208cdf0e10cSrcweir SfxStyleInfo_Impl aFamilyInfo;
209cdf0e10cSrcweir aFamilyInfo.sFamily = lFamilyNames[i];
210cdf0e10cSrcweir
211cdf0e10cSrcweir try
212cdf0e10cSrcweir {
213cdf0e10cSrcweir css::uno::Reference< css::beans::XPropertySet > xFamilyInfo;
214cdf0e10cSrcweir xCont->getByName(aFamilyInfo.sFamily) >>= xFamilyInfo;
215cdf0e10cSrcweir if (!xFamilyInfo.is())
216cdf0e10cSrcweir {
217cdf0e10cSrcweir // TODO_AS currently there is no support for an UIName property .. use internal family name instead
218cdf0e10cSrcweir aFamilyInfo.sLabel = aFamilyInfo.sFamily;
219cdf0e10cSrcweir }
220cdf0e10cSrcweir else
221cdf0e10cSrcweir xFamilyInfo->getPropertyValue(STYLEPROP_UINAME) >>= aFamilyInfo.sLabel;
222cdf0e10cSrcweir }
223cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun)
224cdf0e10cSrcweir { throw exRun; }
225cdf0e10cSrcweir catch(const css::uno::Exception&)
226cdf0e10cSrcweir { return ::std::vector< SfxStyleInfo_Impl >(); }
227cdf0e10cSrcweir
228cdf0e10cSrcweir lFamilies.push_back(aFamilyInfo);
229cdf0e10cSrcweir }
230cdf0e10cSrcweir
231cdf0e10cSrcweir return lFamilies;
232cdf0e10cSrcweir }
233cdf0e10cSrcweir
getStyles(const::rtl::OUString & sFamily)234cdf0e10cSrcweir ::std::vector< SfxStyleInfo_Impl > SfxStylesInfo_Impl::getStyles(const ::rtl::OUString& sFamily)
235cdf0e10cSrcweir {
236cdf0e10cSrcweir static ::rtl::OUString PROP_UINAME = ::rtl::OUString::createFromAscii("DisplayName");
237cdf0e10cSrcweir
238cdf0e10cSrcweir css::uno::Sequence< ::rtl::OUString > lStyleNames;
239cdf0e10cSrcweir css::uno::Reference< css::style::XStyleFamiliesSupplier > xModel(m_xDoc, css::uno::UNO_QUERY_THROW);
240cdf0e10cSrcweir css::uno::Reference< css::container::XNameAccess > xFamilies = xModel->getStyleFamilies();
241cdf0e10cSrcweir css::uno::Reference< css::container::XNameAccess > xStyleSet;
242cdf0e10cSrcweir try
243cdf0e10cSrcweir {
244cdf0e10cSrcweir xFamilies->getByName(sFamily) >>= xStyleSet;
245cdf0e10cSrcweir lStyleNames = xStyleSet->getElementNames();
246cdf0e10cSrcweir }
247cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun)
248cdf0e10cSrcweir { throw exRun; }
249cdf0e10cSrcweir catch(const css::uno::Exception&)
250cdf0e10cSrcweir { return ::std::vector< SfxStyleInfo_Impl >(); }
251cdf0e10cSrcweir
252cdf0e10cSrcweir ::std::vector< SfxStyleInfo_Impl > lStyles;
253cdf0e10cSrcweir sal_Int32 c = lStyleNames.getLength();
254cdf0e10cSrcweir sal_Int32 i = 0;
255cdf0e10cSrcweir for (i=0; i<c; ++i)
256cdf0e10cSrcweir {
257cdf0e10cSrcweir SfxStyleInfo_Impl aStyleInfo;
258cdf0e10cSrcweir aStyleInfo.sFamily = sFamily;
259cdf0e10cSrcweir aStyleInfo.sStyle = lStyleNames[i];
260cdf0e10cSrcweir aStyleInfo.sCommand = SfxStylesInfo_Impl::generateCommand(aStyleInfo.sFamily, aStyleInfo.sStyle);
261cdf0e10cSrcweir
262cdf0e10cSrcweir try
263cdf0e10cSrcweir {
264cdf0e10cSrcweir css::uno::Reference< css::beans::XPropertySet > xStyle;
265cdf0e10cSrcweir xStyleSet->getByName(aStyleInfo.sStyle) >>= xStyle;
266cdf0e10cSrcweir if (!xStyle.is())
267cdf0e10cSrcweir continue;
268cdf0e10cSrcweir xStyle->getPropertyValue(PROP_UINAME) >>= aStyleInfo.sLabel;
269cdf0e10cSrcweir }
270cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun)
271cdf0e10cSrcweir { throw exRun; }
272cdf0e10cSrcweir catch(const css::uno::Exception&)
273cdf0e10cSrcweir { continue; }
274cdf0e10cSrcweir
275cdf0e10cSrcweir lStyles.push_back(aStyleInfo);
276cdf0e10cSrcweir }
277cdf0e10cSrcweir return lStyles;
278cdf0e10cSrcweir }
279cdf0e10cSrcweir SV_IMPL_PTRARR(SfxGroupInfoArr_Impl, SfxGroupInfoPtr);
SfxConfigFunctionListBox_Impl(Window * pParent,const ResId & rResId)280cdf0e10cSrcweir SfxConfigFunctionListBox_Impl::SfxConfigFunctionListBox_Impl( Window* pParent, const ResId& rResId)
281cdf0e10cSrcweir : SvTreeListBox( pParent, rResId )
282cdf0e10cSrcweir , pCurEntry( 0 )
283cdf0e10cSrcweir , pStylesInfo( 0 )
284cdf0e10cSrcweir {
285cdf0e10cSrcweir SetStyle( GetStyle() | WB_CLIPCHILDREN | WB_HSCROLL | WB_SORT );
286cdf0e10cSrcweir GetModel()->SetSortMode( SortAscending );
287cdf0e10cSrcweir
288cdf0e10cSrcweir // Timer f"ur die BallonHelp
289cdf0e10cSrcweir aTimer.SetTimeout( 200 );
290cdf0e10cSrcweir aTimer.SetTimeoutHdl(
291cdf0e10cSrcweir LINK( this, SfxConfigFunctionListBox_Impl, TimerHdl ) );
292cdf0e10cSrcweir }
293cdf0e10cSrcweir
~SfxConfigFunctionListBox_Impl()294cdf0e10cSrcweir SfxConfigFunctionListBox_Impl::~SfxConfigFunctionListBox_Impl()
295cdf0e10cSrcweir {
296cdf0e10cSrcweir ClearAll();
297cdf0e10cSrcweir }
298cdf0e10cSrcweir
MouseMove(const MouseEvent &)299cdf0e10cSrcweir void SfxConfigFunctionListBox_Impl::MouseMove( const MouseEvent& )
300cdf0e10cSrcweir {
301cdf0e10cSrcweir /* --> PB 2004-12-01 #i37000# - no own help text needed any longer
302cdf0e10cSrcweir Point aMousePos = rMEvt.GetPosPixel();
303cdf0e10cSrcweir pCurEntry = GetCurEntry();
304cdf0e10cSrcweir
305cdf0e10cSrcweir if ( pCurEntry && GetEntry( aMousePos ) == pCurEntry )
306cdf0e10cSrcweir aTimer.Start();
307cdf0e10cSrcweir else
308cdf0e10cSrcweir {
309cdf0e10cSrcweir Help::ShowBalloon( this, aMousePos, String() );
310cdf0e10cSrcweir aTimer.Stop();
311cdf0e10cSrcweir }
312cdf0e10cSrcweir */
313cdf0e10cSrcweir }
314cdf0e10cSrcweir
315cdf0e10cSrcweir
IMPL_LINK(SfxConfigFunctionListBox_Impl,TimerHdl,Timer *,pTimer)316cdf0e10cSrcweir IMPL_LINK( SfxConfigFunctionListBox_Impl, TimerHdl, Timer*, pTimer)
317cdf0e10cSrcweir /* Beschreibung
318cdf0e10cSrcweir Timer-Handler f"ur die Einblendung eines Hilfetextes. Wenn nach Ablauf des Timers
319cdf0e10cSrcweir der Mauszeiger immer noch auf dem aktuell selektierten Eintrag steht, wird der
320cdf0e10cSrcweir Helptext des Entries als Balloon-Help eingeblendet.
321cdf0e10cSrcweir */
322cdf0e10cSrcweir {
323cdf0e10cSrcweir (void)pTimer; // unused
324cdf0e10cSrcweir /* --> PB 2004-12-01 #i37000# - no own help text needed any longer
325cdf0e10cSrcweir aTimer.Stop();
326cdf0e10cSrcweir Point aMousePos = GetPointerPosPixel();
327cdf0e10cSrcweir SvLBoxEntry *pEntry = GetCurEntry();
328cdf0e10cSrcweir if ( pEntry && GetEntry( aMousePos ) == pEntry && pCurEntry == pEntry )
329cdf0e10cSrcweir {
330cdf0e10cSrcweir String sHelpText = GetHelpText( pEntry );
331cdf0e10cSrcweir Help::ShowBalloon( this, OutputToScreenPixel( aMousePos ), sHelpText );
332cdf0e10cSrcweir }
333cdf0e10cSrcweir */
334cdf0e10cSrcweir return 0L;
335cdf0e10cSrcweir }
336cdf0e10cSrcweir
ClearAll()337cdf0e10cSrcweir void SfxConfigFunctionListBox_Impl::ClearAll()
338cdf0e10cSrcweir /* Beschreibung
339cdf0e10cSrcweir L"oscht alle Eintr"age in der FunctionListBox, alle UserDaten und alle evtl.
340cdf0e10cSrcweir vorhandenen MacroInfos.
341cdf0e10cSrcweir */
342cdf0e10cSrcweir {
343cdf0e10cSrcweir sal_uInt16 nCount = aArr.Count();
344cdf0e10cSrcweir for ( sal_uInt16 i=0; i<nCount; i++ )
345cdf0e10cSrcweir {
346cdf0e10cSrcweir SfxGroupInfo_Impl *pData = aArr[i];
347cdf0e10cSrcweir
348cdf0e10cSrcweir if ( pData->nKind == SFX_CFGFUNCTION_SCRIPT )
349cdf0e10cSrcweir {
350cdf0e10cSrcweir String* pScriptURI = (String*)pData->pObject;
351cdf0e10cSrcweir delete pScriptURI;
352cdf0e10cSrcweir }
353cdf0e10cSrcweir
354cdf0e10cSrcweir if ( pData->nKind == SFX_CFGGROUP_SCRIPTCONTAINER
355cdf0e10cSrcweir )
356cdf0e10cSrcweir {
357cdf0e10cSrcweir XInterface* xi = static_cast<XInterface *>(pData->pObject);
358cdf0e10cSrcweir if (xi != NULL)
359cdf0e10cSrcweir {
360cdf0e10cSrcweir xi->release();
361cdf0e10cSrcweir }
362cdf0e10cSrcweir }
363cdf0e10cSrcweir
364cdf0e10cSrcweir delete pData;
365cdf0e10cSrcweir }
366cdf0e10cSrcweir
367cdf0e10cSrcweir aArr.Remove( 0, nCount );
368cdf0e10cSrcweir Clear();
369cdf0e10cSrcweir }
370cdf0e10cSrcweir
GetSelectedScriptURI()371cdf0e10cSrcweir String SfxConfigFunctionListBox_Impl::GetSelectedScriptURI()
372cdf0e10cSrcweir {
373cdf0e10cSrcweir SvLBoxEntry *pEntry = FirstSelected();
374cdf0e10cSrcweir if ( pEntry )
375cdf0e10cSrcweir {
376cdf0e10cSrcweir SfxGroupInfo_Impl *pData = (SfxGroupInfo_Impl*) pEntry->GetUserData();
377cdf0e10cSrcweir if ( pData && ( pData->nKind == SFX_CFGFUNCTION_SCRIPT ) )
378cdf0e10cSrcweir return *(String*)pData->pObject;
379cdf0e10cSrcweir }
380cdf0e10cSrcweir return String();
381cdf0e10cSrcweir }
382cdf0e10cSrcweir
GetCurCommand()383cdf0e10cSrcweir String SfxConfigFunctionListBox_Impl::GetCurCommand()
384cdf0e10cSrcweir {
385cdf0e10cSrcweir SvLBoxEntry *pEntry = FirstSelected();
386cdf0e10cSrcweir if (!pEntry)
387cdf0e10cSrcweir return String();
388cdf0e10cSrcweir SfxGroupInfo_Impl *pData = (SfxGroupInfo_Impl*) pEntry->GetUserData();
389cdf0e10cSrcweir if (!pData)
390cdf0e10cSrcweir return String();
391cdf0e10cSrcweir return pData->sCommand;
392cdf0e10cSrcweir }
393cdf0e10cSrcweir
GetCurLabel()394cdf0e10cSrcweir String SfxConfigFunctionListBox_Impl::GetCurLabel()
395cdf0e10cSrcweir {
396cdf0e10cSrcweir SvLBoxEntry *pEntry = FirstSelected();
397cdf0e10cSrcweir if (!pEntry)
398cdf0e10cSrcweir return String();
399cdf0e10cSrcweir SfxGroupInfo_Impl *pData = (SfxGroupInfo_Impl*) pEntry->GetUserData();
400cdf0e10cSrcweir if (!pData)
401cdf0e10cSrcweir return String();
402cdf0e10cSrcweir if (pData->sLabel.Len())
403cdf0e10cSrcweir return pData->sLabel;
404cdf0e10cSrcweir return pData->sCommand;
405cdf0e10cSrcweir }
406cdf0e10cSrcweir
FunctionSelected()407cdf0e10cSrcweir void SfxConfigFunctionListBox_Impl::FunctionSelected()
408cdf0e10cSrcweir /* Beschreibung
409cdf0e10cSrcweir Setzt die Balloonhelp zur"uck, da diese immer den Helptext des selektierten
410cdf0e10cSrcweir Entry anzeigen soll.
411cdf0e10cSrcweir */
412cdf0e10cSrcweir {
413cdf0e10cSrcweir /* --> PB 2004-12-01 #i37000# - no own help text needed any longer
414cdf0e10cSrcweir Help::ShowBalloon( this, Point(), String() );
415cdf0e10cSrcweir */
416cdf0e10cSrcweir }
417cdf0e10cSrcweir
SetStylesInfo(SfxStylesInfo_Impl * pStyles)418cdf0e10cSrcweir void SfxConfigFunctionListBox_Impl::SetStylesInfo(SfxStylesInfo_Impl* pStyles)
419cdf0e10cSrcweir {
420cdf0e10cSrcweir pStylesInfo = pStyles;
421cdf0e10cSrcweir }
422cdf0e10cSrcweir
423cdf0e10cSrcweir struct SvxConfigGroupBoxResource_Impl : public Resource
424cdf0e10cSrcweir {
425cdf0e10cSrcweir Image m_hdImage;
426cdf0e10cSrcweir Image m_hdImage_hc;
427cdf0e10cSrcweir Image m_libImage;
428cdf0e10cSrcweir Image m_libImage_hc;
429cdf0e10cSrcweir Image m_macImage;
430cdf0e10cSrcweir Image m_macImage_hc;
431cdf0e10cSrcweir Image m_docImage;
432cdf0e10cSrcweir Image m_docImage_hc;
433cdf0e10cSrcweir ::rtl::OUString m_sMyMacros;
434cdf0e10cSrcweir ::rtl::OUString m_sProdMacros;
435cdf0e10cSrcweir String m_sMacros;
436cdf0e10cSrcweir String m_sDlgMacros;
437cdf0e10cSrcweir String m_aHumanAppName;
438cdf0e10cSrcweir String m_aStrGroupStyles;
439cdf0e10cSrcweir Image m_collapsedImage;
440cdf0e10cSrcweir Image m_collapsedImage_hc;
441cdf0e10cSrcweir Image m_expandedImage;
442cdf0e10cSrcweir Image m_expandedImage_hc;
443cdf0e10cSrcweir
444cdf0e10cSrcweir SvxConfigGroupBoxResource_Impl();
445cdf0e10cSrcweir };
446cdf0e10cSrcweir
SvxConfigGroupBoxResource_Impl()447cdf0e10cSrcweir SvxConfigGroupBoxResource_Impl::SvxConfigGroupBoxResource_Impl() :
448cdf0e10cSrcweir Resource(CUI_RES(RID_SVXPAGE_CONFIGGROUPBOX)),
449cdf0e10cSrcweir m_hdImage(CUI_RES(IMG_HARDDISK)),
450cdf0e10cSrcweir m_hdImage_hc(CUI_RES(IMG_HARDDISK_HC)),
451cdf0e10cSrcweir m_libImage(CUI_RES(IMG_LIB)),
452cdf0e10cSrcweir m_libImage_hc(CUI_RES(IMG_LIB_HC)),
453cdf0e10cSrcweir m_macImage(CUI_RES(IMG_MACRO)),
454cdf0e10cSrcweir m_macImage_hc(CUI_RES(IMG_MACRO_HC)),
455cdf0e10cSrcweir m_docImage(CUI_RES(IMG_DOC)),
456cdf0e10cSrcweir m_docImage_hc(CUI_RES(IMG_DOC_HC)),
457cdf0e10cSrcweir m_sMyMacros(String(CUI_RES(STR_MYMACROS))),
458cdf0e10cSrcweir m_sProdMacros(String(CUI_RES(STR_PRODMACROS))),
459cdf0e10cSrcweir m_sMacros(String(CUI_RES(STR_BASICMACROS))),
460cdf0e10cSrcweir m_sDlgMacros(String(CUI_RES(STR_DLG_MACROS))),
461cdf0e10cSrcweir m_aHumanAppName(String(CUI_RES(STR_HUMAN_APPNAME))),
462cdf0e10cSrcweir m_aStrGroupStyles(String(CUI_RES(STR_GROUP_STYLES))),
463cdf0e10cSrcweir m_collapsedImage(CUI_RES(BMP_COLLAPSED)),
464cdf0e10cSrcweir m_collapsedImage_hc(CUI_RES(BMP_COLLAPSED_HC)),
465cdf0e10cSrcweir m_expandedImage(CUI_RES(BMP_EXPANDED)),
466cdf0e10cSrcweir m_expandedImage_hc(CUI_RES(BMP_EXPANDED_HC))
467cdf0e10cSrcweir {
468cdf0e10cSrcweir FreeResource();
469cdf0e10cSrcweir }
470cdf0e10cSrcweir
SfxConfigGroupListBox_Impl(Window * pParent,const ResId & rResId,sal_uLong nConfigMode)471cdf0e10cSrcweir SfxConfigGroupListBox_Impl::SfxConfigGroupListBox_Impl(
472cdf0e10cSrcweir Window* pParent, const ResId& rResId, sal_uLong nConfigMode )
473cdf0e10cSrcweir : SvTreeListBox( pParent, rResId )
474cdf0e10cSrcweir , pImp(new SvxConfigGroupBoxResource_Impl()), pFunctionListBox(0), nMode( nConfigMode ), pStylesInfo(0)
475cdf0e10cSrcweir {
476cdf0e10cSrcweir SetStyle( GetStyle() | WB_CLIPCHILDREN | WB_HSCROLL | WB_HASBUTTONS | WB_HASLINES | WB_HASLINESATROOT | WB_HASBUTTONSATROOT );
477cdf0e10cSrcweir SetNodeBitmaps( pImp->m_collapsedImage, pImp->m_expandedImage, BMP_COLOR_NORMAL );
478cdf0e10cSrcweir SetNodeBitmaps( pImp->m_collapsedImage_hc, pImp->m_expandedImage_hc, BMP_COLOR_HIGHCONTRAST );
479cdf0e10cSrcweir }
480cdf0e10cSrcweir
481cdf0e10cSrcweir
~SfxConfigGroupListBox_Impl()482cdf0e10cSrcweir SfxConfigGroupListBox_Impl::~SfxConfigGroupListBox_Impl()
483cdf0e10cSrcweir {
484cdf0e10cSrcweir ClearAll();
485cdf0e10cSrcweir }
486cdf0e10cSrcweir
ClearAll()487cdf0e10cSrcweir void SfxConfigGroupListBox_Impl::ClearAll()
488cdf0e10cSrcweir {
489cdf0e10cSrcweir sal_uInt16 nCount = aArr.Count();
490cdf0e10cSrcweir for ( sal_uInt16 i=0; i<nCount; i++ )
491cdf0e10cSrcweir {
492cdf0e10cSrcweir SfxGroupInfo_Impl *pData = aArr[i];
493cdf0e10cSrcweir if ( pData->nKind == SFX_CFGGROUP_SCRIPTCONTAINER
494cdf0e10cSrcweir )
495cdf0e10cSrcweir {
496cdf0e10cSrcweir XInterface* xi = static_cast<XInterface *>(pData->pObject);
497cdf0e10cSrcweir if (xi != NULL)
498cdf0e10cSrcweir {
499cdf0e10cSrcweir xi->release();
500cdf0e10cSrcweir }
501cdf0e10cSrcweir }
502cdf0e10cSrcweir delete pData;
503cdf0e10cSrcweir }
504cdf0e10cSrcweir
505cdf0e10cSrcweir aArr.Remove( 0, nCount );
506cdf0e10cSrcweir Clear();
507cdf0e10cSrcweir }
508cdf0e10cSrcweir
SetStylesInfo(SfxStylesInfo_Impl * pStyles)509cdf0e10cSrcweir void SfxConfigGroupListBox_Impl::SetStylesInfo(SfxStylesInfo_Impl* pStyles)
510cdf0e10cSrcweir {
511cdf0e10cSrcweir pStylesInfo = pStyles;
512cdf0e10cSrcweir }
513cdf0e10cSrcweir
GetGroup()514cdf0e10cSrcweir String SfxConfigGroupListBox_Impl::GetGroup()
515cdf0e10cSrcweir /* Beschreibung
516cdf0e10cSrcweir Gibt den Namen der selektierten Funktionsgruppe bzw. des selektierten
517cdf0e10cSrcweir Basics zur"uck.
518cdf0e10cSrcweir */
519cdf0e10cSrcweir {
520cdf0e10cSrcweir SvLBoxEntry *pEntry = FirstSelected();
521cdf0e10cSrcweir while ( pEntry )
522cdf0e10cSrcweir {
523cdf0e10cSrcweir SfxGroupInfo_Impl *pInfo = (SfxGroupInfo_Impl*) pEntry->GetUserData();
524cdf0e10cSrcweir if ( pInfo->nKind == SFX_CFGGROUP_FUNCTION )
525cdf0e10cSrcweir return GetEntryText( pEntry );
526cdf0e10cSrcweir
527cdf0e10cSrcweir pEntry = GetParent( pEntry );
528cdf0e10cSrcweir }
529cdf0e10cSrcweir
530cdf0e10cSrcweir return String();
531cdf0e10cSrcweir }
532cdf0e10cSrcweir
533cdf0e10cSrcweir //-----------------------------------------------
InitModule()534cdf0e10cSrcweir void SfxConfigGroupListBox_Impl::InitModule()
535cdf0e10cSrcweir {
536cdf0e10cSrcweir try
537cdf0e10cSrcweir {
538cdf0e10cSrcweir css::uno::Reference< css::frame::XDispatchInformationProvider > xProvider(m_xFrame, css::uno::UNO_QUERY_THROW);
539cdf0e10cSrcweir css::uno::Sequence< sal_Int16 > lGroups = xProvider->getSupportedCommandGroups();
540cdf0e10cSrcweir sal_Int32 c1 = lGroups.getLength();
541cdf0e10cSrcweir sal_Int32 i1 = 0;
542cdf0e10cSrcweir
543cdf0e10cSrcweir for (i1=0; i1<c1; ++i1)
544cdf0e10cSrcweir {
545cdf0e10cSrcweir sal_Int16& rGroupID = lGroups[i1];
546cdf0e10cSrcweir ::rtl::OUString sGroupID = ::rtl::OUString::valueOf((sal_Int32)rGroupID);
547cdf0e10cSrcweir ::rtl::OUString sGroupName ;
548cdf0e10cSrcweir
549cdf0e10cSrcweir try
550cdf0e10cSrcweir {
551cdf0e10cSrcweir m_xModuleCategoryInfo->getByName(sGroupID) >>= sGroupName;
552cdf0e10cSrcweir if (!sGroupName.getLength())
553cdf0e10cSrcweir continue;
554cdf0e10cSrcweir }
555cdf0e10cSrcweir catch(const css::container::NoSuchElementException&)
556cdf0e10cSrcweir { continue; }
557cdf0e10cSrcweir
558cdf0e10cSrcweir SvLBoxEntry* pEntry = InsertEntry(sGroupName, NULL);
559cdf0e10cSrcweir SfxGroupInfo_Impl* pInfo = new SfxGroupInfo_Impl(SFX_CFGGROUP_FUNCTION, rGroupID);
560cdf0e10cSrcweir pEntry->SetUserData(pInfo);
561cdf0e10cSrcweir }
562cdf0e10cSrcweir }
563cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun)
564cdf0e10cSrcweir { throw exRun; }
565cdf0e10cSrcweir catch(const css::uno::Exception&)
566cdf0e10cSrcweir {}
567cdf0e10cSrcweir }
568cdf0e10cSrcweir
569cdf0e10cSrcweir //-----------------------------------------------
InitBasic()570cdf0e10cSrcweir void SfxConfigGroupListBox_Impl::InitBasic()
571cdf0e10cSrcweir {
572cdf0e10cSrcweir }
573cdf0e10cSrcweir
574cdf0e10cSrcweir //-----------------------------------------------
InitStyles()575cdf0e10cSrcweir void SfxConfigGroupListBox_Impl::InitStyles()
576cdf0e10cSrcweir {
577cdf0e10cSrcweir }
578cdf0e10cSrcweir
579cdf0e10cSrcweir //-----------------------------------------------
580cdf0e10cSrcweir namespace
581cdf0e10cSrcweir {
582cdf0e10cSrcweir //...........................................
583cdf0e10cSrcweir /** examines a component whether it supports XEmbeddedScripts, or provides access to such a
584cdf0e10cSrcweir component by implementing XScriptInvocationContext.
585cdf0e10cSrcweir @return
586cdf0e10cSrcweir the model which supports the embedded scripts, or <NULL/> if it cannot find such a
587cdf0e10cSrcweir model
588cdf0e10cSrcweir */
lcl_getDocumentWithScripts_throw(const Reference<XInterface> & _rxComponent)589cdf0e10cSrcweir static Reference< XModel > lcl_getDocumentWithScripts_throw( const Reference< XInterface >& _rxComponent )
590cdf0e10cSrcweir {
591cdf0e10cSrcweir Reference< XEmbeddedScripts > xScripts( _rxComponent, UNO_QUERY );
592cdf0e10cSrcweir if ( !xScripts.is() )
593cdf0e10cSrcweir {
594cdf0e10cSrcweir Reference< XScriptInvocationContext > xContext( _rxComponent, UNO_QUERY );
595cdf0e10cSrcweir if ( xContext.is() )
596cdf0e10cSrcweir xScripts.set( xContext->getScriptContainer(), UNO_QUERY );
597cdf0e10cSrcweir }
598cdf0e10cSrcweir
599cdf0e10cSrcweir return Reference< XModel >( xScripts, UNO_QUERY );
600cdf0e10cSrcweir }
601cdf0e10cSrcweir
602cdf0e10cSrcweir //...........................................
lcl_getScriptableDocument_nothrow(const Reference<XFrame> & _rxFrame)603cdf0e10cSrcweir static Reference< XModel > lcl_getScriptableDocument_nothrow( const Reference< XFrame >& _rxFrame )
604cdf0e10cSrcweir {
605cdf0e10cSrcweir Reference< XModel > xDocument;
606cdf0e10cSrcweir
607cdf0e10cSrcweir // examine our associated frame
608cdf0e10cSrcweir try
609cdf0e10cSrcweir {
610cdf0e10cSrcweir OSL_ENSURE( _rxFrame.is(), "lcl_getScriptableDocument_nothrow: you need to pass a frame to this dialog/tab page!" );
611cdf0e10cSrcweir if ( _rxFrame.is() )
612cdf0e10cSrcweir {
613cdf0e10cSrcweir // first try the model in the frame
614cdf0e10cSrcweir Reference< XController > xController( _rxFrame->getController(), UNO_SET_THROW );
615cdf0e10cSrcweir xDocument = lcl_getDocumentWithScripts_throw( xController->getModel() );
616cdf0e10cSrcweir
617cdf0e10cSrcweir if ( !xDocument.is() )
618cdf0e10cSrcweir {
619cdf0e10cSrcweir // if there is no suitable document in the frame, try the controller
620cdf0e10cSrcweir xDocument = lcl_getDocumentWithScripts_throw( _rxFrame->getController() );
621cdf0e10cSrcweir }
622cdf0e10cSrcweir }
623cdf0e10cSrcweir }
624cdf0e10cSrcweir catch( const Exception& )
625cdf0e10cSrcweir {
626cdf0e10cSrcweir //DBG_UNHANDLED_EXCEPTION();
627cdf0e10cSrcweir }
628cdf0e10cSrcweir
629cdf0e10cSrcweir return xDocument;
630cdf0e10cSrcweir }
631cdf0e10cSrcweir }
632cdf0e10cSrcweir
633cdf0e10cSrcweir //-----------------------------------------------
Init(const css::uno::Reference<css::lang::XMultiServiceFactory> & xSMGR,const css::uno::Reference<css::frame::XFrame> & xFrame,const::rtl::OUString & sModuleLongName)634cdf0e10cSrcweir void SfxConfigGroupListBox_Impl::Init(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR ,
635cdf0e10cSrcweir const css::uno::Reference< css::frame::XFrame >& xFrame ,
636cdf0e10cSrcweir const ::rtl::OUString& sModuleLongName)
637cdf0e10cSrcweir {
638cdf0e10cSrcweir SetUpdateMode(sal_False);
639cdf0e10cSrcweir ClearAll(); // Remove all old entries from treelist box
640cdf0e10cSrcweir
641cdf0e10cSrcweir m_xFrame = xFrame;
642cdf0e10cSrcweir if ( xSMGR.is())
643cdf0e10cSrcweir {
644cdf0e10cSrcweir m_xSMGR = xSMGR;
645cdf0e10cSrcweir m_sModuleLongName = sModuleLongName;
646cdf0e10cSrcweir
647cdf0e10cSrcweir m_xGlobalCategoryInfo = css::uno::Reference< css::container::XNameAccess >(m_xSMGR->createInstance(SERVICE_UICATEGORYDESCRIPTION), css::uno::UNO_QUERY_THROW);
648cdf0e10cSrcweir m_xModuleCategoryInfo = css::uno::Reference< css::container::XNameAccess >(m_xGlobalCategoryInfo->getByName(m_sModuleLongName) , css::uno::UNO_QUERY_THROW);
649cdf0e10cSrcweir m_xUICmdDescription = css::uno::Reference< css::container::XNameAccess >(m_xSMGR->createInstance(SERVICE_UICMDDESCRIPTION) , css::uno::UNO_QUERY_THROW);
650cdf0e10cSrcweir
651cdf0e10cSrcweir InitModule();
652cdf0e10cSrcweir InitBasic();
653cdf0e10cSrcweir InitStyles();
654cdf0e10cSrcweir }
655cdf0e10cSrcweir
656cdf0e10cSrcweir OSL_TRACE("** ** About to initialise SF Scripts");
657cdf0e10cSrcweir // Add Scripting Framework entries
658cdf0e10cSrcweir Reference< browse::XBrowseNode > rootNode;
659cdf0e10cSrcweir Reference< XComponentContext > xCtx;
660cdf0e10cSrcweir try
661cdf0e10cSrcweir {
662cdf0e10cSrcweir Reference < beans::XPropertySet > xProps(
663cdf0e10cSrcweir ::comphelper::getProcessServiceFactory(), UNO_QUERY_THROW );
664cdf0e10cSrcweir xCtx.set( xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))), UNO_QUERY_THROW );
665cdf0e10cSrcweir Reference< browse::XBrowseNodeFactory > xFac( xCtx->getValueByName(
666cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "/singletons/com.sun.star.script.browse.theBrowseNodeFactory") ), UNO_QUERY_THROW );
667cdf0e10cSrcweir rootNode.set( xFac->createView( browse::BrowseNodeFactoryViewTypes::MACROSELECTOR ) );
668cdf0e10cSrcweir //rootNode.set( xFac->createView( browse::BrowseNodeFactoryViewTypes::MACROORGANIZER ) );
669cdf0e10cSrcweir }
670cdf0e10cSrcweir catch( Exception& e )
671cdf0e10cSrcweir {
672cdf0e10cSrcweir OSL_TRACE(" Caught some exception whilst retrieving browse nodes from factory... Exception: %s",
673cdf0e10cSrcweir ::rtl::OUStringToOString( e.Message , RTL_TEXTENCODING_ASCII_US ).pData->buffer );
674cdf0e10cSrcweir // TODO exception handling
675cdf0e10cSrcweir }
676cdf0e10cSrcweir
677cdf0e10cSrcweir
678cdf0e10cSrcweir if ( rootNode.is() )
679cdf0e10cSrcweir {
680cdf0e10cSrcweir if ( nMode )
681cdf0e10cSrcweir {
682cdf0e10cSrcweir //We call acquire on the XBrowseNode so that it does not
683cdf0e10cSrcweir //get autodestructed and become invalid when accessed later.
684cdf0e10cSrcweir rootNode->acquire();
685cdf0e10cSrcweir
686cdf0e10cSrcweir SfxGroupInfo_Impl *pInfo =
687cdf0e10cSrcweir new SfxGroupInfo_Impl( SFX_CFGGROUP_SCRIPTCONTAINER, 0,
688cdf0e10cSrcweir static_cast<void *>(rootNode.get()));
689cdf0e10cSrcweir
690cdf0e10cSrcweir String aTitle(pImp->m_sDlgMacros);
691cdf0e10cSrcweir SvLBoxEntry *pNewEntry = InsertEntry( aTitle, NULL );
692cdf0e10cSrcweir pNewEntry->SetUserData( pInfo );
693cdf0e10cSrcweir pNewEntry->EnableChildsOnDemand( sal_True );
694cdf0e10cSrcweir aArr.Insert( pInfo, aArr.Count() );
695cdf0e10cSrcweir }
696cdf0e10cSrcweir else
697cdf0e10cSrcweir {
698cdf0e10cSrcweir //We are only showing scripts not slot APIs so skip
699cdf0e10cSrcweir //Root node and show location nodes
700cdf0e10cSrcweir try {
701cdf0e10cSrcweir if ( rootNode->hasChildNodes() )
702cdf0e10cSrcweir {
703cdf0e10cSrcweir Sequence< Reference< browse::XBrowseNode > > children =
704cdf0e10cSrcweir rootNode->getChildNodes();
705cdf0e10cSrcweir sal_Bool bIsRootNode = sal_False;
706cdf0e10cSrcweir
707cdf0e10cSrcweir ::rtl::OUString user = ::rtl::OUString::createFromAscii("user");
708cdf0e10cSrcweir ::rtl::OUString share = ::rtl::OUString::createFromAscii("share");
709cdf0e10cSrcweir if ( rootNode->getName().equals(::rtl::OUString::createFromAscii("Root") ))
710cdf0e10cSrcweir {
711cdf0e10cSrcweir bIsRootNode = sal_True;
712cdf0e10cSrcweir }
713cdf0e10cSrcweir
714cdf0e10cSrcweir //To mimic current starbasic behaviour we
715cdf0e10cSrcweir //need to make sure that only the current document
716cdf0e10cSrcweir //is displayed in the config tree. Tests below
717cdf0e10cSrcweir //set the bDisplay flag to FALSE if the current
718cdf0e10cSrcweir //node is a first level child of the Root and is NOT
719cdf0e10cSrcweir //either the current document, user or share
720cdf0e10cSrcweir ::rtl::OUString currentDocTitle;
721cdf0e10cSrcweir Reference< XModel > xDocument( lcl_getScriptableDocument_nothrow( m_xFrame ) );
722cdf0e10cSrcweir if ( xDocument.is() )
723cdf0e10cSrcweir {
724cdf0e10cSrcweir currentDocTitle = ::comphelper::DocumentInfo::getDocumentTitle( xDocument );
725cdf0e10cSrcweir }
726cdf0e10cSrcweir
727cdf0e10cSrcweir for ( sal_Int32 n = 0; n < children.getLength(); n++ )
728cdf0e10cSrcweir {
729cdf0e10cSrcweir Reference< browse::XBrowseNode >& theChild = children[n];
730cdf0e10cSrcweir sal_Bool bDisplay = sal_True;
731cdf0e10cSrcweir ::rtl::OUString uiName = theChild->getName();
732cdf0e10cSrcweir if ( bIsRootNode )
733cdf0e10cSrcweir {
734cdf0e10cSrcweir if ( ! ((theChild->getName().equals( user ) || theChild->getName().equals( share ) ||
735cdf0e10cSrcweir theChild->getName().equals( currentDocTitle ) ) ) )
736cdf0e10cSrcweir {
737cdf0e10cSrcweir bDisplay=sal_False;
738cdf0e10cSrcweir }
739cdf0e10cSrcweir else
740cdf0e10cSrcweir {
741cdf0e10cSrcweir if ( uiName.equals( user ) )
742cdf0e10cSrcweir {
743cdf0e10cSrcweir uiName = pImp->m_sMyMacros;
744cdf0e10cSrcweir }
745cdf0e10cSrcweir else if ( uiName.equals( share ) )
746cdf0e10cSrcweir {
747cdf0e10cSrcweir uiName = pImp->m_sProdMacros;
748cdf0e10cSrcweir }
749cdf0e10cSrcweir }
750cdf0e10cSrcweir }
751cdf0e10cSrcweir if (children[n]->getType() != browse::BrowseNodeTypes::SCRIPT && bDisplay )
752cdf0e10cSrcweir {
753cdf0e10cSrcweir
754cdf0e10cSrcweir // We call acquire on the XBrowseNode so that it does not
755cdf0e10cSrcweir // get autodestructed and become invalid when accessed later.
756cdf0e10cSrcweir theChild->acquire();
757cdf0e10cSrcweir
758cdf0e10cSrcweir SfxGroupInfo_Impl* pInfo =
759cdf0e10cSrcweir new SfxGroupInfo_Impl(SFX_CFGGROUP_SCRIPTCONTAINER,
760cdf0e10cSrcweir 0, static_cast<void *>( theChild.get()));
761cdf0e10cSrcweir
762cdf0e10cSrcweir Image aImage = GetImage( theChild, xCtx, bIsRootNode,BMP_COLOR_NORMAL );
763cdf0e10cSrcweir SvLBoxEntry* pNewEntry =
764cdf0e10cSrcweir InsertEntry( uiName, NULL);
765cdf0e10cSrcweir SetExpandedEntryBmp(pNewEntry, aImage, BMP_COLOR_NORMAL);
766cdf0e10cSrcweir SetCollapsedEntryBmp(pNewEntry, aImage, BMP_COLOR_NORMAL);
767cdf0e10cSrcweir aImage = GetImage( theChild, xCtx, bIsRootNode,BMP_COLOR_HIGHCONTRAST );
768cdf0e10cSrcweir SetExpandedEntryBmp(pNewEntry, aImage, BMP_COLOR_HIGHCONTRAST);
769cdf0e10cSrcweir SetCollapsedEntryBmp(pNewEntry, aImage, BMP_COLOR_HIGHCONTRAST);
770cdf0e10cSrcweir
771cdf0e10cSrcweir pNewEntry->SetUserData( pInfo );
772cdf0e10cSrcweir aArr.Insert( pInfo, aArr.Count() );
773cdf0e10cSrcweir
774cdf0e10cSrcweir if ( children[n]->hasChildNodes() )
775cdf0e10cSrcweir {
776cdf0e10cSrcweir Sequence< Reference< browse::XBrowseNode > > grandchildren =
777cdf0e10cSrcweir children[n]->getChildNodes();
778cdf0e10cSrcweir
779cdf0e10cSrcweir for ( sal_Int32 m = 0; m < grandchildren.getLength(); m++ )
780cdf0e10cSrcweir {
781cdf0e10cSrcweir if ( grandchildren[m]->getType() == browse::BrowseNodeTypes::CONTAINER )
782cdf0e10cSrcweir {
783cdf0e10cSrcweir pNewEntry->EnableChildsOnDemand( sal_True );
784cdf0e10cSrcweir m = grandchildren.getLength();
785cdf0e10cSrcweir }
786cdf0e10cSrcweir }
787cdf0e10cSrcweir }
788cdf0e10cSrcweir }
789cdf0e10cSrcweir }
790cdf0e10cSrcweir }
791cdf0e10cSrcweir }
792cdf0e10cSrcweir catch (RuntimeException&) {
793cdf0e10cSrcweir // do nothing, the entry will not be displayed in the UI
794cdf0e10cSrcweir }
795cdf0e10cSrcweir }
796cdf0e10cSrcweir }
797cdf0e10cSrcweir
798cdf0e10cSrcweir // add styles
799cdf0e10cSrcweir if ( m_xSMGR.is() )
800cdf0e10cSrcweir {
801cdf0e10cSrcweir String sStyle( pImp->m_aStrGroupStyles );
802cdf0e10cSrcweir SvLBoxEntry *pEntry = InsertEntry( sStyle, 0 );
803cdf0e10cSrcweir SfxGroupInfo_Impl *pInfo = new SfxGroupInfo_Impl( SFX_CFGGROUP_STYLES, 0, 0 ); // TODO last parameter should contain user data
804cdf0e10cSrcweir aArr.Insert( pInfo, aArr.Count() );
805cdf0e10cSrcweir pEntry->SetUserData( pInfo );
806cdf0e10cSrcweir pEntry->EnableChildsOnDemand( sal_True );
807cdf0e10cSrcweir }
808cdf0e10cSrcweir
809cdf0e10cSrcweir MakeVisible( GetEntry( 0,0 ) );
810cdf0e10cSrcweir SetUpdateMode( sal_True );
811cdf0e10cSrcweir }
GetImage(Reference<browse::XBrowseNode> node,Reference<XComponentContext> xCtx,bool bIsRootNode,bool bHighContrast)812cdf0e10cSrcweir Image SfxConfigGroupListBox_Impl::GetImage( Reference< browse::XBrowseNode > node, Reference< XComponentContext > xCtx, bool bIsRootNode, bool bHighContrast )
813cdf0e10cSrcweir {
814cdf0e10cSrcweir Image aImage;
815cdf0e10cSrcweir if ( bIsRootNode )
816cdf0e10cSrcweir {
817cdf0e10cSrcweir ::rtl::OUString user = ::rtl::OUString::createFromAscii("user");
818cdf0e10cSrcweir ::rtl::OUString share = ::rtl::OUString::createFromAscii("share");
819cdf0e10cSrcweir if (node->getName().equals( user ) || node->getName().equals(share ) )
820cdf0e10cSrcweir {
821cdf0e10cSrcweir if( bHighContrast == BMP_COLOR_NORMAL )
822cdf0e10cSrcweir aImage = pImp->m_hdImage;
823cdf0e10cSrcweir else
824cdf0e10cSrcweir aImage = pImp->m_hdImage_hc;
825cdf0e10cSrcweir }
826cdf0e10cSrcweir else
827cdf0e10cSrcweir {
828cdf0e10cSrcweir ::rtl::OUString factoryURL;
829cdf0e10cSrcweir ::rtl::OUString nodeName = node->getName();
830cdf0e10cSrcweir Reference<XInterface> xDocumentModel = getDocumentModel(xCtx, nodeName );
831cdf0e10cSrcweir if ( xDocumentModel.is() )
832cdf0e10cSrcweir {
833cdf0e10cSrcweir Reference< ::com::sun::star::frame::XModuleManager >
834cdf0e10cSrcweir xModuleManager(
835cdf0e10cSrcweir xCtx->getServiceManager()
836cdf0e10cSrcweir ->createInstanceWithContext(
837cdf0e10cSrcweir ::rtl::OUString::createFromAscii("" // xxx todo
838cdf0e10cSrcweir "com.sun.star.frame.ModuleManager"),
839cdf0e10cSrcweir xCtx ),
840cdf0e10cSrcweir UNO_QUERY_THROW );
841cdf0e10cSrcweir Reference<container::XNameAccess> xModuleConfig(
842cdf0e10cSrcweir xModuleManager, UNO_QUERY_THROW );
843cdf0e10cSrcweir // get the long name of the document:
844cdf0e10cSrcweir ::rtl::OUString appModule( xModuleManager->identify(
845cdf0e10cSrcweir xDocumentModel ) );
846cdf0e10cSrcweir Sequence<beans::PropertyValue> moduleDescr;
847cdf0e10cSrcweir Any aAny = xModuleConfig->getByName(appModule);
848cdf0e10cSrcweir if( sal_True != ( aAny >>= moduleDescr ) )
849cdf0e10cSrcweir {
850cdf0e10cSrcweir throw RuntimeException(::rtl::OUString::createFromAscii("SFTreeListBox::Init: failed to get PropertyValue"), Reference< XInterface >());
851cdf0e10cSrcweir }
852cdf0e10cSrcweir beans::PropertyValue const * pmoduleDescr =
853cdf0e10cSrcweir moduleDescr.getConstArray();
854cdf0e10cSrcweir for ( sal_Int32 pos = moduleDescr.getLength(); pos--; )
855cdf0e10cSrcweir {
856cdf0e10cSrcweir if (pmoduleDescr[ pos ].Name.equalsAsciiL(
857cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM(
858cdf0e10cSrcweir "ooSetupFactoryEmptyDocumentURL") ))
859cdf0e10cSrcweir {
860cdf0e10cSrcweir pmoduleDescr[ pos ].Value >>= factoryURL;
861cdf0e10cSrcweir OSL_TRACE("factory url for doc images is %s",
862cdf0e10cSrcweir ::rtl::OUStringToOString( factoryURL , RTL_TEXTENCODING_ASCII_US ).pData->buffer );
863cdf0e10cSrcweir break;
864cdf0e10cSrcweir }
865cdf0e10cSrcweir }
866cdf0e10cSrcweir }
867cdf0e10cSrcweir if( factoryURL.getLength() > 0 )
868cdf0e10cSrcweir {
869cdf0e10cSrcweir if( bHighContrast == BMP_COLOR_NORMAL )
870cdf0e10cSrcweir aImage = SvFileInformationManager::GetFileImage(
871cdf0e10cSrcweir INetURLObject(factoryURL), false,
872cdf0e10cSrcweir BMP_COLOR_NORMAL );
873cdf0e10cSrcweir else
874cdf0e10cSrcweir aImage = SvFileInformationManager::GetFileImage(
875cdf0e10cSrcweir INetURLObject(factoryURL), false,
876cdf0e10cSrcweir BMP_COLOR_HIGHCONTRAST );
877cdf0e10cSrcweir }
878cdf0e10cSrcweir else
879cdf0e10cSrcweir {
880cdf0e10cSrcweir if( bHighContrast == BMP_COLOR_NORMAL )
881cdf0e10cSrcweir aImage = pImp->m_docImage;
882cdf0e10cSrcweir else
883cdf0e10cSrcweir aImage = pImp->m_docImage_hc;
884cdf0e10cSrcweir }
885cdf0e10cSrcweir }
886cdf0e10cSrcweir }
887cdf0e10cSrcweir else
888cdf0e10cSrcweir {
889cdf0e10cSrcweir if( node->getType() == browse::BrowseNodeTypes::SCRIPT )
890cdf0e10cSrcweir {
891cdf0e10cSrcweir if( bHighContrast == BMP_COLOR_NORMAL )
892cdf0e10cSrcweir aImage = pImp->m_macImage;
893cdf0e10cSrcweir else
894cdf0e10cSrcweir aImage = pImp->m_macImage_hc;
895cdf0e10cSrcweir }
896cdf0e10cSrcweir else
897cdf0e10cSrcweir {
898cdf0e10cSrcweir if( bHighContrast == BMP_COLOR_NORMAL )
899cdf0e10cSrcweir aImage = pImp->m_libImage;
900cdf0e10cSrcweir else
901cdf0e10cSrcweir aImage = pImp->m_libImage_hc;
902cdf0e10cSrcweir }
903cdf0e10cSrcweir }
904cdf0e10cSrcweir return aImage;
905cdf0e10cSrcweir }
906cdf0e10cSrcweir
907cdf0e10cSrcweir Reference< XInterface >
getDocumentModel(Reference<XComponentContext> & xCtx,::rtl::OUString & docName)908cdf0e10cSrcweir SfxConfigGroupListBox_Impl::getDocumentModel( Reference< XComponentContext >& xCtx, ::rtl::OUString& docName )
909cdf0e10cSrcweir {
910cdf0e10cSrcweir Reference< XInterface > xModel;
911cdf0e10cSrcweir Reference< lang::XMultiComponentFactory > mcf =
912cdf0e10cSrcweir xCtx->getServiceManager();
913cdf0e10cSrcweir Reference< frame::XDesktop > desktop (
914cdf0e10cSrcweir mcf->createInstanceWithContext(
915cdf0e10cSrcweir ::rtl::OUString::createFromAscii("com.sun.star.frame.Desktop"), xCtx ),
916cdf0e10cSrcweir UNO_QUERY );
917cdf0e10cSrcweir
918cdf0e10cSrcweir Reference< container::XEnumerationAccess > componentsAccess =
919cdf0e10cSrcweir desktop->getComponents();
920cdf0e10cSrcweir Reference< container::XEnumeration > components =
921cdf0e10cSrcweir componentsAccess->createEnumeration();
922cdf0e10cSrcweir while (components->hasMoreElements())
923cdf0e10cSrcweir {
924cdf0e10cSrcweir Reference< frame::XModel > model(
925cdf0e10cSrcweir components->nextElement(), UNO_QUERY );
926cdf0e10cSrcweir if ( model.is() )
927cdf0e10cSrcweir {
928cdf0e10cSrcweir ::rtl::OUString sTdocUrl =
929cdf0e10cSrcweir ::comphelper::DocumentInfo::getDocumentTitle( model );
930cdf0e10cSrcweir if( sTdocUrl.equals( docName ) )
931cdf0e10cSrcweir {
932cdf0e10cSrcweir xModel = model;
933cdf0e10cSrcweir break;
934cdf0e10cSrcweir }
935cdf0e10cSrcweir }
936cdf0e10cSrcweir }
937cdf0e10cSrcweir return xModel;
938cdf0e10cSrcweir }
939cdf0e10cSrcweir
940cdf0e10cSrcweir //-----------------------------------------------
MapCommand2UIName(const::rtl::OUString & sCommand)941cdf0e10cSrcweir ::rtl::OUString SfxConfigGroupListBox_Impl::MapCommand2UIName(const ::rtl::OUString& sCommand)
942cdf0e10cSrcweir {
943cdf0e10cSrcweir ::rtl::OUString sUIName;
944cdf0e10cSrcweir try
945cdf0e10cSrcweir {
946cdf0e10cSrcweir css::uno::Reference< css::container::XNameAccess > xModuleConf;
947cdf0e10cSrcweir m_xUICmdDescription->getByName(m_sModuleLongName) >>= xModuleConf;
948cdf0e10cSrcweir if (xModuleConf.is())
949cdf0e10cSrcweir {
950cdf0e10cSrcweir ::comphelper::SequenceAsHashMap lProps(xModuleConf->getByName(sCommand));
951cdf0e10cSrcweir sUIName = lProps.getUnpackedValueOrDefault(::rtl::OUString::createFromAscii("Name"), ::rtl::OUString());
952cdf0e10cSrcweir }
953cdf0e10cSrcweir }
954cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun)
955cdf0e10cSrcweir { throw exRun; }
956cdf0e10cSrcweir catch(css::uno::Exception&)
957cdf0e10cSrcweir { sUIName = ::rtl::OUString(); }
958cdf0e10cSrcweir
959cdf0e10cSrcweir // fallback for missing UINames !?
960cdf0e10cSrcweir if (!sUIName.getLength())
961cdf0e10cSrcweir {
962cdf0e10cSrcweir sUIName = sCommand;
963cdf0e10cSrcweir /*
964cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
965cdf0e10cSrcweir ::rtl::OUStringBuffer sMsg(256);
966cdf0e10cSrcweir sMsg.appendAscii("There is no UIName for the internal command \"");
967cdf0e10cSrcweir sMsg.append (sCommand );
968cdf0e10cSrcweir sMsg.appendAscii("\". The UI will be invalid then ..." );
969cdf0e10cSrcweir OSL_ENSURE(sal_False, ::rtl::OUStringToOString(sMsg.makeStringAndClear(), RTL_TEXTENCODING_UTF8).getStr());
970cdf0e10cSrcweir #endif
971cdf0e10cSrcweir */
972cdf0e10cSrcweir }
973cdf0e10cSrcweir
974cdf0e10cSrcweir return sUIName;
975cdf0e10cSrcweir }
976cdf0e10cSrcweir
977cdf0e10cSrcweir //-----------------------------------------------
GroupSelected()978cdf0e10cSrcweir void SfxConfigGroupListBox_Impl::GroupSelected()
979cdf0e10cSrcweir /* Beschreibung
980cdf0e10cSrcweir Eine Funktionsgruppe oder eine Basicmodul wurde selektiert. Alle Funktionen bzw.
981cdf0e10cSrcweir Macros werden in der Functionlistbox anzeigt.
982cdf0e10cSrcweir */
983cdf0e10cSrcweir {
984cdf0e10cSrcweir SvLBoxEntry *pEntry = FirstSelected();
985cdf0e10cSrcweir SfxGroupInfo_Impl *pInfo = (SfxGroupInfo_Impl*) pEntry->GetUserData();
986cdf0e10cSrcweir pFunctionListBox->SetUpdateMode(sal_False);
987cdf0e10cSrcweir pFunctionListBox->ClearAll();
988cdf0e10cSrcweir if ( pInfo->nKind != SFX_CFGGROUP_FUNCTION &&
989cdf0e10cSrcweir pInfo->nKind != SFX_CFGGROUP_SCRIPTCONTAINER &&
990cdf0e10cSrcweir pInfo->nKind != SFX_CFGGROUP_STYLES )
991cdf0e10cSrcweir {
992cdf0e10cSrcweir pFunctionListBox->SetUpdateMode(sal_True);
993cdf0e10cSrcweir return;
994cdf0e10cSrcweir }
995cdf0e10cSrcweir
996cdf0e10cSrcweir switch ( pInfo->nKind )
997cdf0e10cSrcweir {
998cdf0e10cSrcweir case SFX_CFGGROUP_FUNCTION :
999cdf0e10cSrcweir {
1000cdf0e10cSrcweir sal_uInt16 nGroup = pInfo->nUniqueID;
1001cdf0e10cSrcweir css::uno::Reference< css::frame::XDispatchInformationProvider > xProvider (m_xFrame, css::uno::UNO_QUERY_THROW);
1002cdf0e10cSrcweir css::uno::Sequence< css::frame::DispatchInformation > lCommands = xProvider->getConfigurableDispatchInformation(nGroup);
1003cdf0e10cSrcweir sal_Int32 c = lCommands.getLength();
1004cdf0e10cSrcweir sal_Int32 i = 0;
1005cdf0e10cSrcweir
1006cdf0e10cSrcweir for (i=0; i<c; ++i)
1007cdf0e10cSrcweir {
1008cdf0e10cSrcweir const css::frame::DispatchInformation& rInfo = lCommands[i];
1009cdf0e10cSrcweir ::rtl::OUString sUIName = MapCommand2UIName(rInfo.Command);
1010cdf0e10cSrcweir SvLBoxEntry* pFuncEntry = pFunctionListBox->InsertEntry(sUIName, NULL);
1011cdf0e10cSrcweir SfxGroupInfo_Impl* pGrpInfo = new SfxGroupInfo_Impl(SFX_CFGFUNCTION_SLOT, 0);
1012cdf0e10cSrcweir pGrpInfo->sCommand = rInfo.Command;
1013cdf0e10cSrcweir pGrpInfo->sLabel = sUIName;
1014cdf0e10cSrcweir pFuncEntry->SetUserData(pGrpInfo);
1015cdf0e10cSrcweir }
1016cdf0e10cSrcweir
1017cdf0e10cSrcweir break;
1018cdf0e10cSrcweir }
1019cdf0e10cSrcweir
1020cdf0e10cSrcweir case SFX_CFGGROUP_SCRIPTCONTAINER:
1021cdf0e10cSrcweir {
1022cdf0e10cSrcweir if ( !GetChildCount( pEntry ) )
1023cdf0e10cSrcweir {
1024cdf0e10cSrcweir Reference< browse::XBrowseNode > rootNode(
1025cdf0e10cSrcweir reinterpret_cast< browse::XBrowseNode* >( pInfo->pObject ) ) ;
1026cdf0e10cSrcweir
1027cdf0e10cSrcweir try {
1028cdf0e10cSrcweir if ( rootNode->hasChildNodes() )
1029cdf0e10cSrcweir {
1030cdf0e10cSrcweir Sequence< Reference< browse::XBrowseNode > > children =
1031cdf0e10cSrcweir rootNode->getChildNodes();
1032cdf0e10cSrcweir
1033cdf0e10cSrcweir for ( sal_Int32 n = 0; n < children.getLength(); n++ )
1034cdf0e10cSrcweir {
1035cdf0e10cSrcweir if (children[n]->getType() == browse::BrowseNodeTypes::SCRIPT)
1036cdf0e10cSrcweir {
1037cdf0e10cSrcweir ::rtl::OUString uri;
1038cdf0e10cSrcweir
1039cdf0e10cSrcweir Reference < beans::XPropertySet >xPropSet( children[n], UNO_QUERY );
1040cdf0e10cSrcweir if (!xPropSet.is())
1041cdf0e10cSrcweir {
1042cdf0e10cSrcweir continue;
1043cdf0e10cSrcweir }
1044cdf0e10cSrcweir
1045cdf0e10cSrcweir Any value =
1046cdf0e10cSrcweir xPropSet->getPropertyValue( String::CreateFromAscii( "URI" ) );
1047cdf0e10cSrcweir value >>= uri;
1048cdf0e10cSrcweir
1049cdf0e10cSrcweir String* pScriptURI = new String( uri );
1050cdf0e10cSrcweir SfxGroupInfo_Impl* pGrpInfo = new SfxGroupInfo_Impl( SFX_CFGFUNCTION_SCRIPT, 0, pScriptURI );
1051cdf0e10cSrcweir
1052cdf0e10cSrcweir Image aImage = GetImage( children[n], Reference< XComponentContext >(), sal_False, BMP_COLOR_NORMAL );
1053cdf0e10cSrcweir SvLBoxEntry* pNewEntry =
1054cdf0e10cSrcweir pFunctionListBox->InsertEntry( children[n]->getName(), NULL );
1055cdf0e10cSrcweir pFunctionListBox->SetExpandedEntryBmp(pNewEntry, aImage, BMP_COLOR_NORMAL);
1056cdf0e10cSrcweir pFunctionListBox->SetCollapsedEntryBmp(pNewEntry, aImage, BMP_COLOR_NORMAL);
1057cdf0e10cSrcweir aImage = GetImage( children[n], Reference< XComponentContext >(), sal_False, BMP_COLOR_HIGHCONTRAST );
1058cdf0e10cSrcweir pFunctionListBox->SetExpandedEntryBmp(pNewEntry, aImage, BMP_COLOR_HIGHCONTRAST);
1059cdf0e10cSrcweir pFunctionListBox->SetCollapsedEntryBmp(pNewEntry, aImage, BMP_COLOR_HIGHCONTRAST);
1060cdf0e10cSrcweir
1061cdf0e10cSrcweir pGrpInfo->sCommand = uri;
1062cdf0e10cSrcweir pGrpInfo->sLabel = children[n]->getName();
1063cdf0e10cSrcweir pNewEntry->SetUserData( pGrpInfo );
1064cdf0e10cSrcweir
1065cdf0e10cSrcweir pFunctionListBox->aArr.Insert(
1066cdf0e10cSrcweir pGrpInfo, pFunctionListBox->aArr.Count() );
1067cdf0e10cSrcweir
1068cdf0e10cSrcweir }
1069cdf0e10cSrcweir }
1070cdf0e10cSrcweir }
1071cdf0e10cSrcweir }
1072cdf0e10cSrcweir catch (RuntimeException&) {
1073cdf0e10cSrcweir // do nothing, the entry will not be displayed in the UI
1074cdf0e10cSrcweir }
1075cdf0e10cSrcweir }
1076cdf0e10cSrcweir break;
1077cdf0e10cSrcweir }
1078cdf0e10cSrcweir
1079cdf0e10cSrcweir case SFX_CFGGROUP_STYLES :
1080cdf0e10cSrcweir {
1081cdf0e10cSrcweir SfxStyleInfo_Impl* pFamily = (SfxStyleInfo_Impl*)(pInfo->pObject);
1082cdf0e10cSrcweir if (pFamily)
1083cdf0e10cSrcweir {
1084cdf0e10cSrcweir const ::std::vector< SfxStyleInfo_Impl > lStyles = pStylesInfo->getStyles(pFamily->sFamily);
1085cdf0e10cSrcweir ::std::vector< SfxStyleInfo_Impl >::const_iterator pIt;
1086cdf0e10cSrcweir for ( pIt = lStyles.begin();
1087cdf0e10cSrcweir pIt != lStyles.end() ;
1088cdf0e10cSrcweir ++pIt )
1089cdf0e10cSrcweir {
1090cdf0e10cSrcweir SfxStyleInfo_Impl* pStyle = new SfxStyleInfo_Impl(*pIt);
1091cdf0e10cSrcweir SvLBoxEntry* pFuncEntry = pFunctionListBox->InsertEntry( pStyle->sLabel, NULL );
1092cdf0e10cSrcweir SfxGroupInfo_Impl *pGrpInfo = new SfxGroupInfo_Impl( SFX_CFGGROUP_STYLES, 0, pStyle );
1093cdf0e10cSrcweir pFunctionListBox->aArr.Insert( pGrpInfo, pFunctionListBox->aArr.Count() );
1094cdf0e10cSrcweir pGrpInfo->sCommand = pStyle->sCommand;
1095cdf0e10cSrcweir pGrpInfo->sLabel = pStyle->sLabel;
1096cdf0e10cSrcweir pFuncEntry->SetUserData( pGrpInfo );
1097cdf0e10cSrcweir }
1098cdf0e10cSrcweir }
1099cdf0e10cSrcweir break;
1100cdf0e10cSrcweir }
1101cdf0e10cSrcweir
1102cdf0e10cSrcweir default:
1103cdf0e10cSrcweir return;
1104cdf0e10cSrcweir }
1105cdf0e10cSrcweir
1106cdf0e10cSrcweir if ( pFunctionListBox->GetEntryCount() )
1107cdf0e10cSrcweir pFunctionListBox->Select( pFunctionListBox->GetEntry( 0, 0 ) );
1108cdf0e10cSrcweir
1109cdf0e10cSrcweir pFunctionListBox->SetUpdateMode(sal_True);
1110cdf0e10cSrcweir }
1111cdf0e10cSrcweir
Expand(SvLBoxEntry * pParent)1112cdf0e10cSrcweir sal_Bool SfxConfigGroupListBox_Impl::Expand( SvLBoxEntry* pParent )
1113cdf0e10cSrcweir {
1114cdf0e10cSrcweir sal_Bool bRet = SvTreeListBox::Expand( pParent );
1115cdf0e10cSrcweir if ( bRet )
1116cdf0e10cSrcweir {
1117cdf0e10cSrcweir // Wieviele Entries k"onnen angezeigt werden ?
1118cdf0e10cSrcweir sal_uLong nEntries = GetOutputSizePixel().Height() / GetEntryHeight();
1119cdf0e10cSrcweir
1120cdf0e10cSrcweir // Wieviele Kinder sollen angezeigt werden ?
1121cdf0e10cSrcweir sal_uLong nChildCount = GetVisibleChildCount( pParent );
1122cdf0e10cSrcweir
1123cdf0e10cSrcweir // Passen alle Kinder und der parent gleichzeitig in die View ?
1124cdf0e10cSrcweir if ( nChildCount+1 > nEntries )
1125cdf0e10cSrcweir {
1126cdf0e10cSrcweir // Wenn nicht, wenigstens parent ganz nach oben schieben
1127cdf0e10cSrcweir MakeVisible( pParent, sal_True );
1128cdf0e10cSrcweir }
1129cdf0e10cSrcweir else
1130cdf0e10cSrcweir {
1131cdf0e10cSrcweir // An welcher relativen ViewPosition steht der aufzuklappende parent
1132cdf0e10cSrcweir SvLBoxEntry *pEntry = GetFirstEntryInView();
1133cdf0e10cSrcweir sal_uLong nParentPos = 0;
1134cdf0e10cSrcweir while ( pEntry && pEntry != pParent )
1135cdf0e10cSrcweir {
1136cdf0e10cSrcweir nParentPos++;
1137cdf0e10cSrcweir pEntry = GetNextEntryInView( pEntry );
1138cdf0e10cSrcweir }
1139cdf0e10cSrcweir
1140cdf0e10cSrcweir // Ist unter dem parent noch genug Platz f"ur alle Kinder ?
1141cdf0e10cSrcweir if ( nParentPos + nChildCount + 1 > nEntries )
1142cdf0e10cSrcweir ScrollOutputArea( (short)( nEntries - ( nParentPos + nChildCount + 1 ) ) );
1143cdf0e10cSrcweir }
1144cdf0e10cSrcweir }
1145cdf0e10cSrcweir
1146cdf0e10cSrcweir return bRet;
1147cdf0e10cSrcweir }
1148cdf0e10cSrcweir
RequestingChilds(SvLBoxEntry * pEntry)1149cdf0e10cSrcweir void SfxConfigGroupListBox_Impl::RequestingChilds( SvLBoxEntry *pEntry )
1150cdf0e10cSrcweir /* Beschreibung
1151cdf0e10cSrcweir Ein Basic oder eine Bibliothek werden ge"offnet
1152cdf0e10cSrcweir */
1153cdf0e10cSrcweir {
1154cdf0e10cSrcweir SfxGroupInfo_Impl *pInfo = (SfxGroupInfo_Impl*) pEntry->GetUserData();
1155cdf0e10cSrcweir pInfo->bWasOpened = sal_True;
1156cdf0e10cSrcweir switch ( pInfo->nKind )
1157cdf0e10cSrcweir {
1158cdf0e10cSrcweir case SFX_CFGGROUP_SCRIPTCONTAINER:
1159cdf0e10cSrcweir {
1160cdf0e10cSrcweir if ( !GetChildCount( pEntry ) )
1161cdf0e10cSrcweir {
1162cdf0e10cSrcweir Reference< browse::XBrowseNode > rootNode(
1163cdf0e10cSrcweir reinterpret_cast< browse::XBrowseNode* >( pInfo->pObject ) ) ;
1164cdf0e10cSrcweir
1165cdf0e10cSrcweir try {
1166cdf0e10cSrcweir if ( rootNode->hasChildNodes() )
1167cdf0e10cSrcweir {
1168cdf0e10cSrcweir Sequence< Reference< browse::XBrowseNode > > children =
1169cdf0e10cSrcweir rootNode->getChildNodes();
1170cdf0e10cSrcweir sal_Bool bIsRootNode = sal_False;
1171cdf0e10cSrcweir
1172cdf0e10cSrcweir ::rtl::OUString user = ::rtl::OUString::createFromAscii("user");
1173cdf0e10cSrcweir ::rtl::OUString share = ::rtl::OUString::createFromAscii("share");
1174cdf0e10cSrcweir if ( rootNode->getName().equals(::rtl::OUString::createFromAscii("Root") ))
1175cdf0e10cSrcweir {
1176cdf0e10cSrcweir bIsRootNode = sal_True;
1177cdf0e10cSrcweir }
1178cdf0e10cSrcweir
1179cdf0e10cSrcweir /* To mimic current starbasic behaviour we
1180cdf0e10cSrcweir need to make sure that only the current document
1181cdf0e10cSrcweir is displayed in the config tree. Tests below
1182cdf0e10cSrcweir set the bDisplay flag to sal_False if the current
1183cdf0e10cSrcweir node is a first level child of the Root and is NOT
1184cdf0e10cSrcweir either the current document, user or share */
1185cdf0e10cSrcweir ::rtl::OUString currentDocTitle;
1186cdf0e10cSrcweir Reference< XModel > xDocument( lcl_getScriptableDocument_nothrow( m_xFrame ) );
1187cdf0e10cSrcweir if ( xDocument.is() )
1188cdf0e10cSrcweir {
1189cdf0e10cSrcweir currentDocTitle = ::comphelper::DocumentInfo::getDocumentTitle( xDocument );
1190cdf0e10cSrcweir }
1191cdf0e10cSrcweir
1192cdf0e10cSrcweir sal_Int32 nLen = children.getLength();
1193cdf0e10cSrcweir for ( sal_Int32 n = 0; n < nLen; n++ )
1194cdf0e10cSrcweir {
1195cdf0e10cSrcweir Reference< browse::XBrowseNode >& theChild = children[n];
1196cdf0e10cSrcweir ::rtl::OUString aName( theChild->getName() );
1197cdf0e10cSrcweir sal_Bool bDisplay = sal_True;
1198cdf0e10cSrcweir if ( bIsRootNode )
1199cdf0e10cSrcweir {
1200cdf0e10cSrcweir if ( !( (aName.equals(user) || aName.equals(share) || aName.equals(currentDocTitle) ) ) )
1201cdf0e10cSrcweir bDisplay=sal_False;
1202cdf0e10cSrcweir }
1203cdf0e10cSrcweir if ( children[n].is() && children[n]->getType() != browse::BrowseNodeTypes::SCRIPT && bDisplay )
1204cdf0e10cSrcweir {
1205cdf0e10cSrcweir
1206cdf0e10cSrcweir /*
1207cdf0e10cSrcweir We call acquire on the XBrowseNode so that it does not
1208cdf0e10cSrcweir get autodestructed and become invalid when accessed later.
1209cdf0e10cSrcweir */
1210cdf0e10cSrcweir theChild->acquire();
1211cdf0e10cSrcweir
1212cdf0e10cSrcweir SfxGroupInfo_Impl* pGrpInfo =
1213cdf0e10cSrcweir new SfxGroupInfo_Impl(SFX_CFGGROUP_SCRIPTCONTAINER,
1214cdf0e10cSrcweir 0, static_cast<void *>( theChild.get()));
1215cdf0e10cSrcweir
1216cdf0e10cSrcweir Image aImage = GetImage( theChild, Reference< XComponentContext >(), sal_False, BMP_COLOR_NORMAL );
1217cdf0e10cSrcweir SvLBoxEntry* pNewEntry =
1218cdf0e10cSrcweir InsertEntry( theChild->getName(), pEntry );
1219cdf0e10cSrcweir SetExpandedEntryBmp(pNewEntry, aImage, BMP_COLOR_NORMAL);
1220cdf0e10cSrcweir SetCollapsedEntryBmp(pNewEntry, aImage, BMP_COLOR_NORMAL);
1221cdf0e10cSrcweir aImage = GetImage( theChild, Reference< XComponentContext >(), sal_False, BMP_COLOR_HIGHCONTRAST );
1222cdf0e10cSrcweir SetExpandedEntryBmp(pNewEntry, aImage, BMP_COLOR_HIGHCONTRAST);
1223cdf0e10cSrcweir SetCollapsedEntryBmp(pNewEntry, aImage, BMP_COLOR_HIGHCONTRAST);
1224cdf0e10cSrcweir
1225cdf0e10cSrcweir pNewEntry->SetUserData( pGrpInfo );
1226cdf0e10cSrcweir aArr.Insert( pGrpInfo, aArr.Count() );
1227cdf0e10cSrcweir
1228cdf0e10cSrcweir if ( children[n]->hasChildNodes() )
1229cdf0e10cSrcweir {
1230cdf0e10cSrcweir Sequence< Reference< browse::XBrowseNode > > grandchildren =
1231cdf0e10cSrcweir children[n]->getChildNodes();
1232cdf0e10cSrcweir
1233cdf0e10cSrcweir for ( sal_Int32 m = 0; m < grandchildren.getLength(); m++ )
1234cdf0e10cSrcweir {
1235cdf0e10cSrcweir if ( grandchildren[m]->getType() == browse::BrowseNodeTypes::CONTAINER )
1236cdf0e10cSrcweir {
1237cdf0e10cSrcweir pNewEntry->EnableChildsOnDemand( sal_True );
1238cdf0e10cSrcweir m = grandchildren.getLength();
1239cdf0e10cSrcweir }
1240cdf0e10cSrcweir }
1241cdf0e10cSrcweir }
1242cdf0e10cSrcweir }
1243cdf0e10cSrcweir }
1244cdf0e10cSrcweir }
1245cdf0e10cSrcweir }
1246cdf0e10cSrcweir catch (RuntimeException&) {
1247cdf0e10cSrcweir // do nothing, the entry will not be displayed in the UI
1248cdf0e10cSrcweir }
1249cdf0e10cSrcweir }
1250cdf0e10cSrcweir break;
1251cdf0e10cSrcweir }
1252cdf0e10cSrcweir
1253cdf0e10cSrcweir case SFX_CFGGROUP_STYLES:
1254cdf0e10cSrcweir {
1255cdf0e10cSrcweir if ( !GetChildCount( pEntry ) )
1256cdf0e10cSrcweir {
1257cdf0e10cSrcweir const ::std::vector< SfxStyleInfo_Impl > lStyleFamilies = pStylesInfo->getStyleFamilies();
1258cdf0e10cSrcweir ::std::vector< SfxStyleInfo_Impl >::const_iterator pIt;
1259cdf0e10cSrcweir for ( pIt = lStyleFamilies.begin();
1260cdf0e10cSrcweir pIt != lStyleFamilies.end() ;
1261cdf0e10cSrcweir ++pIt )
1262cdf0e10cSrcweir {
1263cdf0e10cSrcweir SfxStyleInfo_Impl* pFamily = new SfxStyleInfo_Impl(*pIt);
1264cdf0e10cSrcweir SvLBoxEntry* pStyleEntry = InsertEntry( pFamily->sLabel, pEntry );
1265cdf0e10cSrcweir SfxGroupInfo_Impl *pGrpInfo = new SfxGroupInfo_Impl( SFX_CFGGROUP_STYLES, 0, pFamily );
1266cdf0e10cSrcweir aArr.Insert( pGrpInfo, aArr.Count() );
1267cdf0e10cSrcweir pStyleEntry->SetUserData( pGrpInfo );
1268cdf0e10cSrcweir pStyleEntry->EnableChildsOnDemand( sal_False );
1269cdf0e10cSrcweir }
1270cdf0e10cSrcweir }
1271cdf0e10cSrcweir break;
1272cdf0e10cSrcweir }
1273cdf0e10cSrcweir
1274cdf0e10cSrcweir default:
1275cdf0e10cSrcweir DBG_ERROR( "Falscher Gruppentyp!" );
1276cdf0e10cSrcweir break;
1277cdf0e10cSrcweir }
1278cdf0e10cSrcweir }
1279cdf0e10cSrcweir
SelectMacro(const SfxMacroInfoItem * pItem)1280cdf0e10cSrcweir void SfxConfigGroupListBox_Impl::SelectMacro( const SfxMacroInfoItem *pItem )
1281cdf0e10cSrcweir {
1282cdf0e10cSrcweir SelectMacro( pItem->GetBasicManager()->GetName(),
1283cdf0e10cSrcweir pItem->GetQualifiedName() );
1284cdf0e10cSrcweir }
1285cdf0e10cSrcweir
SelectMacro(const String & rBasic,const String & rMacro)1286cdf0e10cSrcweir void SfxConfigGroupListBox_Impl::SelectMacro( const String& rBasic,
1287cdf0e10cSrcweir const String& rMacro )
1288cdf0e10cSrcweir {
1289cdf0e10cSrcweir String aBasicName( rBasic );
1290cdf0e10cSrcweir aBasicName += ' ';
1291cdf0e10cSrcweir aBasicName += pImp->m_sMacros;
1292cdf0e10cSrcweir String aLib, aModule, aMethod;
1293cdf0e10cSrcweir sal_uInt16 nCount = rMacro.GetTokenCount('.');
1294cdf0e10cSrcweir aMethod = rMacro.GetToken( nCount-1, '.' );
1295cdf0e10cSrcweir if ( nCount > 2 )
1296cdf0e10cSrcweir {
1297cdf0e10cSrcweir aLib = rMacro.GetToken( 0, '.' );
1298cdf0e10cSrcweir aModule = rMacro.GetToken( nCount-2, '.' );
1299cdf0e10cSrcweir }
1300cdf0e10cSrcweir
1301cdf0e10cSrcweir SvLBoxEntry *pEntry = FirstChild(0);
1302cdf0e10cSrcweir while ( pEntry )
1303cdf0e10cSrcweir {
1304cdf0e10cSrcweir String aEntryBas = GetEntryText( pEntry );
1305cdf0e10cSrcweir if ( aEntryBas == aBasicName )
1306cdf0e10cSrcweir {
1307cdf0e10cSrcweir Expand( pEntry );
1308cdf0e10cSrcweir SvLBoxEntry *pLib = FirstChild( pEntry );
1309cdf0e10cSrcweir while ( pLib )
1310cdf0e10cSrcweir {
1311cdf0e10cSrcweir String aEntryLib = GetEntryText( pLib );
1312cdf0e10cSrcweir if ( aEntryLib == aLib )
1313cdf0e10cSrcweir {
1314cdf0e10cSrcweir Expand( pLib );
1315cdf0e10cSrcweir SvLBoxEntry *pMod = FirstChild( pLib );
1316cdf0e10cSrcweir while ( pMod )
1317cdf0e10cSrcweir {
1318cdf0e10cSrcweir String aEntryMod = GetEntryText( pMod );
1319cdf0e10cSrcweir if ( aEntryMod == aModule )
1320cdf0e10cSrcweir {
1321cdf0e10cSrcweir Expand( pMod );
1322cdf0e10cSrcweir MakeVisible( pMod );
1323cdf0e10cSrcweir Select( pMod );
1324cdf0e10cSrcweir SvLBoxEntry *pMethod = pFunctionListBox->First();
1325cdf0e10cSrcweir while ( pMethod )
1326cdf0e10cSrcweir {
1327cdf0e10cSrcweir String aEntryMethod = GetEntryText( pMethod );
1328cdf0e10cSrcweir if ( aEntryMethod == aMethod )
1329cdf0e10cSrcweir {
1330cdf0e10cSrcweir pFunctionListBox->Select( pMethod );
1331cdf0e10cSrcweir pFunctionListBox->MakeVisible( pMethod );
1332cdf0e10cSrcweir return;
1333cdf0e10cSrcweir }
1334cdf0e10cSrcweir pMethod = pFunctionListBox->Next( pMethod );
1335cdf0e10cSrcweir }
1336cdf0e10cSrcweir }
1337cdf0e10cSrcweir pMod = NextSibling( pMod );
1338cdf0e10cSrcweir }
1339cdf0e10cSrcweir }
1340cdf0e10cSrcweir pLib = NextSibling( pLib );
1341cdf0e10cSrcweir }
1342cdf0e10cSrcweir }
1343cdf0e10cSrcweir pEntry = NextSibling( pEntry );
1344cdf0e10cSrcweir }
1345cdf0e10cSrcweir }
1346