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_sfx2.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include "newhelp.hxx"
28*b1cdbd2cSJim Jagielski #include <sfx2/sfxuno.hxx>
29*b1cdbd2cSJim Jagielski #include "sfx2/sfxresid.hxx"
30*b1cdbd2cSJim Jagielski #include "helpinterceptor.hxx"
31*b1cdbd2cSJim Jagielski #include "helper.hxx"
32*b1cdbd2cSJim Jagielski #include <sfx2/msgpool.hxx>
33*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
34*b1cdbd2cSJim Jagielski #include "sfxtypes.hxx"
35*b1cdbd2cSJim Jagielski #include "panelist.hxx"
36*b1cdbd2cSJim Jagielski #include "sfx2/imgmgr.hxx"
37*b1cdbd2cSJim Jagielski #include "srchdlg.hxx"
38*b1cdbd2cSJim Jagielski #include "sfx2/sfxhelp.hxx"
39*b1cdbd2cSJim Jagielski
40*b1cdbd2cSJim Jagielski #include "app.hrc"
41*b1cdbd2cSJim Jagielski #include "newhelp.hrc"
42*b1cdbd2cSJim Jagielski #include "helpid.hrc"
43*b1cdbd2cSJim Jagielski
44*b1cdbd2cSJim Jagielski #include <hash_map>
45*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
46*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
47*b1cdbd2cSJim Jagielski #include <comphelper/configurationhelper.hxx>
48*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XModifiable.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XComponentLoader.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XCloseable.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/util/CloseVetoException.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XComponent.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/DisposedException.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/PosSize.hpp>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XWindow.hpp>
57*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/Property.hpp>
58*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
59*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySetInfo.hpp>
60*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexAccess.hpp>
61*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XTitle.hpp>
62*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XLayoutManager.hpp>
63*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/DispatchResultState.hpp>
64*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XController.hpp>
65*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatch.hpp>
66*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatchProvider.hpp>
67*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
68*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFrame.hpp>
69*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_TEXT_XBREAKITERATOR_HPP_
70*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/XBreakIterator.hpp>
71*b1cdbd2cSJim Jagielski #endif
72*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/WordType.hpp>
73*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XComponent.hpp>
74*b1cdbd2cSJim Jagielski #include <com/sun/star/style/XStyle.hpp>
75*b1cdbd2cSJim Jagielski #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
76*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XText.hpp>
77*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextCursor.hpp>
78*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextDocument.hpp>
79*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextRange.hpp>
80*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextViewCursor.hpp>
81*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextViewCursorSupplier.hpp>
82*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/CommandAbortedException.hpp>
83*b1cdbd2cSJim Jagielski #include <com/sun/star/util/URL.hpp>
84*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XSearchable.hpp>
85*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XSearchDescriptor.hpp>
86*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XURLTransformer.hpp>
87*b1cdbd2cSJim Jagielski #include <com/sun/star/view/XSelectionSupplier.hpp>
88*b1cdbd2cSJim Jagielski #include <com/sun/star/view/XViewSettingsSupplier.hpp>
89*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/XDockingAreaAcceptor.hpp>
90*b1cdbd2cSJim Jagielski #include <svtools/helpopt.hxx>
91*b1cdbd2cSJim Jagielski #include <unotools/historyoptions.hxx>
92*b1cdbd2cSJim Jagielski #include <svtools/menuoptions.hxx>
93*b1cdbd2cSJim Jagielski #include <unotools/pathoptions.hxx>
94*b1cdbd2cSJim Jagielski #include <unotools/viewoptions.hxx>
95*b1cdbd2cSJim Jagielski #include <svtools/svtdata.hxx>
96*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
97*b1cdbd2cSJim Jagielski #include <tools/cachestr.hxx>
98*b1cdbd2cSJim Jagielski #include <unotools/streamhelper.hxx>
99*b1cdbd2cSJim Jagielski #include <svtools/imagemgr.hxx>
100*b1cdbd2cSJim Jagielski #include <svtools/miscopt.hxx>
101*b1cdbd2cSJim Jagielski #include <svtools/imgdef.hxx>
102*b1cdbd2cSJim Jagielski #include <vcl/unohelp.hxx>
103*b1cdbd2cSJim Jagielski #include <vcl/i18nhelp.hxx>
104*b1cdbd2cSJim Jagielski
105*b1cdbd2cSJim Jagielski #include <ucbhelper/content.hxx>
106*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
107*b1cdbd2cSJim Jagielski #include <vcl/waitobj.hxx>
108*b1cdbd2cSJim Jagielski #include <unotools/ucbhelper.hxx>
109*b1cdbd2cSJim Jagielski
110*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
111*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
112*b1cdbd2cSJim Jagielski #include <sfx2/docfac.hxx>
113*b1cdbd2cSJim Jagielski
114*b1cdbd2cSJim Jagielski using namespace ::ucbhelper;
115*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::ucb;
116*b1cdbd2cSJim Jagielski
117*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
118*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
119*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
120*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::frame;
121*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::i18n;
122*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
123*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::style;
124*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::text;
125*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
126*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
127*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::view;
128*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::ui;
129*b1cdbd2cSJim Jagielski
130*b1cdbd2cSJim Jagielski using namespace ::comphelper;
131*b1cdbd2cSJim Jagielski
132*b1cdbd2cSJim Jagielski extern void AppendConfigToken_Impl( String& rURL, sal_Bool bQuestionMark ); // sfxhelp.cxx
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski // defines ---------------------------------------------------------------
135*b1cdbd2cSJim Jagielski
136*b1cdbd2cSJim Jagielski #define SPLITSET_ID 0
137*b1cdbd2cSJim Jagielski #define COLSET_ID 1
138*b1cdbd2cSJim Jagielski #define INDEXWIN_ID 2
139*b1cdbd2cSJim Jagielski #define TEXTWIN_ID 3
140*b1cdbd2cSJim Jagielski
141*b1cdbd2cSJim Jagielski #define TOOLBOX_OFFSET 3
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski #define TBI_INDEX 1001
144*b1cdbd2cSJim Jagielski #define TBI_BACKWARD 1002
145*b1cdbd2cSJim Jagielski #define TBI_FORWARD 1003
146*b1cdbd2cSJim Jagielski #define TBI_START 1004
147*b1cdbd2cSJim Jagielski #define TBI_PRINT 1005
148*b1cdbd2cSJim Jagielski #define TBI_COPY 1006
149*b1cdbd2cSJim Jagielski #define TBI_BOOKMARKS 1007
150*b1cdbd2cSJim Jagielski #define TBI_SEARCHDIALOG 1008
151*b1cdbd2cSJim Jagielski #define TBI_SOURCEVIEW 1009
152*b1cdbd2cSJim Jagielski #define TBI_SELECTIONMODE 1010
153*b1cdbd2cSJim Jagielski #define TBI_ONSTARTUP 1011
154*b1cdbd2cSJim Jagielski
155*b1cdbd2cSJim Jagielski #define CONFIGNAME_HELPWIN DEFINE_CONST_UNICODE("OfficeHelp")
156*b1cdbd2cSJim Jagielski #define CONFIGNAME_INDEXWIN DEFINE_CONST_UNICODE("OfficeHelpIndex")
157*b1cdbd2cSJim Jagielski #define CONFIGNAME_SEARCHPAGE DEFINE_CONST_UNICODE("OfficeHelpSearch")
158*b1cdbd2cSJim Jagielski #define IMAGE_URL DEFINE_CONST_UNICODE("private:factory/")
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski #define PROPERTY_KEYWORDLIST DEFINE_CONST_OUSTRING("KeywordList")
161*b1cdbd2cSJim Jagielski #define PROPERTY_KEYWORDREF DEFINE_CONST_OUSTRING("KeywordRef")
162*b1cdbd2cSJim Jagielski #define PROPERTY_ANCHORREF DEFINE_CONST_OUSTRING("KeywordAnchorForRef")
163*b1cdbd2cSJim Jagielski #define PROPERTY_TITLEREF DEFINE_CONST_OUSTRING("KeywordTitleForRef")
164*b1cdbd2cSJim Jagielski #define PROPERTY_TITLE DEFINE_CONST_OUSTRING("Title")
165*b1cdbd2cSJim Jagielski #define HELP_URL DEFINE_CONST_OUSTRING("vnd.sun.star.help://")
166*b1cdbd2cSJim Jagielski #define HELP_SEARCH_TAG DEFINE_CONST_OUSTRING("/?Query=")
167*b1cdbd2cSJim Jagielski #define USERITEM_NAME DEFINE_CONST_OUSTRING("UserItem")
168*b1cdbd2cSJim Jagielski
169*b1cdbd2cSJim Jagielski #define PACKAGE_SETUP DEFINE_CONST_OUSTRING("/org.openoffice.Setup")
170*b1cdbd2cSJim Jagielski #define PATH_OFFICE_FACTORIES DEFINE_CONST_OUSTRING("Office/Factories/")
171*b1cdbd2cSJim Jagielski #define KEY_HELP_ON_OPEN DEFINE_CONST_OUSTRING("ooSetupFactoryHelpOnOpen")
172*b1cdbd2cSJim Jagielski #define KEY_UI_NAME DEFINE_CONST_OUSTRING("ooSetupFactoryUIName")
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski #define PARSE_URL( aURL ) \
175*b1cdbd2cSJim Jagielski Reference < XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance( \
176*b1cdbd2cSJim Jagielski DEFINE_CONST_UNICODE("com.sun.star.util.URLTransformer" )), UNO_QUERY ); \
177*b1cdbd2cSJim Jagielski xTrans->parseStrict( aURL )
178*b1cdbd2cSJim Jagielski
179*b1cdbd2cSJim Jagielski //.........................................................................
180*b1cdbd2cSJim Jagielski namespace sfx2
181*b1cdbd2cSJim Jagielski {
182*b1cdbd2cSJim Jagielski //.........................................................................
183*b1cdbd2cSJim Jagielski
HandleTaskPaneList(Window * pWindow,sal_Bool bAddToList)184*b1cdbd2cSJim Jagielski void HandleTaskPaneList( Window* pWindow, sal_Bool bAddToList )
185*b1cdbd2cSJim Jagielski {
186*b1cdbd2cSJim Jagielski Window* pParent = pWindow->GetParent();
187*b1cdbd2cSJim Jagielski DBG_ASSERT( pParent, "HandleTaskPaneList(): every window here should have a parent" );
188*b1cdbd2cSJim Jagielski
189*b1cdbd2cSJim Jagielski SystemWindow* pSysWin = pParent->GetSystemWindow();
190*b1cdbd2cSJim Jagielski if( pSysWin )
191*b1cdbd2cSJim Jagielski {
192*b1cdbd2cSJim Jagielski TaskPaneList* pTaskPaneList = pSysWin->GetTaskPaneList();
193*b1cdbd2cSJim Jagielski if( pTaskPaneList )
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski if( bAddToList )
196*b1cdbd2cSJim Jagielski pTaskPaneList->AddWindow( pWindow );
197*b1cdbd2cSJim Jagielski else
198*b1cdbd2cSJim Jagielski pTaskPaneList->RemoveWindow( pWindow );
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski }
201*b1cdbd2cSJim Jagielski }
202*b1cdbd2cSJim Jagielski
203*b1cdbd2cSJim Jagielski /** Prepare a search string for searching or selecting.
204*b1cdbd2cSJim Jagielski For searching every search word needs the postfix '*' and the delimiter ' ' if necessary.
205*b1cdbd2cSJim Jagielski For selecting the delimiter '|' is required to search with regular expressions.
206*b1cdbd2cSJim Jagielski Samples:
207*b1cdbd2cSJim Jagielski search string | output for searching | output for selecting
208*b1cdbd2cSJim Jagielski -----------------------------------------------------------
209*b1cdbd2cSJim Jagielski "text" | "text*" | "text"
210*b1cdbd2cSJim Jagielski "text*" | "text*" | "text"
211*b1cdbd2cSJim Jagielski "text menu" | "text* menu*" | "text|menu"
212*b1cdbd2cSJim Jagielski */
PrepareSearchString(const String & rSearchString,Reference<XBreakIterator> xBreak,bool bForSearch)213*b1cdbd2cSJim Jagielski String PrepareSearchString( const String& rSearchString,
214*b1cdbd2cSJim Jagielski Reference< XBreakIterator > xBreak, bool bForSearch )
215*b1cdbd2cSJim Jagielski {
216*b1cdbd2cSJim Jagielski String sSearchStr;
217*b1cdbd2cSJim Jagielski sal_Int32 nStartPos = 0;
218*b1cdbd2cSJim Jagielski const Locale aLocale = Application::GetSettings().GetUILocale();
219*b1cdbd2cSJim Jagielski Boundary aBoundary = xBreak->getWordBoundary(
220*b1cdbd2cSJim Jagielski rSearchString, nStartPos, aLocale, WordType::ANYWORD_IGNOREWHITESPACES, sal_True );
221*b1cdbd2cSJim Jagielski
222*b1cdbd2cSJim Jagielski while ( aBoundary.startPos != aBoundary.endPos )
223*b1cdbd2cSJim Jagielski {
224*b1cdbd2cSJim Jagielski nStartPos = aBoundary.endPos;
225*b1cdbd2cSJim Jagielski String sSearchToken( rSearchString.Copy(
226*b1cdbd2cSJim Jagielski (sal_uInt16)aBoundary.startPos, (sal_uInt16)aBoundary.endPos - (sal_uInt16)aBoundary.startPos ) );
227*b1cdbd2cSJim Jagielski if ( sSearchToken.Len() > 0 && ( sSearchToken.Len() > 1 || sSearchToken.GetChar(0) != '.' ) )
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski if ( bForSearch && sSearchToken.GetChar( sSearchToken.Len() - 1 ) != '*' )
230*b1cdbd2cSJim Jagielski sSearchToken += '*';
231*b1cdbd2cSJim Jagielski
232*b1cdbd2cSJim Jagielski if ( sSearchToken.Len() > 1 ||
233*b1cdbd2cSJim Jagielski ( sSearchToken.Len() > 0 && sSearchToken.GetChar( 0 ) != '*' ) )
234*b1cdbd2cSJim Jagielski {
235*b1cdbd2cSJim Jagielski if ( sSearchStr.Len() > 0 )
236*b1cdbd2cSJim Jagielski {
237*b1cdbd2cSJim Jagielski if ( bForSearch )
238*b1cdbd2cSJim Jagielski sSearchStr += ' ';
239*b1cdbd2cSJim Jagielski else
240*b1cdbd2cSJim Jagielski sSearchStr += '|';
241*b1cdbd2cSJim Jagielski }
242*b1cdbd2cSJim Jagielski sSearchStr += sSearchToken;
243*b1cdbd2cSJim Jagielski }
244*b1cdbd2cSJim Jagielski }
245*b1cdbd2cSJim Jagielski aBoundary = xBreak->nextWord( rSearchString, nStartPos,
246*b1cdbd2cSJim Jagielski aLocale, WordType::ANYWORD_IGNOREWHITESPACES );
247*b1cdbd2cSJim Jagielski }
248*b1cdbd2cSJim Jagielski
249*b1cdbd2cSJim Jagielski return sSearchStr;
250*b1cdbd2cSJim Jagielski }
251*b1cdbd2cSJim Jagielski //.........................................................................
252*b1cdbd2cSJim Jagielski // namespace sfx2
253*b1cdbd2cSJim Jagielski }
254*b1cdbd2cSJim Jagielski //.........................................................................
255*b1cdbd2cSJim Jagielski
256*b1cdbd2cSJim Jagielski // struct IndexEntry_Impl ------------------------------------------------
257*b1cdbd2cSJim Jagielski
258*b1cdbd2cSJim Jagielski struct IndexEntry_Impl
259*b1cdbd2cSJim Jagielski {
260*b1cdbd2cSJim Jagielski sal_Bool m_bSubEntry;
261*b1cdbd2cSJim Jagielski String m_aURL;
262*b1cdbd2cSJim Jagielski
IndexEntry_ImplIndexEntry_Impl263*b1cdbd2cSJim Jagielski IndexEntry_Impl( const String& rURL, sal_Bool bSubEntry ) :
264*b1cdbd2cSJim Jagielski m_bSubEntry( bSubEntry ), m_aURL( rURL ) {}
265*b1cdbd2cSJim Jagielski };
266*b1cdbd2cSJim Jagielski
267*b1cdbd2cSJim Jagielski #define NEW_ENTRY( url, bool ) \
268*b1cdbd2cSJim Jagielski (void*)(sal_uIntPtr)( new IndexEntry_Impl( url, bool ) )
269*b1cdbd2cSJim Jagielski
270*b1cdbd2cSJim Jagielski // struct ContentEntry_Impl ----------------------------------------------
271*b1cdbd2cSJim Jagielski
272*b1cdbd2cSJim Jagielski struct ContentEntry_Impl
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski String aURL;
275*b1cdbd2cSJim Jagielski sal_Bool bIsFolder;
276*b1cdbd2cSJim Jagielski
ContentEntry_ImplContentEntry_Impl277*b1cdbd2cSJim Jagielski ContentEntry_Impl( const String& rURL, sal_Bool bFolder ) :
278*b1cdbd2cSJim Jagielski aURL( rURL ), bIsFolder( bFolder ) {}
279*b1cdbd2cSJim Jagielski };
280*b1cdbd2cSJim Jagielski
281*b1cdbd2cSJim Jagielski // ContentListBox_Impl ---------------------------------------------------
282*b1cdbd2cSJim Jagielski
ContentListBox_Impl(Window * pParent,const ResId & rResId)283*b1cdbd2cSJim Jagielski ContentListBox_Impl::ContentListBox_Impl( Window* pParent, const ResId& rResId ) :
284*b1cdbd2cSJim Jagielski
285*b1cdbd2cSJim Jagielski SvTreeListBox( pParent, rResId ),
286*b1cdbd2cSJim Jagielski
287*b1cdbd2cSJim Jagielski aOpenBookImage ( SfxResId( IMG_HELP_CONTENT_BOOK_OPEN ) ),
288*b1cdbd2cSJim Jagielski aClosedBookImage ( SfxResId( IMG_HELP_CONTENT_BOOK_CLOSED ) ),
289*b1cdbd2cSJim Jagielski aDocumentImage ( SfxResId( IMG_HELP_CONTENT_DOC ) )
290*b1cdbd2cSJim Jagielski
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski if ( GetSettings().GetStyleSettings().GetHighContrastMode() )
293*b1cdbd2cSJim Jagielski {
294*b1cdbd2cSJim Jagielski aOpenBookImage = Image( SfxResId( IMG_HELP_CONTENT_BOOK_OPEN_HC ) );
295*b1cdbd2cSJim Jagielski aClosedBookImage = Image( SfxResId( IMG_HELP_CONTENT_BOOK_CLOSED_HC ) );
296*b1cdbd2cSJim Jagielski aDocumentImage = Image( SfxResId( IMG_HELP_CONTENT_DOC_HC ) );
297*b1cdbd2cSJim Jagielski }
298*b1cdbd2cSJim Jagielski
299*b1cdbd2cSJim Jagielski SetStyle( GetStyle() | WB_HIDESELECTION | WB_HSCROLL );
300*b1cdbd2cSJim Jagielski
301*b1cdbd2cSJim Jagielski SetEntryHeight( 16 );
302*b1cdbd2cSJim Jagielski SetSelectionMode( SINGLE_SELECTION );
303*b1cdbd2cSJim Jagielski SetSpaceBetweenEntries( 2 );
304*b1cdbd2cSJim Jagielski SetNodeBitmaps( aClosedBookImage, aOpenBookImage );
305*b1cdbd2cSJim Jagielski
306*b1cdbd2cSJim Jagielski SetSublistOpenWithReturn();
307*b1cdbd2cSJim Jagielski SetSublistOpenWithLeftRight();
308*b1cdbd2cSJim Jagielski
309*b1cdbd2cSJim Jagielski InitRoot();
310*b1cdbd2cSJim Jagielski }
311*b1cdbd2cSJim Jagielski
312*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
313*b1cdbd2cSJim Jagielski
~ContentListBox_Impl()314*b1cdbd2cSJim Jagielski ContentListBox_Impl::~ContentListBox_Impl()
315*b1cdbd2cSJim Jagielski {
316*b1cdbd2cSJim Jagielski sal_uInt16 nPos = 0;
317*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = GetEntry( nPos++ );
318*b1cdbd2cSJim Jagielski while ( pEntry )
319*b1cdbd2cSJim Jagielski {
320*b1cdbd2cSJim Jagielski ::rtl::OUString aTemp( GetEntryText( pEntry ) );
321*b1cdbd2cSJim Jagielski ClearChildren( pEntry );
322*b1cdbd2cSJim Jagielski delete (ContentEntry_Impl*)pEntry->GetUserData();
323*b1cdbd2cSJim Jagielski pEntry = GetEntry( nPos++ );
324*b1cdbd2cSJim Jagielski }
325*b1cdbd2cSJim Jagielski }
326*b1cdbd2cSJim Jagielski
327*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
328*b1cdbd2cSJim Jagielski
InitRoot()329*b1cdbd2cSJim Jagielski void ContentListBox_Impl::InitRoot()
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski String aHelpTreeviewURL( DEFINE_CONST_UNICODE("vnd.sun.star.hier://com.sun.star.help.TreeView/") );
332*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::rtl::OUString > aList =
333*b1cdbd2cSJim Jagielski SfxContentHelper::GetHelpTreeViewContents( aHelpTreeviewURL );
334*b1cdbd2cSJim Jagielski
335*b1cdbd2cSJim Jagielski const ::rtl::OUString* pEntries = aList.getConstArray();
336*b1cdbd2cSJim Jagielski sal_uInt32 i, nCount = aList.getLength();
337*b1cdbd2cSJim Jagielski for ( i = 0; i < nCount; ++i )
338*b1cdbd2cSJim Jagielski {
339*b1cdbd2cSJim Jagielski String aRow( pEntries[i] );
340*b1cdbd2cSJim Jagielski String aTitle, aURL;
341*b1cdbd2cSJim Jagielski xub_StrLen nIdx = 0;
342*b1cdbd2cSJim Jagielski aTitle = aRow.GetToken( 0, '\t', nIdx );
343*b1cdbd2cSJim Jagielski aURL = aRow.GetToken( 0, '\t', nIdx );
344*b1cdbd2cSJim Jagielski sal_Unicode cFolder = aRow.GetToken( 0, '\t', nIdx ).GetChar(0);
345*b1cdbd2cSJim Jagielski sal_Bool bIsFolder = ( '1' == cFolder );
346*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = InsertEntry( aTitle, aOpenBookImage, aClosedBookImage, NULL, sal_True );
347*b1cdbd2cSJim Jagielski if ( bIsFolder )
348*b1cdbd2cSJim Jagielski pEntry->SetUserData( new ContentEntry_Impl( aURL, sal_True ) );
349*b1cdbd2cSJim Jagielski }
350*b1cdbd2cSJim Jagielski }
351*b1cdbd2cSJim Jagielski
352*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
353*b1cdbd2cSJim Jagielski
ClearChildren(SvLBoxEntry * pParent)354*b1cdbd2cSJim Jagielski void ContentListBox_Impl::ClearChildren( SvLBoxEntry* pParent )
355*b1cdbd2cSJim Jagielski {
356*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = FirstChild( pParent );
357*b1cdbd2cSJim Jagielski while ( pEntry )
358*b1cdbd2cSJim Jagielski {
359*b1cdbd2cSJim Jagielski ::rtl::OUString aTemp( GetEntryText( pEntry ) );
360*b1cdbd2cSJim Jagielski ClearChildren( pEntry );
361*b1cdbd2cSJim Jagielski delete (ContentEntry_Impl*)pEntry->GetUserData();
362*b1cdbd2cSJim Jagielski pEntry = NextSibling( pEntry );
363*b1cdbd2cSJim Jagielski }
364*b1cdbd2cSJim Jagielski }
365*b1cdbd2cSJim Jagielski
366*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
367*b1cdbd2cSJim Jagielski
RequestingChilds(SvLBoxEntry * pParent)368*b1cdbd2cSJim Jagielski void ContentListBox_Impl::RequestingChilds( SvLBoxEntry* pParent )
369*b1cdbd2cSJim Jagielski {
370*b1cdbd2cSJim Jagielski try
371*b1cdbd2cSJim Jagielski {
372*b1cdbd2cSJim Jagielski if ( !pParent->HasChilds() )
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski if ( pParent->GetUserData() )
375*b1cdbd2cSJim Jagielski {
376*b1cdbd2cSJim Jagielski String aTmpURL( ( (ContentEntry_Impl*)pParent->GetUserData() )->aURL );
377*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::rtl::OUString > aList =
378*b1cdbd2cSJim Jagielski SfxContentHelper::GetHelpTreeViewContents( aTmpURL );
379*b1cdbd2cSJim Jagielski
380*b1cdbd2cSJim Jagielski const ::rtl::OUString* pEntries = aList.getConstArray();
381*b1cdbd2cSJim Jagielski sal_uInt32 i, nCount = aList.getLength();
382*b1cdbd2cSJim Jagielski for ( i = 0; i < nCount; ++i )
383*b1cdbd2cSJim Jagielski {
384*b1cdbd2cSJim Jagielski String aRow( pEntries[i] );
385*b1cdbd2cSJim Jagielski String aTitle, aURL;
386*b1cdbd2cSJim Jagielski xub_StrLen nIdx = 0;
387*b1cdbd2cSJim Jagielski aTitle = aRow.GetToken( 0, '\t', nIdx );
388*b1cdbd2cSJim Jagielski aURL = aRow.GetToken( 0, '\t', nIdx );
389*b1cdbd2cSJim Jagielski sal_Unicode cFolder = aRow.GetToken( 0, '\t', nIdx ).GetChar(0);
390*b1cdbd2cSJim Jagielski sal_Bool bIsFolder = ( '1' == cFolder );
391*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = NULL;
392*b1cdbd2cSJim Jagielski if ( bIsFolder )
393*b1cdbd2cSJim Jagielski {
394*b1cdbd2cSJim Jagielski pEntry = InsertEntry( aTitle, aOpenBookImage, aClosedBookImage, pParent, sal_True );
395*b1cdbd2cSJim Jagielski pEntry->SetUserData( new ContentEntry_Impl( aURL, sal_True ) );
396*b1cdbd2cSJim Jagielski }
397*b1cdbd2cSJim Jagielski else
398*b1cdbd2cSJim Jagielski {
399*b1cdbd2cSJim Jagielski pEntry = InsertEntry( aTitle, aDocumentImage, aDocumentImage, pParent );
400*b1cdbd2cSJim Jagielski Any aAny( ::utl::UCBContentHelper::GetProperty( aURL, String(RTL_CONSTASCII_USTRINGPARAM("TargetURL" ) ) ) );
401*b1cdbd2cSJim Jagielski rtl::OUString aTargetURL;
402*b1cdbd2cSJim Jagielski if ( aAny >>= aTargetURL )
403*b1cdbd2cSJim Jagielski pEntry->SetUserData( new ContentEntry_Impl( aTargetURL, sal_False ) );
404*b1cdbd2cSJim Jagielski }
405*b1cdbd2cSJim Jagielski }
406*b1cdbd2cSJim Jagielski }
407*b1cdbd2cSJim Jagielski }
408*b1cdbd2cSJim Jagielski }
409*b1cdbd2cSJim Jagielski catch( Exception& )
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski DBG_ERROR( "ContentListBox_Impl::RequestingChilds(): unexpected exception" );
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski }
414*b1cdbd2cSJim Jagielski
415*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
416*b1cdbd2cSJim Jagielski
Notify(NotifyEvent & rNEvt)417*b1cdbd2cSJim Jagielski long ContentListBox_Impl::Notify( NotifyEvent& rNEvt )
418*b1cdbd2cSJim Jagielski {
419*b1cdbd2cSJim Jagielski sal_Bool bHandled = sal_False;
420*b1cdbd2cSJim Jagielski if ( rNEvt.GetType() == EVENT_KEYINPUT &&
421*b1cdbd2cSJim Jagielski KEY_RETURN == rNEvt.GetKeyEvent()->GetKeyCode().GetCode() )
422*b1cdbd2cSJim Jagielski {
423*b1cdbd2cSJim Jagielski GetDoubleClickHdl().Call( NULL );
424*b1cdbd2cSJim Jagielski bHandled = sal_True;
425*b1cdbd2cSJim Jagielski }
426*b1cdbd2cSJim Jagielski
427*b1cdbd2cSJim Jagielski return bHandled ? 1 : SvTreeListBox::Notify( rNEvt );
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski
430*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
431*b1cdbd2cSJim Jagielski
GetSelectEntry() const432*b1cdbd2cSJim Jagielski String ContentListBox_Impl::GetSelectEntry() const
433*b1cdbd2cSJim Jagielski {
434*b1cdbd2cSJim Jagielski String aRet;
435*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = FirstSelected();
436*b1cdbd2cSJim Jagielski if ( pEntry && !( (ContentEntry_Impl*)pEntry->GetUserData() )->bIsFolder )
437*b1cdbd2cSJim Jagielski aRet = ( (ContentEntry_Impl*)pEntry->GetUserData() )->aURL;
438*b1cdbd2cSJim Jagielski return aRet;
439*b1cdbd2cSJim Jagielski }
440*b1cdbd2cSJim Jagielski
441*b1cdbd2cSJim Jagielski // class HelpTabPage_Impl ------------------------------------------------
442*b1cdbd2cSJim Jagielski
HelpTabPage_Impl(Window * pParent,SfxHelpIndexWindow_Impl * _pIdxWin,const ResId & rResId)443*b1cdbd2cSJim Jagielski HelpTabPage_Impl::HelpTabPage_Impl(
444*b1cdbd2cSJim Jagielski Window* pParent, SfxHelpIndexWindow_Impl* _pIdxWin, const ResId& rResId ) :
445*b1cdbd2cSJim Jagielski
446*b1cdbd2cSJim Jagielski TabPage( pParent, rResId ),
447*b1cdbd2cSJim Jagielski
448*b1cdbd2cSJim Jagielski m_pIdxWin( _pIdxWin )
449*b1cdbd2cSJim Jagielski
450*b1cdbd2cSJim Jagielski {
451*b1cdbd2cSJim Jagielski }
452*b1cdbd2cSJim Jagielski
453*b1cdbd2cSJim Jagielski // class ContentTabPage_Impl ---------------------------------------------
454*b1cdbd2cSJim Jagielski
ContentTabPage_Impl(Window * pParent,SfxHelpIndexWindow_Impl * _pIdxWin)455*b1cdbd2cSJim Jagielski ContentTabPage_Impl::ContentTabPage_Impl( Window* pParent, SfxHelpIndexWindow_Impl* _pIdxWin ) :
456*b1cdbd2cSJim Jagielski
457*b1cdbd2cSJim Jagielski HelpTabPage_Impl( pParent, _pIdxWin, SfxResId( TP_HELP_CONTENT ) ),
458*b1cdbd2cSJim Jagielski
459*b1cdbd2cSJim Jagielski aContentBox( this, SfxResId( LB_CONTENTS ) )
460*b1cdbd2cSJim Jagielski
461*b1cdbd2cSJim Jagielski {
462*b1cdbd2cSJim Jagielski FreeResource();
463*b1cdbd2cSJim Jagielski
464*b1cdbd2cSJim Jagielski aContentBox.Show();
465*b1cdbd2cSJim Jagielski }
466*b1cdbd2cSJim Jagielski
467*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
468*b1cdbd2cSJim Jagielski
Resize()469*b1cdbd2cSJim Jagielski void ContentTabPage_Impl::Resize()
470*b1cdbd2cSJim Jagielski {
471*b1cdbd2cSJim Jagielski Size aSize = GetOutputSizePixel();
472*b1cdbd2cSJim Jagielski aSize.Width() -= 8;
473*b1cdbd2cSJim Jagielski aSize.Height() -= 8;
474*b1cdbd2cSJim Jagielski aContentBox.SetPosSizePixel( Point( 4, 4 ), aSize );
475*b1cdbd2cSJim Jagielski }
476*b1cdbd2cSJim Jagielski
477*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
478*b1cdbd2cSJim Jagielski
ActivatePage()479*b1cdbd2cSJim Jagielski void ContentTabPage_Impl::ActivatePage()
480*b1cdbd2cSJim Jagielski {
481*b1cdbd2cSJim Jagielski if ( !m_pIdxWin->WasCursorLeftOrRight() )
482*b1cdbd2cSJim Jagielski SetFocusOnBox();
483*b1cdbd2cSJim Jagielski }
484*b1cdbd2cSJim Jagielski
485*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
486*b1cdbd2cSJim Jagielski
GetLastFocusControl()487*b1cdbd2cSJim Jagielski Control* ContentTabPage_Impl::GetLastFocusControl()
488*b1cdbd2cSJim Jagielski {
489*b1cdbd2cSJim Jagielski return &aContentBox;
490*b1cdbd2cSJim Jagielski }
491*b1cdbd2cSJim Jagielski
492*b1cdbd2cSJim Jagielski // class IndexBox_Impl ---------------------------------------------------
493*b1cdbd2cSJim Jagielski
IndexBox_Impl(Window * pParent,const ResId & rResId)494*b1cdbd2cSJim Jagielski IndexBox_Impl::IndexBox_Impl( Window* pParent, const ResId& rResId ) :
495*b1cdbd2cSJim Jagielski
496*b1cdbd2cSJim Jagielski ComboBox( pParent, rResId )
497*b1cdbd2cSJim Jagielski
498*b1cdbd2cSJim Jagielski {
499*b1cdbd2cSJim Jagielski EnableAutocomplete( sal_True );
500*b1cdbd2cSJim Jagielski EnableUserDraw( sal_True );
501*b1cdbd2cSJim Jagielski }
502*b1cdbd2cSJim Jagielski
503*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
504*b1cdbd2cSJim Jagielski
UserDraw(const UserDrawEvent & rUDEvt)505*b1cdbd2cSJim Jagielski void IndexBox_Impl::UserDraw( const UserDrawEvent& rUDEvt )
506*b1cdbd2cSJim Jagielski {
507*b1cdbd2cSJim Jagielski IndexEntry_Impl* pEntry = (IndexEntry_Impl*)(sal_uIntPtr)GetEntryData( rUDEvt.GetItemId() );
508*b1cdbd2cSJim Jagielski if ( pEntry && pEntry->m_bSubEntry )
509*b1cdbd2cSJim Jagielski {
510*b1cdbd2cSJim Jagielski // indent sub entries
511*b1cdbd2cSJim Jagielski Point aPos( rUDEvt.GetRect().TopLeft() );
512*b1cdbd2cSJim Jagielski aPos.X() += 8;
513*b1cdbd2cSJim Jagielski aPos.Y() += ( rUDEvt.GetRect().GetHeight() - rUDEvt.GetDevice()->GetTextHeight() ) / 2;
514*b1cdbd2cSJim Jagielski String aEntry( GetEntry( rUDEvt.GetItemId() ) );
515*b1cdbd2cSJim Jagielski sal_uInt16 nPos = aEntry.Search( ';' );
516*b1cdbd2cSJim Jagielski rUDEvt.GetDevice()->DrawText( aPos, ( nPos != STRING_NOTFOUND ) ? aEntry.Copy( nPos + 1 ) : aEntry );
517*b1cdbd2cSJim Jagielski }
518*b1cdbd2cSJim Jagielski else
519*b1cdbd2cSJim Jagielski DrawEntry( rUDEvt, sal_False, sal_True, sal_True );
520*b1cdbd2cSJim Jagielski }
521*b1cdbd2cSJim Jagielski
522*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
523*b1cdbd2cSJim Jagielski
Notify(NotifyEvent & rNEvt)524*b1cdbd2cSJim Jagielski long IndexBox_Impl::Notify( NotifyEvent& rNEvt )
525*b1cdbd2cSJim Jagielski {
526*b1cdbd2cSJim Jagielski sal_Bool bHandled = sal_False;
527*b1cdbd2cSJim Jagielski if ( rNEvt.GetType() == EVENT_KEYINPUT &&
528*b1cdbd2cSJim Jagielski KEY_RETURN == rNEvt.GetKeyEvent()->GetKeyCode().GetCode() )
529*b1cdbd2cSJim Jagielski {
530*b1cdbd2cSJim Jagielski GetDoubleClickHdl().Call( NULL );
531*b1cdbd2cSJim Jagielski bHandled = sal_True;
532*b1cdbd2cSJim Jagielski }
533*b1cdbd2cSJim Jagielski
534*b1cdbd2cSJim Jagielski return bHandled ? 1 : ComboBox::Notify( rNEvt );
535*b1cdbd2cSJim Jagielski }
536*b1cdbd2cSJim Jagielski
537*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
538*b1cdbd2cSJim Jagielski
SelectExecutableEntry()539*b1cdbd2cSJim Jagielski void IndexBox_Impl::SelectExecutableEntry()
540*b1cdbd2cSJim Jagielski {
541*b1cdbd2cSJim Jagielski sal_uInt16 nPos = GetEntryPos( GetText() );
542*b1cdbd2cSJim Jagielski if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
543*b1cdbd2cSJim Jagielski {
544*b1cdbd2cSJim Jagielski sal_uInt16 nOldPos = nPos;
545*b1cdbd2cSJim Jagielski String aEntryText;
546*b1cdbd2cSJim Jagielski IndexEntry_Impl* pEntry = (IndexEntry_Impl*)(sal_uIntPtr)GetEntryData( nPos );
547*b1cdbd2cSJim Jagielski sal_uInt16 nCount = GetEntryCount();
548*b1cdbd2cSJim Jagielski while ( nPos < nCount && ( !pEntry || pEntry->m_aURL.Len() == 0 ) )
549*b1cdbd2cSJim Jagielski {
550*b1cdbd2cSJim Jagielski pEntry = (IndexEntry_Impl*)(sal_uIntPtr)GetEntryData( ++nPos );
551*b1cdbd2cSJim Jagielski aEntryText = GetEntry( nPos );
552*b1cdbd2cSJim Jagielski }
553*b1cdbd2cSJim Jagielski
554*b1cdbd2cSJim Jagielski if ( nOldPos != nPos )
555*b1cdbd2cSJim Jagielski SetText( aEntryText );
556*b1cdbd2cSJim Jagielski }
557*b1cdbd2cSJim Jagielski }
558*b1cdbd2cSJim Jagielski
559*b1cdbd2cSJim Jagielski // class IndexTabPage_Impl -----------------------------------------------
560*b1cdbd2cSJim Jagielski
IndexTabPage_Impl(Window * pParent,SfxHelpIndexWindow_Impl * _pIdxWin)561*b1cdbd2cSJim Jagielski IndexTabPage_Impl::IndexTabPage_Impl( Window* pParent, SfxHelpIndexWindow_Impl* _pIdxWin ) :
562*b1cdbd2cSJim Jagielski
563*b1cdbd2cSJim Jagielski HelpTabPage_Impl( pParent, _pIdxWin, SfxResId( TP_HELP_INDEX ) ),
564*b1cdbd2cSJim Jagielski
565*b1cdbd2cSJim Jagielski aExpressionFT ( this, SfxResId( FT_EXPRESSION ) ),
566*b1cdbd2cSJim Jagielski aIndexCB ( this, SfxResId( CB_INDEX ) ),
567*b1cdbd2cSJim Jagielski aOpenBtn ( this, SfxResId( PB_OPEN_INDEX ) ),
568*b1cdbd2cSJim Jagielski
569*b1cdbd2cSJim Jagielski bIsActivated ( sal_False )
570*b1cdbd2cSJim Jagielski
571*b1cdbd2cSJim Jagielski {
572*b1cdbd2cSJim Jagielski FreeResource();
573*b1cdbd2cSJim Jagielski
574*b1cdbd2cSJim Jagielski aOpenBtn.SetClickHdl( LINK( this, IndexTabPage_Impl, OpenHdl ) );
575*b1cdbd2cSJim Jagielski Link aTimeoutLink = LINK( this, IndexTabPage_Impl, TimeoutHdl );
576*b1cdbd2cSJim Jagielski aFactoryTimer.SetTimeoutHdl( aTimeoutLink );
577*b1cdbd2cSJim Jagielski aFactoryTimer.SetTimeout( 300 );
578*b1cdbd2cSJim Jagielski aKeywordTimer.SetTimeoutHdl( aTimeoutLink );
579*b1cdbd2cSJim Jagielski aFactoryTimer.SetTimeout( 300 );
580*b1cdbd2cSJim Jagielski
581*b1cdbd2cSJim Jagielski nMinWidth = aOpenBtn.GetSizePixel().Width();
582*b1cdbd2cSJim Jagielski }
583*b1cdbd2cSJim Jagielski
584*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
585*b1cdbd2cSJim Jagielski
~IndexTabPage_Impl()586*b1cdbd2cSJim Jagielski IndexTabPage_Impl::~IndexTabPage_Impl()
587*b1cdbd2cSJim Jagielski {
588*b1cdbd2cSJim Jagielski ClearIndex();
589*b1cdbd2cSJim Jagielski }
590*b1cdbd2cSJim Jagielski
591*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
592*b1cdbd2cSJim Jagielski
593*b1cdbd2cSJim Jagielski namespace sfx2 {
594*b1cdbd2cSJim Jagielski
595*b1cdbd2cSJim Jagielski struct equalOUString
596*b1cdbd2cSJim Jagielski {
operator ()sfx2::equalOUString597*b1cdbd2cSJim Jagielski bool operator()( const ::rtl::OUString& rKey1, const ::rtl::OUString& rKey2 ) const
598*b1cdbd2cSJim Jagielski {
599*b1cdbd2cSJim Jagielski return !!( rKey1 == rKey2 );
600*b1cdbd2cSJim Jagielski }
601*b1cdbd2cSJim Jagielski };
602*b1cdbd2cSJim Jagielski
603*b1cdbd2cSJim Jagielski
604*b1cdbd2cSJim Jagielski struct hashOUString
605*b1cdbd2cSJim Jagielski {
operator ()sfx2::hashOUString606*b1cdbd2cSJim Jagielski size_t operator()( const ::rtl::OUString& rName ) const
607*b1cdbd2cSJim Jagielski {
608*b1cdbd2cSJim Jagielski return rName.hashCode();
609*b1cdbd2cSJim Jagielski }
610*b1cdbd2cSJim Jagielski };
611*b1cdbd2cSJim Jagielski
612*b1cdbd2cSJim Jagielski typedef ::std::hash_map< ::rtl::OUString, int, hashOUString, equalOUString > KeywordInfo;
613*b1cdbd2cSJim Jagielski }
614*b1cdbd2cSJim Jagielski
615*b1cdbd2cSJim Jagielski #define UNIFY_AND_INSERT_TOKEN( aToken ) \
616*b1cdbd2cSJim Jagielski it = \
617*b1cdbd2cSJim Jagielski aInfo.insert( sfx2::KeywordInfo::value_type( aToken, 0 ) ).first; \
618*b1cdbd2cSJim Jagielski if ( ( tmp = it->second++ ) != 0 ) \
619*b1cdbd2cSJim Jagielski nPos = aIndexCB.InsertEntry( aToken + rtl::OUString( append, tmp ) ); \
620*b1cdbd2cSJim Jagielski else \
621*b1cdbd2cSJim Jagielski nPos = aIndexCB.InsertEntry( aToken )
622*b1cdbd2cSJim Jagielski
623*b1cdbd2cSJim Jagielski #define INSERT_DATA( j ) \
624*b1cdbd2cSJim Jagielski if ( aAnchorList[j].getLength() > 0 ) \
625*b1cdbd2cSJim Jagielski { \
626*b1cdbd2cSJim Jagielski aData.append( aRefList[j] ).append( sal_Unicode('#') ).append( aAnchorList[j] ); \
627*b1cdbd2cSJim Jagielski aIndexCB.SetEntryData( nPos, NEW_ENTRY( aData.makeStringAndClear(), insert ) ); \
628*b1cdbd2cSJim Jagielski } \
629*b1cdbd2cSJim Jagielski else \
630*b1cdbd2cSJim Jagielski aIndexCB.SetEntryData( nPos, NEW_ENTRY( aRefList[j], insert ) );
631*b1cdbd2cSJim Jagielski
632*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
633*b1cdbd2cSJim Jagielski
InitializeIndex()634*b1cdbd2cSJim Jagielski void IndexTabPage_Impl::InitializeIndex()
635*b1cdbd2cSJim Jagielski {
636*b1cdbd2cSJim Jagielski WaitObject( this );
637*b1cdbd2cSJim Jagielski
638*b1cdbd2cSJim Jagielski // By now more than 256 equal entries are not allowed
639*b1cdbd2cSJim Jagielski sal_Unicode append[256];
640*b1cdbd2cSJim Jagielski for( int k = 0; k < 256; ++k )
641*b1cdbd2cSJim Jagielski append[k] = sal_Unicode( ' ' );
642*b1cdbd2cSJim Jagielski
643*b1cdbd2cSJim Jagielski sfx2::KeywordInfo aInfo;
644*b1cdbd2cSJim Jagielski aIndexCB.SetUpdateMode( sal_False );
645*b1cdbd2cSJim Jagielski
646*b1cdbd2cSJim Jagielski try
647*b1cdbd2cSJim Jagielski {
648*b1cdbd2cSJim Jagielski ::rtl::OUString aURL = HELP_URL;
649*b1cdbd2cSJim Jagielski aURL += ::rtl::OUString( sFactory );
650*b1cdbd2cSJim Jagielski
651*b1cdbd2cSJim Jagielski String aTemp = aURL;
652*b1cdbd2cSJim Jagielski AppendConfigToken_Impl( aTemp, sal_True );
653*b1cdbd2cSJim Jagielski aURL = aTemp;
654*b1cdbd2cSJim Jagielski
655*b1cdbd2cSJim Jagielski Content aCnt( aURL, Reference< ::com::sun::star::ucb::XCommandEnvironment > () );
656*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > xInfo = aCnt.getProperties();
657*b1cdbd2cSJim Jagielski if ( xInfo->hasPropertyByName( PROPERTY_ANCHORREF ) )
658*b1cdbd2cSJim Jagielski {
659*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::rtl::OUString > aPropSeq( 4 );
660*b1cdbd2cSJim Jagielski aPropSeq[0] = PROPERTY_KEYWORDLIST;
661*b1cdbd2cSJim Jagielski aPropSeq[1] = PROPERTY_KEYWORDREF;
662*b1cdbd2cSJim Jagielski aPropSeq[2] = PROPERTY_ANCHORREF;
663*b1cdbd2cSJim Jagielski aPropSeq[3] = PROPERTY_TITLEREF;
664*b1cdbd2cSJim Jagielski
665*b1cdbd2cSJim Jagielski // abi: use one possibly remote call only
666*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > aAnySeq =
667*b1cdbd2cSJim Jagielski aCnt.getPropertyValues( aPropSeq );
668*b1cdbd2cSJim Jagielski
669*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::rtl::OUString > aKeywordList;
670*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > > aKeywordRefList;
671*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > > aAnchorRefList;
672*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > > aTitleRefList;
673*b1cdbd2cSJim Jagielski
674*b1cdbd2cSJim Jagielski if ( ( aAnySeq[0] >>= aKeywordList ) && ( aAnySeq[1] >>= aKeywordRefList ) &&
675*b1cdbd2cSJim Jagielski ( aAnySeq[2] >>= aAnchorRefList ) && ( aAnySeq[3] >>= aTitleRefList ) )
676*b1cdbd2cSJim Jagielski {
677*b1cdbd2cSJim Jagielski sal_Bool insert;
678*b1cdbd2cSJim Jagielski sal_uInt16 nPos;
679*b1cdbd2cSJim Jagielski int ndx,tmp;
680*b1cdbd2cSJim Jagielski ::rtl::OUString aIndex, aTempString;
681*b1cdbd2cSJim Jagielski ::rtl::OUStringBuffer aData( 128 ); // Capacity of up to 128 characters
682*b1cdbd2cSJim Jagielski sfx2::KeywordInfo::iterator it;
683*b1cdbd2cSJim Jagielski
684*b1cdbd2cSJim Jagielski for ( int i = 0; i < aKeywordList.getLength(); ++i )
685*b1cdbd2cSJim Jagielski {
686*b1cdbd2cSJim Jagielski // abi: Do not copy, but use references
687*b1cdbd2cSJim Jagielski const ::rtl::OUString& aKeywordPair = aKeywordList[i];
688*b1cdbd2cSJim Jagielski DBG_ASSERT( aKeywordPair.getLength() > 0, "invalid help index" );
689*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aRefList = aKeywordRefList[i];
690*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aAnchorList = aAnchorRefList[i];
691*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aTitleList = aTitleRefList[i];
692*b1cdbd2cSJim Jagielski
693*b1cdbd2cSJim Jagielski DBG_ASSERT( aRefList.getLength() == aAnchorList.getLength(),"reference list and title list of different length" );
694*b1cdbd2cSJim Jagielski
695*b1cdbd2cSJim Jagielski insert = ( ( ndx = aKeywordPair.indexOf( sal_Unicode( ';' ) ) ) == -1 ? sal_False : sal_True );
696*b1cdbd2cSJim Jagielski
697*b1cdbd2cSJim Jagielski if ( insert )
698*b1cdbd2cSJim Jagielski {
699*b1cdbd2cSJim Jagielski aTempString = aKeywordPair.copy( 0, ndx );
700*b1cdbd2cSJim Jagielski if ( aIndex != aTempString )
701*b1cdbd2cSJim Jagielski {
702*b1cdbd2cSJim Jagielski aIndex = aTempString;
703*b1cdbd2cSJim Jagielski UNIFY_AND_INSERT_TOKEN( aTempString );
704*b1cdbd2cSJim Jagielski }
705*b1cdbd2cSJim Jagielski }
706*b1cdbd2cSJim Jagielski else
707*b1cdbd2cSJim Jagielski aIndex = ::rtl::OUString();
708*b1cdbd2cSJim Jagielski
709*b1cdbd2cSJim Jagielski // Assume the token is trimed
710*b1cdbd2cSJim Jagielski UNIFY_AND_INSERT_TOKEN( aKeywordPair );
711*b1cdbd2cSJim Jagielski
712*b1cdbd2cSJim Jagielski sal_uInt32 nRefListLen = aRefList.getLength();
713*b1cdbd2cSJim Jagielski
714*b1cdbd2cSJim Jagielski DBG_ASSERT( aAnchorList.getLength(), "*IndexTabPage_Impl::InitializeIndex(): AnchorList is empty!" ); \
715*b1cdbd2cSJim Jagielski DBG_ASSERT( nRefListLen, "*IndexTabPage_Impl::InitializeIndex(): RefList is empty!" ); \
716*b1cdbd2cSJim Jagielski
717*b1cdbd2cSJim Jagielski if ( aAnchorList.getLength() && nRefListLen )
718*b1cdbd2cSJim Jagielski {
719*b1cdbd2cSJim Jagielski INSERT_DATA( 0 );
720*b1cdbd2cSJim Jagielski }
721*b1cdbd2cSJim Jagielski
722*b1cdbd2cSJim Jagielski for ( sal_uInt32 j = 1; j < nRefListLen ; ++j )
723*b1cdbd2cSJim Jagielski {
724*b1cdbd2cSJim Jagielski aData
725*b1cdbd2cSJim Jagielski .append( aKeywordPair )
726*b1cdbd2cSJim Jagielski .append( sal_Unicode(' ') )
727*b1cdbd2cSJim Jagielski .append( sal_Unicode('-') )
728*b1cdbd2cSJim Jagielski .append( sal_Unicode(' ') )
729*b1cdbd2cSJim Jagielski .append( aTitleList[j] );
730*b1cdbd2cSJim Jagielski
731*b1cdbd2cSJim Jagielski aTempString = aData.makeStringAndClear();
732*b1cdbd2cSJim Jagielski UNIFY_AND_INSERT_TOKEN( aTempString );
733*b1cdbd2cSJim Jagielski INSERT_DATA( j );
734*b1cdbd2cSJim Jagielski }
735*b1cdbd2cSJim Jagielski }
736*b1cdbd2cSJim Jagielski }
737*b1cdbd2cSJim Jagielski }
738*b1cdbd2cSJim Jagielski }
739*b1cdbd2cSJim Jagielski catch( Exception& )
740*b1cdbd2cSJim Jagielski {
741*b1cdbd2cSJim Jagielski DBG_ERROR( "IndexTabPage_Impl::InitializeIndex(): unexpected exception" );
742*b1cdbd2cSJim Jagielski }
743*b1cdbd2cSJim Jagielski
744*b1cdbd2cSJim Jagielski aIndexCB.SetUpdateMode( sal_True );
745*b1cdbd2cSJim Jagielski
746*b1cdbd2cSJim Jagielski if ( sKeyword.Len() > 0 )
747*b1cdbd2cSJim Jagielski aKeywordLink.Call( this );
748*b1cdbd2cSJim Jagielski }
749*b1cdbd2cSJim Jagielski
750*b1cdbd2cSJim Jagielski #undef INSERT_DATA
751*b1cdbd2cSJim Jagielski #undef UNIFY_AND_INSERT_TOKEN
752*b1cdbd2cSJim Jagielski
753*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
754*b1cdbd2cSJim Jagielski
ClearIndex()755*b1cdbd2cSJim Jagielski void IndexTabPage_Impl::ClearIndex()
756*b1cdbd2cSJim Jagielski {
757*b1cdbd2cSJim Jagielski sal_uInt16 nCount = aIndexCB.GetEntryCount();
758*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < nCount; ++i )
759*b1cdbd2cSJim Jagielski delete (IndexEntry_Impl*)(sal_uIntPtr)aIndexCB.GetEntryData(i);
760*b1cdbd2cSJim Jagielski aIndexCB.Clear();
761*b1cdbd2cSJim Jagielski }
762*b1cdbd2cSJim Jagielski
763*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
764*b1cdbd2cSJim Jagielski
IMPL_LINK(IndexTabPage_Impl,OpenHdl,PushButton *,EMPTYARG)765*b1cdbd2cSJim Jagielski IMPL_LINK( IndexTabPage_Impl, OpenHdl, PushButton*, EMPTYARG )
766*b1cdbd2cSJim Jagielski {
767*b1cdbd2cSJim Jagielski aIndexCB.GetDoubleClickHdl().Call( &aIndexCB );
768*b1cdbd2cSJim Jagielski return 0;
769*b1cdbd2cSJim Jagielski }
770*b1cdbd2cSJim Jagielski
771*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
772*b1cdbd2cSJim Jagielski
IMPL_LINK(IndexTabPage_Impl,TimeoutHdl,Timer *,pTimer)773*b1cdbd2cSJim Jagielski IMPL_LINK( IndexTabPage_Impl, TimeoutHdl, Timer*, pTimer )
774*b1cdbd2cSJim Jagielski {
775*b1cdbd2cSJim Jagielski if ( &aFactoryTimer == pTimer )
776*b1cdbd2cSJim Jagielski InitializeIndex();
777*b1cdbd2cSJim Jagielski else if ( &aKeywordTimer == pTimer && sKeyword.Len() > 0 )
778*b1cdbd2cSJim Jagielski aKeywordLink.Call( this );
779*b1cdbd2cSJim Jagielski return 0;
780*b1cdbd2cSJim Jagielski }
781*b1cdbd2cSJim Jagielski
782*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
783*b1cdbd2cSJim Jagielski
Resize()784*b1cdbd2cSJim Jagielski void IndexTabPage_Impl::Resize()
785*b1cdbd2cSJim Jagielski {
786*b1cdbd2cSJim Jagielski Size aSize = GetSizePixel();
787*b1cdbd2cSJim Jagielski if ( aSize.Width() < nMinWidth )
788*b1cdbd2cSJim Jagielski aSize.Width() = nMinWidth;
789*b1cdbd2cSJim Jagielski Point aPnt = aExpressionFT.GetPosPixel();
790*b1cdbd2cSJim Jagielski Size aNewSize = aExpressionFT.GetSizePixel();
791*b1cdbd2cSJim Jagielski aNewSize.Width() = aSize.Width() - ( aPnt.X() * 2 );
792*b1cdbd2cSJim Jagielski aExpressionFT.SetSizePixel( aNewSize );
793*b1cdbd2cSJim Jagielski
794*b1cdbd2cSJim Jagielski Size a6Size = LogicToPixel( Size( 6, 6 ), MAP_APPFONT );
795*b1cdbd2cSJim Jagielski Size aBtnSize = aOpenBtn.GetSizePixel();
796*b1cdbd2cSJim Jagielski
797*b1cdbd2cSJim Jagielski aPnt = aIndexCB.GetPosPixel();
798*b1cdbd2cSJim Jagielski aNewSize = aIndexCB.GetSizePixel();
799*b1cdbd2cSJim Jagielski aNewSize.Width() = aSize.Width() - ( aPnt.X() * 2 );
800*b1cdbd2cSJim Jagielski aNewSize.Height() = aSize.Height() - aPnt.Y();
801*b1cdbd2cSJim Jagielski aNewSize.Height() -= ( aBtnSize.Height() + ( a6Size.Height() * 3 / 2 ) );
802*b1cdbd2cSJim Jagielski aIndexCB.SetSizePixel( aNewSize );
803*b1cdbd2cSJim Jagielski
804*b1cdbd2cSJim Jagielski aPnt.X() += ( aNewSize.Width() - aBtnSize.Width() );
805*b1cdbd2cSJim Jagielski aPnt.Y() += aNewSize.Height() + ( a6Size.Height() / 2 );
806*b1cdbd2cSJim Jagielski long nMinX = aIndexCB.GetPosPixel().X();
807*b1cdbd2cSJim Jagielski if ( aPnt.X() < nMinX )
808*b1cdbd2cSJim Jagielski aPnt.X() = nMinX;
809*b1cdbd2cSJim Jagielski aOpenBtn.SetPosPixel( aPnt );
810*b1cdbd2cSJim Jagielski }
811*b1cdbd2cSJim Jagielski
812*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
813*b1cdbd2cSJim Jagielski
ActivatePage()814*b1cdbd2cSJim Jagielski void IndexTabPage_Impl::ActivatePage()
815*b1cdbd2cSJim Jagielski {
816*b1cdbd2cSJim Jagielski if ( !bIsActivated )
817*b1cdbd2cSJim Jagielski {
818*b1cdbd2cSJim Jagielski bIsActivated = sal_True;
819*b1cdbd2cSJim Jagielski aFactoryTimer.Start();
820*b1cdbd2cSJim Jagielski }
821*b1cdbd2cSJim Jagielski
822*b1cdbd2cSJim Jagielski if ( !m_pIdxWin->WasCursorLeftOrRight() )
823*b1cdbd2cSJim Jagielski SetFocusOnBox();
824*b1cdbd2cSJim Jagielski }
825*b1cdbd2cSJim Jagielski
826*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
827*b1cdbd2cSJim Jagielski
GetLastFocusControl()828*b1cdbd2cSJim Jagielski Control* IndexTabPage_Impl::GetLastFocusControl()
829*b1cdbd2cSJim Jagielski {
830*b1cdbd2cSJim Jagielski return &aOpenBtn;
831*b1cdbd2cSJim Jagielski }
832*b1cdbd2cSJim Jagielski
833*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
834*b1cdbd2cSJim Jagielski
SetDoubleClickHdl(const Link & rLink)835*b1cdbd2cSJim Jagielski void IndexTabPage_Impl::SetDoubleClickHdl( const Link& rLink )
836*b1cdbd2cSJim Jagielski {
837*b1cdbd2cSJim Jagielski aIndexCB.SetDoubleClickHdl( rLink );
838*b1cdbd2cSJim Jagielski }
839*b1cdbd2cSJim Jagielski
840*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
841*b1cdbd2cSJim Jagielski
SetFactory(const String & rFactory)842*b1cdbd2cSJim Jagielski void IndexTabPage_Impl::SetFactory( const String& rFactory )
843*b1cdbd2cSJim Jagielski {
844*b1cdbd2cSJim Jagielski String sNewFactory( rFactory );
845*b1cdbd2cSJim Jagielski DBG_ASSERT( sNewFactory.Len() > 0, "empty factory" );
846*b1cdbd2cSJim Jagielski bool bValid = m_pIdxWin->IsValidFactory( rFactory );
847*b1cdbd2cSJim Jagielski
848*b1cdbd2cSJim Jagielski if ( sFactory.Len() == 0 && !bValid )
849*b1cdbd2cSJim Jagielski {
850*b1cdbd2cSJim Jagielski sNewFactory = SfxHelp::GetDefaultHelpModule();
851*b1cdbd2cSJim Jagielski bValid = true;
852*b1cdbd2cSJim Jagielski }
853*b1cdbd2cSJim Jagielski
854*b1cdbd2cSJim Jagielski if ( sNewFactory != sFactory && bValid )
855*b1cdbd2cSJim Jagielski {
856*b1cdbd2cSJim Jagielski sFactory = sNewFactory;
857*b1cdbd2cSJim Jagielski ClearIndex();
858*b1cdbd2cSJim Jagielski if ( bIsActivated )
859*b1cdbd2cSJim Jagielski aFactoryTimer.Start();
860*b1cdbd2cSJim Jagielski }
861*b1cdbd2cSJim Jagielski }
862*b1cdbd2cSJim Jagielski
863*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
864*b1cdbd2cSJim Jagielski
GetSelectEntry() const865*b1cdbd2cSJim Jagielski String IndexTabPage_Impl::GetSelectEntry() const
866*b1cdbd2cSJim Jagielski {
867*b1cdbd2cSJim Jagielski String aRet;
868*b1cdbd2cSJim Jagielski IndexEntry_Impl* pEntry = (IndexEntry_Impl*)(sal_uIntPtr)aIndexCB.GetEntryData( aIndexCB.GetEntryPos( aIndexCB.GetText() ) );
869*b1cdbd2cSJim Jagielski if ( pEntry )
870*b1cdbd2cSJim Jagielski aRet = pEntry->m_aURL;
871*b1cdbd2cSJim Jagielski return aRet;
872*b1cdbd2cSJim Jagielski }
873*b1cdbd2cSJim Jagielski
874*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
875*b1cdbd2cSJim Jagielski
SetKeyword(const String & rKeyword)876*b1cdbd2cSJim Jagielski void IndexTabPage_Impl::SetKeyword( const String& rKeyword )
877*b1cdbd2cSJim Jagielski {
878*b1cdbd2cSJim Jagielski sKeyword = rKeyword;
879*b1cdbd2cSJim Jagielski
880*b1cdbd2cSJim Jagielski if ( aIndexCB.GetEntryCount() > 0 )
881*b1cdbd2cSJim Jagielski aKeywordTimer.Start();
882*b1cdbd2cSJim Jagielski else if ( !bIsActivated )
883*b1cdbd2cSJim Jagielski aFactoryTimer.Start();
884*b1cdbd2cSJim Jagielski }
885*b1cdbd2cSJim Jagielski
886*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
887*b1cdbd2cSJim Jagielski
HasKeyword() const888*b1cdbd2cSJim Jagielski sal_Bool IndexTabPage_Impl::HasKeyword() const
889*b1cdbd2cSJim Jagielski {
890*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_False;
891*b1cdbd2cSJim Jagielski if ( sKeyword.Len() > 0 )
892*b1cdbd2cSJim Jagielski {
893*b1cdbd2cSJim Jagielski sal_uInt16 nPos = aIndexCB.GetEntryPos( sKeyword );
894*b1cdbd2cSJim Jagielski bRet = ( nPos != LISTBOX_ENTRY_NOTFOUND );
895*b1cdbd2cSJim Jagielski }
896*b1cdbd2cSJim Jagielski
897*b1cdbd2cSJim Jagielski return bRet;
898*b1cdbd2cSJim Jagielski }
899*b1cdbd2cSJim Jagielski
900*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
901*b1cdbd2cSJim Jagielski //added by BerryJia for fixing Bug98251, 2002-12-11
HasKeywordIgnoreCase()902*b1cdbd2cSJim Jagielski sal_Bool IndexTabPage_Impl::HasKeywordIgnoreCase()
903*b1cdbd2cSJim Jagielski {
904*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_False;
905*b1cdbd2cSJim Jagielski if ( sKeyword.Len() > 0 )
906*b1cdbd2cSJim Jagielski {
907*b1cdbd2cSJim Jagielski sal_uInt16 nEntries = aIndexCB.GetEntryCount();
908*b1cdbd2cSJim Jagielski String sIndexItem;
909*b1cdbd2cSJim Jagielski const vcl::I18nHelper& rI18nHelper = GetSettings().GetLocaleI18nHelper();
910*b1cdbd2cSJim Jagielski for ( sal_uInt16 n = 0; n < nEntries; n++)
911*b1cdbd2cSJim Jagielski {
912*b1cdbd2cSJim Jagielski sIndexItem = aIndexCB.GetEntry( n );
913*b1cdbd2cSJim Jagielski if (rI18nHelper.MatchString( sIndexItem, sKeyword ))
914*b1cdbd2cSJim Jagielski {
915*b1cdbd2cSJim Jagielski sKeyword = sIndexItem;
916*b1cdbd2cSJim Jagielski bRet = sal_True;
917*b1cdbd2cSJim Jagielski }
918*b1cdbd2cSJim Jagielski }
919*b1cdbd2cSJim Jagielski }
920*b1cdbd2cSJim Jagielski
921*b1cdbd2cSJim Jagielski return bRet;
922*b1cdbd2cSJim Jagielski }
923*b1cdbd2cSJim Jagielski
924*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
925*b1cdbd2cSJim Jagielski
OpenKeyword()926*b1cdbd2cSJim Jagielski void IndexTabPage_Impl::OpenKeyword()
927*b1cdbd2cSJim Jagielski {
928*b1cdbd2cSJim Jagielski if ( sKeyword.Len() > 0 )
929*b1cdbd2cSJim Jagielski {
930*b1cdbd2cSJim Jagielski aIndexCB.SetText( sKeyword );
931*b1cdbd2cSJim Jagielski aIndexCB.GetDoubleClickHdl().Call( NULL );
932*b1cdbd2cSJim Jagielski sKeyword.Erase();
933*b1cdbd2cSJim Jagielski }
934*b1cdbd2cSJim Jagielski }
935*b1cdbd2cSJim Jagielski
936*b1cdbd2cSJim Jagielski // class SearchBox_Impl --------------------------------------------------
937*b1cdbd2cSJim Jagielski
PreNotify(NotifyEvent & rNEvt)938*b1cdbd2cSJim Jagielski long SearchBox_Impl::PreNotify( NotifyEvent& rNEvt )
939*b1cdbd2cSJim Jagielski {
940*b1cdbd2cSJim Jagielski sal_Bool bHandled = sal_False;
941*b1cdbd2cSJim Jagielski if ( !IsInDropDown() &&
942*b1cdbd2cSJim Jagielski rNEvt.GetWindow() == GetSubEdit() &&
943*b1cdbd2cSJim Jagielski rNEvt.GetType() == EVENT_KEYINPUT &&
944*b1cdbd2cSJim Jagielski KEY_RETURN == rNEvt.GetKeyEvent()->GetKeyCode().GetCode() )
945*b1cdbd2cSJim Jagielski {
946*b1cdbd2cSJim Jagielski aSearchLink.Call( NULL );
947*b1cdbd2cSJim Jagielski bHandled = sal_True;
948*b1cdbd2cSJim Jagielski }
949*b1cdbd2cSJim Jagielski return bHandled ? 1 : ComboBox::PreNotify( rNEvt );
950*b1cdbd2cSJim Jagielski }
951*b1cdbd2cSJim Jagielski
952*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
953*b1cdbd2cSJim Jagielski
Select()954*b1cdbd2cSJim Jagielski void SearchBox_Impl::Select()
955*b1cdbd2cSJim Jagielski {
956*b1cdbd2cSJim Jagielski if ( !IsTravelSelect() )
957*b1cdbd2cSJim Jagielski aSearchLink.Call( NULL );
958*b1cdbd2cSJim Jagielski }
959*b1cdbd2cSJim Jagielski
960*b1cdbd2cSJim Jagielski // class SearchResultsBox_Impl -------------------------------------------
961*b1cdbd2cSJim Jagielski
Notify(NotifyEvent & rNEvt)962*b1cdbd2cSJim Jagielski long SearchResultsBox_Impl::Notify( NotifyEvent& rNEvt )
963*b1cdbd2cSJim Jagielski {
964*b1cdbd2cSJim Jagielski sal_Bool bHandled = sal_False;
965*b1cdbd2cSJim Jagielski if ( rNEvt.GetType() == EVENT_KEYINPUT &&
966*b1cdbd2cSJim Jagielski KEY_RETURN == rNEvt.GetKeyEvent()->GetKeyCode().GetCode() )
967*b1cdbd2cSJim Jagielski {
968*b1cdbd2cSJim Jagielski GetDoubleClickHdl().Call( NULL );
969*b1cdbd2cSJim Jagielski bHandled = sal_True;
970*b1cdbd2cSJim Jagielski }
971*b1cdbd2cSJim Jagielski
972*b1cdbd2cSJim Jagielski return bHandled ? 1 : ListBox::Notify( rNEvt );
973*b1cdbd2cSJim Jagielski }
974*b1cdbd2cSJim Jagielski
975*b1cdbd2cSJim Jagielski // class SearchTabPage_Impl ----------------------------------------------
976*b1cdbd2cSJim Jagielski
SearchTabPage_Impl(Window * pParent,SfxHelpIndexWindow_Impl * _pIdxWin)977*b1cdbd2cSJim Jagielski SearchTabPage_Impl::SearchTabPage_Impl( Window* pParent, SfxHelpIndexWindow_Impl* _pIdxWin ) :
978*b1cdbd2cSJim Jagielski
979*b1cdbd2cSJim Jagielski HelpTabPage_Impl( pParent, _pIdxWin, SfxResId( TP_HELP_SEARCH ) ),
980*b1cdbd2cSJim Jagielski
981*b1cdbd2cSJim Jagielski aSearchFT ( this, SfxResId( FT_SEARCH ) ),
982*b1cdbd2cSJim Jagielski aSearchED ( this, SfxResId( ED_SEARCH ) ),
983*b1cdbd2cSJim Jagielski aSearchBtn ( this, SfxResId( PB_SEARCH ) ),
984*b1cdbd2cSJim Jagielski aFullWordsCB ( this, SfxResId( CB_FULLWORDS ) ),
985*b1cdbd2cSJim Jagielski aScopeCB ( this, SfxResId( CB_SCOPE ) ),
986*b1cdbd2cSJim Jagielski aResultsLB ( this, SfxResId( LB_RESULT ) ),
987*b1cdbd2cSJim Jagielski aOpenBtn ( this, SfxResId( PB_OPEN_SEARCH ) ),
988*b1cdbd2cSJim Jagielski xBreakIterator ( vcl::unohelper::CreateBreakIterator() )
989*b1cdbd2cSJim Jagielski
990*b1cdbd2cSJim Jagielski {
991*b1cdbd2cSJim Jagielski FreeResource();
992*b1cdbd2cSJim Jagielski
993*b1cdbd2cSJim Jagielski Link aLink = LINK( this, SearchTabPage_Impl, SearchHdl );
994*b1cdbd2cSJim Jagielski aSearchED.SetSearchLink( aLink );
995*b1cdbd2cSJim Jagielski aSearchBtn.SetClickHdl( aLink );
996*b1cdbd2cSJim Jagielski aSearchED.SetModifyHdl( LINK( this, SearchTabPage_Impl, ModifyHdl ) );
997*b1cdbd2cSJim Jagielski aOpenBtn.SetClickHdl( LINK( this, SearchTabPage_Impl, OpenHdl ) );
998*b1cdbd2cSJim Jagielski
999*b1cdbd2cSJim Jagielski aMinSize = GetSizePixel();
1000*b1cdbd2cSJim Jagielski
1001*b1cdbd2cSJim Jagielski SvtViewOptions aViewOpt( E_TABPAGE, CONFIGNAME_SEARCHPAGE );
1002*b1cdbd2cSJim Jagielski if ( aViewOpt.Exists() )
1003*b1cdbd2cSJim Jagielski {
1004*b1cdbd2cSJim Jagielski String aUserData;
1005*b1cdbd2cSJim Jagielski Any aUserItem = aViewOpt.GetUserItem( USERITEM_NAME );
1006*b1cdbd2cSJim Jagielski ::rtl::OUString aTemp;
1007*b1cdbd2cSJim Jagielski if ( aUserItem >>= aTemp )
1008*b1cdbd2cSJim Jagielski {
1009*b1cdbd2cSJim Jagielski aUserData = String( aTemp );
1010*b1cdbd2cSJim Jagielski sal_Bool bChecked = ( 1 == aUserData.GetToken(0).ToInt32() ) ? sal_True : sal_False;
1011*b1cdbd2cSJim Jagielski aFullWordsCB.Check( bChecked );
1012*b1cdbd2cSJim Jagielski bChecked = ( 1 == aUserData.GetToken(1).ToInt32() ) ? sal_True : sal_False;
1013*b1cdbd2cSJim Jagielski aScopeCB.Check( bChecked );
1014*b1cdbd2cSJim Jagielski
1015*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 2; i < aUserData.GetTokenCount(); ++i )
1016*b1cdbd2cSJim Jagielski {
1017*b1cdbd2cSJim Jagielski String aToken = aUserData.GetToken(i);
1018*b1cdbd2cSJim Jagielski aSearchED.InsertEntry( INetURLObject::decode(
1019*b1cdbd2cSJim Jagielski aToken, '%', INetURLObject::DECODE_WITH_CHARSET ) );
1020*b1cdbd2cSJim Jagielski }
1021*b1cdbd2cSJim Jagielski }
1022*b1cdbd2cSJim Jagielski }
1023*b1cdbd2cSJim Jagielski
1024*b1cdbd2cSJim Jagielski ModifyHdl( &aSearchED );
1025*b1cdbd2cSJim Jagielski }
1026*b1cdbd2cSJim Jagielski
1027*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1028*b1cdbd2cSJim Jagielski
~SearchTabPage_Impl()1029*b1cdbd2cSJim Jagielski SearchTabPage_Impl::~SearchTabPage_Impl()
1030*b1cdbd2cSJim Jagielski {
1031*b1cdbd2cSJim Jagielski SvtViewOptions aViewOpt( E_TABPAGE, CONFIGNAME_SEARCHPAGE );
1032*b1cdbd2cSJim Jagielski sal_Int32 nChecked = aFullWordsCB.IsChecked() ? 1 : 0;
1033*b1cdbd2cSJim Jagielski String aUserData = String::CreateFromInt32( nChecked );
1034*b1cdbd2cSJim Jagielski aUserData += ';';
1035*b1cdbd2cSJim Jagielski nChecked = aScopeCB.IsChecked() ? 1 : 0;
1036*b1cdbd2cSJim Jagielski aUserData += String::CreateFromInt32( nChecked );
1037*b1cdbd2cSJim Jagielski aUserData += ';';
1038*b1cdbd2cSJim Jagielski sal_uInt16 nCount = Min( aSearchED.GetEntryCount(), (sal_uInt16)10 ); // save only 10 entries
1039*b1cdbd2cSJim Jagielski
1040*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < nCount; ++i )
1041*b1cdbd2cSJim Jagielski {
1042*b1cdbd2cSJim Jagielski rtl::OUString aText = aSearchED.GetEntry(i);
1043*b1cdbd2cSJim Jagielski aUserData += String(INetURLObject::encode(
1044*b1cdbd2cSJim Jagielski aText, INetURLObject::PART_UNO_PARAM_VALUE, '%',
1045*b1cdbd2cSJim Jagielski INetURLObject::ENCODE_ALL ));
1046*b1cdbd2cSJim Jagielski aUserData += ';';
1047*b1cdbd2cSJim Jagielski }
1048*b1cdbd2cSJim Jagielski
1049*b1cdbd2cSJim Jagielski aUserData.EraseTrailingChars(';');
1050*b1cdbd2cSJim Jagielski Any aUserItem = makeAny( ::rtl::OUString( aUserData ) );
1051*b1cdbd2cSJim Jagielski aViewOpt.SetUserItem( USERITEM_NAME, aUserItem );
1052*b1cdbd2cSJim Jagielski }
1053*b1cdbd2cSJim Jagielski
1054*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1055*b1cdbd2cSJim Jagielski
ClearSearchResults()1056*b1cdbd2cSJim Jagielski void SearchTabPage_Impl::ClearSearchResults()
1057*b1cdbd2cSJim Jagielski {
1058*b1cdbd2cSJim Jagielski sal_uInt16 nCount = aResultsLB.GetEntryCount();
1059*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < nCount; ++i )
1060*b1cdbd2cSJim Jagielski delete (String*)(sal_uIntPtr)aResultsLB.GetEntryData(i);
1061*b1cdbd2cSJim Jagielski aResultsLB.Clear();
1062*b1cdbd2cSJim Jagielski aResultsLB.Update();
1063*b1cdbd2cSJim Jagielski }
1064*b1cdbd2cSJim Jagielski
1065*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1066*b1cdbd2cSJim Jagielski
RememberSearchText(const String & rSearchText)1067*b1cdbd2cSJim Jagielski void SearchTabPage_Impl::RememberSearchText( const String& rSearchText )
1068*b1cdbd2cSJim Jagielski {
1069*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < aSearchED.GetEntryCount(); ++i )
1070*b1cdbd2cSJim Jagielski {
1071*b1cdbd2cSJim Jagielski if ( rSearchText == aSearchED.GetEntry(i) )
1072*b1cdbd2cSJim Jagielski {
1073*b1cdbd2cSJim Jagielski aSearchED.RemoveEntry(i);
1074*b1cdbd2cSJim Jagielski break;
1075*b1cdbd2cSJim Jagielski }
1076*b1cdbd2cSJim Jagielski }
1077*b1cdbd2cSJim Jagielski
1078*b1cdbd2cSJim Jagielski aSearchED.InsertEntry( rSearchText, 0 );
1079*b1cdbd2cSJim Jagielski }
1080*b1cdbd2cSJim Jagielski
1081*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1082*b1cdbd2cSJim Jagielski
IMPL_LINK(SearchTabPage_Impl,SearchHdl,PushButton *,EMPTYARG)1083*b1cdbd2cSJim Jagielski IMPL_LINK( SearchTabPage_Impl, SearchHdl, PushButton*, EMPTYARG )
1084*b1cdbd2cSJim Jagielski {
1085*b1cdbd2cSJim Jagielski String aSearchText = TRIM( aSearchED.GetText() );
1086*b1cdbd2cSJim Jagielski if ( aSearchText.Len() > 0 )
1087*b1cdbd2cSJim Jagielski {
1088*b1cdbd2cSJim Jagielski EnterWait();
1089*b1cdbd2cSJim Jagielski ClearSearchResults();
1090*b1cdbd2cSJim Jagielski RememberSearchText( aSearchText );
1091*b1cdbd2cSJim Jagielski String aSearchURL = HELP_URL;
1092*b1cdbd2cSJim Jagielski aSearchURL += aFactory;
1093*b1cdbd2cSJim Jagielski aSearchURL += String( HELP_SEARCH_TAG );
1094*b1cdbd2cSJim Jagielski if ( !aFullWordsCB.IsChecked() )
1095*b1cdbd2cSJim Jagielski aSearchText = sfx2::PrepareSearchString( aSearchText, xBreakIterator, true );
1096*b1cdbd2cSJim Jagielski aSearchURL += aSearchText;
1097*b1cdbd2cSJim Jagielski AppendConfigToken_Impl( aSearchURL, sal_False );
1098*b1cdbd2cSJim Jagielski if ( aScopeCB.IsChecked() )
1099*b1cdbd2cSJim Jagielski aSearchURL += DEFINE_CONST_UNICODE("&Scope=Heading");
1100*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > aFactories = SfxContentHelper::GetResultSet( aSearchURL );
1101*b1cdbd2cSJim Jagielski const ::rtl::OUString* pFacs = aFactories.getConstArray();
1102*b1cdbd2cSJim Jagielski sal_uInt32 i, nCount = aFactories.getLength();
1103*b1cdbd2cSJim Jagielski for ( i = 0; i < nCount; ++i )
1104*b1cdbd2cSJim Jagielski {
1105*b1cdbd2cSJim Jagielski String aRow( pFacs[i] );
1106*b1cdbd2cSJim Jagielski String aTitle, aType;
1107*b1cdbd2cSJim Jagielski xub_StrLen nIdx = 0;
1108*b1cdbd2cSJim Jagielski aTitle = aRow.GetToken( 0, '\t', nIdx );
1109*b1cdbd2cSJim Jagielski aType = aRow.GetToken( 0, '\t', nIdx );
1110*b1cdbd2cSJim Jagielski String* pURL = new String( aRow.GetToken( 0, '\t', nIdx ) );
1111*b1cdbd2cSJim Jagielski sal_uInt16 nPos = aResultsLB.InsertEntry( aTitle );
1112*b1cdbd2cSJim Jagielski aResultsLB.SetEntryData( nPos, (void*)(sal_uIntPtr)pURL );
1113*b1cdbd2cSJim Jagielski }
1114*b1cdbd2cSJim Jagielski LeaveWait();
1115*b1cdbd2cSJim Jagielski
1116*b1cdbd2cSJim Jagielski if ( !nCount )
1117*b1cdbd2cSJim Jagielski {
1118*b1cdbd2cSJim Jagielski InfoBox aBox( this, SfxResId( RID_INFO_NOSEARCHRESULTS ) );
1119*b1cdbd2cSJim Jagielski aBox.SetText( String( SfxResId( STR_HELP_WINDOW_TITLE ) ) );
1120*b1cdbd2cSJim Jagielski aBox.Execute();
1121*b1cdbd2cSJim Jagielski }
1122*b1cdbd2cSJim Jagielski }
1123*b1cdbd2cSJim Jagielski return 0;
1124*b1cdbd2cSJim Jagielski }
1125*b1cdbd2cSJim Jagielski
1126*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1127*b1cdbd2cSJim Jagielski
IMPL_LINK(SearchTabPage_Impl,OpenHdl,PushButton *,EMPTYARG)1128*b1cdbd2cSJim Jagielski IMPL_LINK( SearchTabPage_Impl, OpenHdl, PushButton*, EMPTYARG )
1129*b1cdbd2cSJim Jagielski {
1130*b1cdbd2cSJim Jagielski aResultsLB.GetDoubleClickHdl().Call( &aResultsLB );
1131*b1cdbd2cSJim Jagielski return 0;
1132*b1cdbd2cSJim Jagielski }
1133*b1cdbd2cSJim Jagielski
1134*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1135*b1cdbd2cSJim Jagielski
IMPL_LINK(SearchTabPage_Impl,ModifyHdl,Edit *,EMPTYARG)1136*b1cdbd2cSJim Jagielski IMPL_LINK( SearchTabPage_Impl, ModifyHdl, Edit*, EMPTYARG )
1137*b1cdbd2cSJim Jagielski {
1138*b1cdbd2cSJim Jagielski String aSearchText = TRIM( aSearchED.GetText() );
1139*b1cdbd2cSJim Jagielski aSearchBtn.Enable( aSearchText.Len() > 0 );
1140*b1cdbd2cSJim Jagielski return 0;
1141*b1cdbd2cSJim Jagielski }
1142*b1cdbd2cSJim Jagielski
1143*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1144*b1cdbd2cSJim Jagielski
Resize()1145*b1cdbd2cSJim Jagielski void SearchTabPage_Impl::Resize()
1146*b1cdbd2cSJim Jagielski {
1147*b1cdbd2cSJim Jagielski Size a6Size = LogicToPixel( Size( 6, 6 ), MAP_APPFONT );
1148*b1cdbd2cSJim Jagielski Size aSize = GetSizePixel();
1149*b1cdbd2cSJim Jagielski if ( aSize.Width() < aMinSize.Width() )
1150*b1cdbd2cSJim Jagielski aSize.Width() = aMinSize.Width();
1151*b1cdbd2cSJim Jagielski Point aPnt = aSearchFT.GetPosPixel();
1152*b1cdbd2cSJim Jagielski Size aNewSize = aSearchFT.GetSizePixel();
1153*b1cdbd2cSJim Jagielski aNewSize.Width() = aSize.Width() - ( aPnt.X() * 2 );
1154*b1cdbd2cSJim Jagielski aSearchFT.SetSizePixel( aNewSize );
1155*b1cdbd2cSJim Jagielski aNewSize.Height() = aResultsLB.GetSizePixel().Height();
1156*b1cdbd2cSJim Jagielski aResultsLB.SetSizePixel( aNewSize );
1157*b1cdbd2cSJim Jagielski aNewSize.Height() = aFullWordsCB.GetSizePixel().Height();
1158*b1cdbd2cSJim Jagielski aFullWordsCB.SetSizePixel( aNewSize );
1159*b1cdbd2cSJim Jagielski aScopeCB.SetSizePixel( aNewSize );
1160*b1cdbd2cSJim Jagielski aNewSize = aSearchED.GetSizePixel();
1161*b1cdbd2cSJim Jagielski aNewSize.Width() = aSize.Width() - ( aPnt.X() * 2 ) -
1162*b1cdbd2cSJim Jagielski ( aSearchBtn.GetSizePixel().Width() + ( aPnt.X() / 2 ) );
1163*b1cdbd2cSJim Jagielski aSearchED.SetSizePixel( aNewSize );
1164*b1cdbd2cSJim Jagielski Point aNewPnt = aSearchBtn.GetPosPixel();
1165*b1cdbd2cSJim Jagielski aNewPnt.X() = aPnt.X() + aNewSize.Width() + ( aPnt.X() / 2 );
1166*b1cdbd2cSJim Jagielski aSearchBtn.SetPosPixel( aNewPnt );
1167*b1cdbd2cSJim Jagielski
1168*b1cdbd2cSJim Jagielski if ( aSize.Height() > aMinSize.Height() )
1169*b1cdbd2cSJim Jagielski {
1170*b1cdbd2cSJim Jagielski long n3Height = a6Size.Height() / 2;
1171*b1cdbd2cSJim Jagielski Size aBtnSize = aOpenBtn.GetSizePixel();
1172*b1cdbd2cSJim Jagielski long nExtraHeight = aBtnSize.Height() + n3Height;
1173*b1cdbd2cSJim Jagielski
1174*b1cdbd2cSJim Jagielski aPnt = aResultsLB.GetPosPixel();
1175*b1cdbd2cSJim Jagielski aNewSize = aResultsLB.GetSizePixel();
1176*b1cdbd2cSJim Jagielski aNewSize.Height() = aSize.Height() - aPnt.Y();
1177*b1cdbd2cSJim Jagielski aNewSize.Height() -= ( nExtraHeight + ( a6Size.Height() * 3 / 2 ) );
1178*b1cdbd2cSJim Jagielski aResultsLB.SetSizePixel( aNewSize );
1179*b1cdbd2cSJim Jagielski
1180*b1cdbd2cSJim Jagielski aPnt.X() += ( aNewSize.Width() - aBtnSize.Width() );
1181*b1cdbd2cSJim Jagielski aPnt.Y() += aNewSize.Height() + a6Size.Height();
1182*b1cdbd2cSJim Jagielski aOpenBtn.SetPosPixel( aPnt );
1183*b1cdbd2cSJim Jagielski }
1184*b1cdbd2cSJim Jagielski }
1185*b1cdbd2cSJim Jagielski
1186*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1187*b1cdbd2cSJim Jagielski
ActivatePage()1188*b1cdbd2cSJim Jagielski void SearchTabPage_Impl::ActivatePage()
1189*b1cdbd2cSJim Jagielski {
1190*b1cdbd2cSJim Jagielski if ( !m_pIdxWin->WasCursorLeftOrRight() )
1191*b1cdbd2cSJim Jagielski aSearchED.GrabFocus();
1192*b1cdbd2cSJim Jagielski }
1193*b1cdbd2cSJim Jagielski
1194*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1195*b1cdbd2cSJim Jagielski
GetLastFocusControl()1196*b1cdbd2cSJim Jagielski Control* SearchTabPage_Impl::GetLastFocusControl()
1197*b1cdbd2cSJim Jagielski {
1198*b1cdbd2cSJim Jagielski return &aOpenBtn;
1199*b1cdbd2cSJim Jagielski }
1200*b1cdbd2cSJim Jagielski
1201*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1202*b1cdbd2cSJim Jagielski
SetDoubleClickHdl(const Link & rLink)1203*b1cdbd2cSJim Jagielski void SearchTabPage_Impl::SetDoubleClickHdl( const Link& rLink )
1204*b1cdbd2cSJim Jagielski {
1205*b1cdbd2cSJim Jagielski aResultsLB.SetDoubleClickHdl( rLink );
1206*b1cdbd2cSJim Jagielski }
1207*b1cdbd2cSJim Jagielski
1208*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1209*b1cdbd2cSJim Jagielski
GetSelectEntry() const1210*b1cdbd2cSJim Jagielski String SearchTabPage_Impl::GetSelectEntry() const
1211*b1cdbd2cSJim Jagielski {
1212*b1cdbd2cSJim Jagielski String aRet;
1213*b1cdbd2cSJim Jagielski String* pData = (String*)(sal_uIntPtr)aResultsLB.GetEntryData( aResultsLB.GetSelectEntryPos() );
1214*b1cdbd2cSJim Jagielski if ( pData )
1215*b1cdbd2cSJim Jagielski aRet = String( *pData );
1216*b1cdbd2cSJim Jagielski return aRet;
1217*b1cdbd2cSJim Jagielski }
1218*b1cdbd2cSJim Jagielski
1219*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1220*b1cdbd2cSJim Jagielski
ClearPage()1221*b1cdbd2cSJim Jagielski void SearchTabPage_Impl::ClearPage()
1222*b1cdbd2cSJim Jagielski {
1223*b1cdbd2cSJim Jagielski ClearSearchResults();
1224*b1cdbd2cSJim Jagielski aSearchED.SetText( String() );
1225*b1cdbd2cSJim Jagielski }
1226*b1cdbd2cSJim Jagielski
1227*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1228*b1cdbd2cSJim Jagielski
OpenKeyword(const String & rKeyword)1229*b1cdbd2cSJim Jagielski sal_Bool SearchTabPage_Impl::OpenKeyword( const String& rKeyword )
1230*b1cdbd2cSJim Jagielski {
1231*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_False;
1232*b1cdbd2cSJim Jagielski aSearchED.SetText( rKeyword );
1233*b1cdbd2cSJim Jagielski SearchHdl( NULL );
1234*b1cdbd2cSJim Jagielski if ( aResultsLB.GetEntryCount() > 0 )
1235*b1cdbd2cSJim Jagielski {
1236*b1cdbd2cSJim Jagielski // found keyword -> open it
1237*b1cdbd2cSJim Jagielski aResultsLB.SelectEntryPos(0);
1238*b1cdbd2cSJim Jagielski OpenHdl( NULL );
1239*b1cdbd2cSJim Jagielski bRet = sal_True;
1240*b1cdbd2cSJim Jagielski }
1241*b1cdbd2cSJim Jagielski
1242*b1cdbd2cSJim Jagielski return bRet;
1243*b1cdbd2cSJim Jagielski }
1244*b1cdbd2cSJim Jagielski
1245*b1cdbd2cSJim Jagielski // class BookmarksTabPage_Impl -------------------------------------------
1246*b1cdbd2cSJim Jagielski
GetBookmarkEntry_Impl(Sequence<PropertyValue> & aBookmarkEntry,::rtl::OUString & rTitle,::rtl::OUString & rURL)1247*b1cdbd2cSJim Jagielski void GetBookmarkEntry_Impl
1248*b1cdbd2cSJim Jagielski (
1249*b1cdbd2cSJim Jagielski Sequence< PropertyValue >& aBookmarkEntry,
1250*b1cdbd2cSJim Jagielski ::rtl::OUString& rTitle,
1251*b1cdbd2cSJim Jagielski ::rtl::OUString& rURL
1252*b1cdbd2cSJim Jagielski )
1253*b1cdbd2cSJim Jagielski {
1254*b1cdbd2cSJim Jagielski for ( int i = 0; i < aBookmarkEntry.getLength(); i++ )
1255*b1cdbd2cSJim Jagielski {
1256*b1cdbd2cSJim Jagielski PropertyValue aValue = aBookmarkEntry[i];
1257*b1cdbd2cSJim Jagielski if ( aValue.Name == HISTORY_PROPERTYNAME_URL )
1258*b1cdbd2cSJim Jagielski aValue.Value >>= rURL;
1259*b1cdbd2cSJim Jagielski else if ( aValue.Name == HISTORY_PROPERTYNAME_TITLE )
1260*b1cdbd2cSJim Jagielski aValue.Value >>= rTitle;
1261*b1cdbd2cSJim Jagielski }
1262*b1cdbd2cSJim Jagielski }
1263*b1cdbd2cSJim Jagielski
1264*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1265*b1cdbd2cSJim Jagielski
BookmarksBox_Impl(Window * pParent,const ResId & rResId)1266*b1cdbd2cSJim Jagielski BookmarksBox_Impl::BookmarksBox_Impl( Window* pParent, const ResId& rResId ) :
1267*b1cdbd2cSJim Jagielski
1268*b1cdbd2cSJim Jagielski ListBox( pParent, rResId )
1269*b1cdbd2cSJim Jagielski
1270*b1cdbd2cSJim Jagielski {
1271*b1cdbd2cSJim Jagielski }
1272*b1cdbd2cSJim Jagielski
1273*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1274*b1cdbd2cSJim Jagielski
~BookmarksBox_Impl()1275*b1cdbd2cSJim Jagielski BookmarksBox_Impl::~BookmarksBox_Impl()
1276*b1cdbd2cSJim Jagielski {
1277*b1cdbd2cSJim Jagielski // save bookmarks to configuration
1278*b1cdbd2cSJim Jagielski SvtHistoryOptions aHistOpt;
1279*b1cdbd2cSJim Jagielski aHistOpt.Clear( eHELPBOOKMARKS );
1280*b1cdbd2cSJim Jagielski rtl::OUString sEmpty;
1281*b1cdbd2cSJim Jagielski sal_uInt16 nCount = GetEntryCount();
1282*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < nCount; ++i )
1283*b1cdbd2cSJim Jagielski {
1284*b1cdbd2cSJim Jagielski String aTitle = GetEntry(i);
1285*b1cdbd2cSJim Jagielski String* pURL = (String*)(sal_uIntPtr)GetEntryData(i);
1286*b1cdbd2cSJim Jagielski aHistOpt.AppendItem( eHELPBOOKMARKS, rtl::OUString( *pURL ), sEmpty, rtl::OUString( aTitle ), sEmpty );
1287*b1cdbd2cSJim Jagielski delete pURL;
1288*b1cdbd2cSJim Jagielski }
1289*b1cdbd2cSJim Jagielski }
1290*b1cdbd2cSJim Jagielski
1291*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1292*b1cdbd2cSJim Jagielski
DoAction(sal_uInt16 nAction)1293*b1cdbd2cSJim Jagielski void BookmarksBox_Impl::DoAction( sal_uInt16 nAction )
1294*b1cdbd2cSJim Jagielski {
1295*b1cdbd2cSJim Jagielski switch ( nAction )
1296*b1cdbd2cSJim Jagielski {
1297*b1cdbd2cSJim Jagielski case MID_OPEN :
1298*b1cdbd2cSJim Jagielski GetDoubleClickHdl().Call( NULL );
1299*b1cdbd2cSJim Jagielski break;
1300*b1cdbd2cSJim Jagielski
1301*b1cdbd2cSJim Jagielski case MID_RENAME :
1302*b1cdbd2cSJim Jagielski {
1303*b1cdbd2cSJim Jagielski sal_uInt16 nPos = GetSelectEntryPos();
1304*b1cdbd2cSJim Jagielski if ( nPos != LISTBOX_ENTRY_NOTFOUND )
1305*b1cdbd2cSJim Jagielski {
1306*b1cdbd2cSJim Jagielski SfxAddHelpBookmarkDialog_Impl aDlg( this, sal_True );
1307*b1cdbd2cSJim Jagielski aDlg.SetTitle( GetEntry( nPos ) );
1308*b1cdbd2cSJim Jagielski if ( aDlg.Execute() == RET_OK )
1309*b1cdbd2cSJim Jagielski {
1310*b1cdbd2cSJim Jagielski String* pURL = (String*)(sal_uIntPtr)GetEntryData( nPos );
1311*b1cdbd2cSJim Jagielski RemoveEntry( nPos );
1312*b1cdbd2cSJim Jagielski rtl::OUString aImageURL = IMAGE_URL;
1313*b1cdbd2cSJim Jagielski aImageURL += INetURLObject( *pURL ).GetHost();
1314*b1cdbd2cSJim Jagielski nPos = InsertEntry( aDlg.GetTitle(), SvFileInformationManager::GetImage( aImageURL ) );
1315*b1cdbd2cSJim Jagielski SetEntryData( nPos, (void*)(sal_uIntPtr)( new String( *pURL ) ) );
1316*b1cdbd2cSJim Jagielski SelectEntryPos( nPos );
1317*b1cdbd2cSJim Jagielski delete pURL;
1318*b1cdbd2cSJim Jagielski }
1319*b1cdbd2cSJim Jagielski }
1320*b1cdbd2cSJim Jagielski break;
1321*b1cdbd2cSJim Jagielski }
1322*b1cdbd2cSJim Jagielski
1323*b1cdbd2cSJim Jagielski case MID_DELETE :
1324*b1cdbd2cSJim Jagielski {
1325*b1cdbd2cSJim Jagielski sal_uInt16 nPos = GetSelectEntryPos();
1326*b1cdbd2cSJim Jagielski if ( nPos != LISTBOX_ENTRY_NOTFOUND )
1327*b1cdbd2cSJim Jagielski {
1328*b1cdbd2cSJim Jagielski RemoveEntry( nPos );
1329*b1cdbd2cSJim Jagielski sal_uInt16 nCount = GetEntryCount();
1330*b1cdbd2cSJim Jagielski if ( nCount )
1331*b1cdbd2cSJim Jagielski {
1332*b1cdbd2cSJim Jagielski if ( nPos >= nCount )
1333*b1cdbd2cSJim Jagielski nPos = nCount - 1;
1334*b1cdbd2cSJim Jagielski SelectEntryPos( nPos );
1335*b1cdbd2cSJim Jagielski }
1336*b1cdbd2cSJim Jagielski }
1337*b1cdbd2cSJim Jagielski break;
1338*b1cdbd2cSJim Jagielski }
1339*b1cdbd2cSJim Jagielski }
1340*b1cdbd2cSJim Jagielski }
1341*b1cdbd2cSJim Jagielski
1342*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1343*b1cdbd2cSJim Jagielski
Notify(NotifyEvent & rNEvt)1344*b1cdbd2cSJim Jagielski long BookmarksBox_Impl::Notify( NotifyEvent& rNEvt )
1345*b1cdbd2cSJim Jagielski {
1346*b1cdbd2cSJim Jagielski long nRet = 0;
1347*b1cdbd2cSJim Jagielski sal_uInt16 nType = rNEvt.GetType();
1348*b1cdbd2cSJim Jagielski if ( EVENT_KEYINPUT == nType )
1349*b1cdbd2cSJim Jagielski {
1350*b1cdbd2cSJim Jagielski sal_uInt16 nCode = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
1351*b1cdbd2cSJim Jagielski if ( KEY_DELETE == nCode && GetEntryCount() > 0 )
1352*b1cdbd2cSJim Jagielski {
1353*b1cdbd2cSJim Jagielski DoAction( MID_DELETE );
1354*b1cdbd2cSJim Jagielski nRet = 1;
1355*b1cdbd2cSJim Jagielski }
1356*b1cdbd2cSJim Jagielski else if ( KEY_RETURN == nCode )
1357*b1cdbd2cSJim Jagielski {
1358*b1cdbd2cSJim Jagielski GetDoubleClickHdl().Call( NULL );
1359*b1cdbd2cSJim Jagielski nRet = 1;
1360*b1cdbd2cSJim Jagielski }
1361*b1cdbd2cSJim Jagielski }
1362*b1cdbd2cSJim Jagielski else if ( EVENT_COMMAND == nType )
1363*b1cdbd2cSJim Jagielski {
1364*b1cdbd2cSJim Jagielski const CommandEvent* pCEvt = rNEvt.GetCommandEvent();
1365*b1cdbd2cSJim Jagielski if ( pCEvt->GetCommand() == COMMAND_CONTEXTMENU )
1366*b1cdbd2cSJim Jagielski {
1367*b1cdbd2cSJim Jagielski PopupMenu aMenu( SfxResId( MENU_HELP_BOOKMARKS ) );
1368*b1cdbd2cSJim Jagielski sal_uInt16 nId = aMenu.Execute( this, pCEvt->GetMousePosPixel() );
1369*b1cdbd2cSJim Jagielski if ( nId != MENU_ITEM_NOTFOUND )
1370*b1cdbd2cSJim Jagielski DoAction( nId );
1371*b1cdbd2cSJim Jagielski nRet = 1;
1372*b1cdbd2cSJim Jagielski }
1373*b1cdbd2cSJim Jagielski }
1374*b1cdbd2cSJim Jagielski
1375*b1cdbd2cSJim Jagielski return nRet ? nRet : ListBox::Notify( rNEvt );
1376*b1cdbd2cSJim Jagielski }
1377*b1cdbd2cSJim Jagielski
1378*b1cdbd2cSJim Jagielski // class BookmarksTabPage_Impl -------------------------------------------
1379*b1cdbd2cSJim Jagielski
BookmarksTabPage_Impl(Window * pParent,SfxHelpIndexWindow_Impl * _pIdxWin)1380*b1cdbd2cSJim Jagielski BookmarksTabPage_Impl::BookmarksTabPage_Impl( Window* pParent, SfxHelpIndexWindow_Impl* _pIdxWin ) :
1381*b1cdbd2cSJim Jagielski
1382*b1cdbd2cSJim Jagielski HelpTabPage_Impl( pParent, _pIdxWin, SfxResId( TP_HELP_BOOKMARKS ) ),
1383*b1cdbd2cSJim Jagielski
1384*b1cdbd2cSJim Jagielski aBookmarksFT ( this, SfxResId( FT_BOOKMARKS ) ),
1385*b1cdbd2cSJim Jagielski aBookmarksBox ( this, SfxResId( LB_BOOKMARKS ) ),
1386*b1cdbd2cSJim Jagielski aBookmarksPB ( this, SfxResId( PB_BOOKMARKS ) )
1387*b1cdbd2cSJim Jagielski
1388*b1cdbd2cSJim Jagielski {
1389*b1cdbd2cSJim Jagielski FreeResource();
1390*b1cdbd2cSJim Jagielski
1391*b1cdbd2cSJim Jagielski nMinWidth = aBookmarksPB.GetSizePixel().Width();
1392*b1cdbd2cSJim Jagielski
1393*b1cdbd2cSJim Jagielski aBookmarksPB.SetClickHdl( LINK( this, BookmarksTabPage_Impl, OpenHdl ) );
1394*b1cdbd2cSJim Jagielski
1395*b1cdbd2cSJim Jagielski // load bookmarks from configuration
1396*b1cdbd2cSJim Jagielski Sequence< Sequence< PropertyValue > > aBookmarkSeq;
1397*b1cdbd2cSJim Jagielski aBookmarkSeq = SvtHistoryOptions().GetList( eHELPBOOKMARKS );
1398*b1cdbd2cSJim Jagielski
1399*b1cdbd2cSJim Jagielski ::rtl::OUString aTitle;
1400*b1cdbd2cSJim Jagielski ::rtl::OUString aURL;
1401*b1cdbd2cSJim Jagielski
1402*b1cdbd2cSJim Jagielski sal_uInt32 i, nCount = aBookmarkSeq.getLength();
1403*b1cdbd2cSJim Jagielski for ( i = 0; i < nCount; ++i )
1404*b1cdbd2cSJim Jagielski {
1405*b1cdbd2cSJim Jagielski GetBookmarkEntry_Impl( aBookmarkSeq[i], aTitle, aURL );
1406*b1cdbd2cSJim Jagielski AddBookmarks( aTitle, aURL );
1407*b1cdbd2cSJim Jagielski }
1408*b1cdbd2cSJim Jagielski }
1409*b1cdbd2cSJim Jagielski
1410*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1411*b1cdbd2cSJim Jagielski
IMPL_LINK(BookmarksTabPage_Impl,OpenHdl,PushButton *,EMPTYARG)1412*b1cdbd2cSJim Jagielski IMPL_LINK( BookmarksTabPage_Impl, OpenHdl, PushButton*, EMPTYARG )
1413*b1cdbd2cSJim Jagielski {
1414*b1cdbd2cSJim Jagielski aBookmarksBox.GetDoubleClickHdl().Call( &aBookmarksBox );
1415*b1cdbd2cSJim Jagielski return 0;
1416*b1cdbd2cSJim Jagielski }
1417*b1cdbd2cSJim Jagielski
1418*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1419*b1cdbd2cSJim Jagielski
Resize()1420*b1cdbd2cSJim Jagielski void BookmarksTabPage_Impl::Resize()
1421*b1cdbd2cSJim Jagielski {
1422*b1cdbd2cSJim Jagielski Size aSize = GetSizePixel();
1423*b1cdbd2cSJim Jagielski if ( aSize.Width() < nMinWidth )
1424*b1cdbd2cSJim Jagielski aSize.Width() = nMinWidth;
1425*b1cdbd2cSJim Jagielski Point aPnt = aBookmarksFT.GetPosPixel();
1426*b1cdbd2cSJim Jagielski Size aNewSize = aBookmarksFT.GetSizePixel();
1427*b1cdbd2cSJim Jagielski aNewSize.Width() = aSize.Width() - ( aPnt.X() * 2 );
1428*b1cdbd2cSJim Jagielski aBookmarksFT.SetSizePixel( aNewSize );
1429*b1cdbd2cSJim Jagielski
1430*b1cdbd2cSJim Jagielski Size a6Size = LogicToPixel( Size( 6, 6 ), MAP_APPFONT );
1431*b1cdbd2cSJim Jagielski Size aBtnSize = aBookmarksPB.GetSizePixel();
1432*b1cdbd2cSJim Jagielski
1433*b1cdbd2cSJim Jagielski aPnt = aBookmarksBox.GetPosPixel();
1434*b1cdbd2cSJim Jagielski aNewSize = aBookmarksBox.GetSizePixel();
1435*b1cdbd2cSJim Jagielski aNewSize.Width() = aSize.Width() - ( aPnt.X() * 2 );
1436*b1cdbd2cSJim Jagielski aNewSize.Height() = aSize.Height() - aPnt.Y();
1437*b1cdbd2cSJim Jagielski aNewSize.Height() -= ( aBtnSize.Height() + ( a6Size.Height() * 3 / 2 ) );
1438*b1cdbd2cSJim Jagielski aBookmarksBox.SetSizePixel( aNewSize );
1439*b1cdbd2cSJim Jagielski
1440*b1cdbd2cSJim Jagielski aPnt.X() += ( aNewSize.Width() - aBtnSize.Width() );
1441*b1cdbd2cSJim Jagielski aPnt.Y() += aNewSize.Height() + ( a6Size.Height() / 2 );
1442*b1cdbd2cSJim Jagielski long nMinX = aBookmarksBox.GetPosPixel().X();
1443*b1cdbd2cSJim Jagielski if ( aPnt.X() < nMinX )
1444*b1cdbd2cSJim Jagielski aPnt.X() = nMinX;
1445*b1cdbd2cSJim Jagielski aBookmarksPB.SetPosPixel( aPnt );
1446*b1cdbd2cSJim Jagielski }
1447*b1cdbd2cSJim Jagielski
1448*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1449*b1cdbd2cSJim Jagielski
ActivatePage()1450*b1cdbd2cSJim Jagielski void BookmarksTabPage_Impl::ActivatePage()
1451*b1cdbd2cSJim Jagielski {
1452*b1cdbd2cSJim Jagielski if ( !m_pIdxWin->WasCursorLeftOrRight() )
1453*b1cdbd2cSJim Jagielski SetFocusOnBox();
1454*b1cdbd2cSJim Jagielski }
1455*b1cdbd2cSJim Jagielski
1456*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1457*b1cdbd2cSJim Jagielski
GetLastFocusControl()1458*b1cdbd2cSJim Jagielski Control* BookmarksTabPage_Impl::GetLastFocusControl()
1459*b1cdbd2cSJim Jagielski {
1460*b1cdbd2cSJim Jagielski return &aBookmarksPB;
1461*b1cdbd2cSJim Jagielski }
1462*b1cdbd2cSJim Jagielski
1463*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1464*b1cdbd2cSJim Jagielski
SetDoubleClickHdl(const Link & rLink)1465*b1cdbd2cSJim Jagielski void BookmarksTabPage_Impl::SetDoubleClickHdl( const Link& rLink )
1466*b1cdbd2cSJim Jagielski {
1467*b1cdbd2cSJim Jagielski aBookmarksBox.SetDoubleClickHdl( rLink );
1468*b1cdbd2cSJim Jagielski }
1469*b1cdbd2cSJim Jagielski
1470*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1471*b1cdbd2cSJim Jagielski
GetSelectEntry() const1472*b1cdbd2cSJim Jagielski String BookmarksTabPage_Impl::GetSelectEntry() const
1473*b1cdbd2cSJim Jagielski {
1474*b1cdbd2cSJim Jagielski String aRet;
1475*b1cdbd2cSJim Jagielski String* pData = (String*)(sal_uIntPtr)aBookmarksBox.GetEntryData( aBookmarksBox.GetSelectEntryPos() );
1476*b1cdbd2cSJim Jagielski if ( pData )
1477*b1cdbd2cSJim Jagielski aRet = String( *pData );
1478*b1cdbd2cSJim Jagielski return aRet;
1479*b1cdbd2cSJim Jagielski }
1480*b1cdbd2cSJim Jagielski
1481*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1482*b1cdbd2cSJim Jagielski
AddBookmarks(const String & rTitle,const String & rURL)1483*b1cdbd2cSJim Jagielski void BookmarksTabPage_Impl::AddBookmarks( const String& rTitle, const String& rURL )
1484*b1cdbd2cSJim Jagielski {
1485*b1cdbd2cSJim Jagielski rtl::OUString aImageURL = IMAGE_URL;
1486*b1cdbd2cSJim Jagielski aImageURL += INetURLObject( rURL ).GetHost();
1487*b1cdbd2cSJim Jagielski sal_uInt16 nPos = aBookmarksBox.InsertEntry( rTitle, SvFileInformationManager::GetImage( aImageURL ) );
1488*b1cdbd2cSJim Jagielski aBookmarksBox.SetEntryData( nPos, (void*)(sal_uIntPtr)( new String( rURL ) ) );
1489*b1cdbd2cSJim Jagielski }
1490*b1cdbd2cSJim Jagielski
1491*b1cdbd2cSJim Jagielski // class SfxHelpIndexWindow_Impl -----------------------------------------
1492*b1cdbd2cSJim Jagielski
splitHelpURL(const::rtl::OUString & sHelpURL,::rtl::OUString & sFactory,::rtl::OUString & sContent,::rtl::OUString & sAnchor)1493*b1cdbd2cSJim Jagielski sal_Bool SfxHelpWindow_Impl::splitHelpURL(const ::rtl::OUString& sHelpURL,
1494*b1cdbd2cSJim Jagielski ::rtl::OUString& sFactory,
1495*b1cdbd2cSJim Jagielski ::rtl::OUString& sContent,
1496*b1cdbd2cSJim Jagielski ::rtl::OUString& sAnchor )
1497*b1cdbd2cSJim Jagielski {
1498*b1cdbd2cSJim Jagielski Reference < XURLTransformer > xParser( ::comphelper::getProcessServiceFactory()->createInstance(
1499*b1cdbd2cSJim Jagielski DEFINE_CONST_UNICODE("com.sun.star.util.URLTransformer" )), UNO_QUERY_THROW );
1500*b1cdbd2cSJim Jagielski
1501*b1cdbd2cSJim Jagielski URL aURL;
1502*b1cdbd2cSJim Jagielski aURL.Complete = sHelpURL;
1503*b1cdbd2cSJim Jagielski sal_Bool bResult = xParser->parseStrict(aURL);
1504*b1cdbd2cSJim Jagielski
1505*b1cdbd2cSJim Jagielski sFactory = aURL.Server;
1506*b1cdbd2cSJim Jagielski sContent = aURL.Path.copy(1); // strip "/"!
1507*b1cdbd2cSJim Jagielski sAnchor = aURL.Mark;
1508*b1cdbd2cSJim Jagielski
1509*b1cdbd2cSJim Jagielski return bResult;
1510*b1cdbd2cSJim Jagielski }
1511*b1cdbd2cSJim Jagielski
buildHelpURL(const::rtl::OUString & sFactory,const::rtl::OUString & sContent,const::rtl::OUString & sAnchor,sal_Bool bUseQuestionMark)1512*b1cdbd2cSJim Jagielski ::rtl::OUString SfxHelpWindow_Impl::buildHelpURL(const ::rtl::OUString& sFactory ,
1513*b1cdbd2cSJim Jagielski const ::rtl::OUString& sContent ,
1514*b1cdbd2cSJim Jagielski const ::rtl::OUString& sAnchor ,
1515*b1cdbd2cSJim Jagielski sal_Bool bUseQuestionMark)
1516*b1cdbd2cSJim Jagielski {
1517*b1cdbd2cSJim Jagielski ::rtl::OUStringBuffer sHelpURL(256);
1518*b1cdbd2cSJim Jagielski sHelpURL.append(HELP_URL);
1519*b1cdbd2cSJim Jagielski sHelpURL.append(sFactory);
1520*b1cdbd2cSJim Jagielski sHelpURL.append(sContent);
1521*b1cdbd2cSJim Jagielski String sURL = String(sHelpURL.makeStringAndClear());
1522*b1cdbd2cSJim Jagielski AppendConfigToken_Impl(sURL, bUseQuestionMark);
1523*b1cdbd2cSJim Jagielski if (sAnchor.getLength())
1524*b1cdbd2cSJim Jagielski sURL += String(sAnchor);
1525*b1cdbd2cSJim Jagielski return ::rtl::OUString(sURL);
1526*b1cdbd2cSJim Jagielski }
1527*b1cdbd2cSJim Jagielski
loadHelpContent(const::rtl::OUString & sHelpURL,sal_Bool bAddToHistory)1528*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::loadHelpContent(const ::rtl::OUString& sHelpURL, sal_Bool bAddToHistory)
1529*b1cdbd2cSJim Jagielski {
1530*b1cdbd2cSJim Jagielski Reference< XComponentLoader > xLoader(getTextFrame(), UNO_QUERY);
1531*b1cdbd2cSJim Jagielski if (!xLoader.is())
1532*b1cdbd2cSJim Jagielski return;
1533*b1cdbd2cSJim Jagielski
1534*b1cdbd2cSJim Jagielski // --> PB 2007-03-12 #134037#
1535*b1cdbd2cSJim Jagielski // If a print job runs do not open a new page
1536*b1cdbd2cSJim Jagielski Reference< XFrame > xTextFrame = pTextWin->getFrame();
1537*b1cdbd2cSJim Jagielski Reference< XController > xTextController ;
1538*b1cdbd2cSJim Jagielski if (xTextFrame.is())
1539*b1cdbd2cSJim Jagielski xTextController = xTextFrame->getController ();
1540*b1cdbd2cSJim Jagielski if ( xTextController.is() && !xTextController->suspend( sal_True ) )
1541*b1cdbd2cSJim Jagielski {
1542*b1cdbd2cSJim Jagielski xTextController->suspend( sal_False );
1543*b1cdbd2cSJim Jagielski return;
1544*b1cdbd2cSJim Jagielski }
1545*b1cdbd2cSJim Jagielski // <--
1546*b1cdbd2cSJim Jagielski
1547*b1cdbd2cSJim Jagielski // save url to history
1548*b1cdbd2cSJim Jagielski if (bAddToHistory)
1549*b1cdbd2cSJim Jagielski pHelpInterceptor->addURL(sHelpURL);
1550*b1cdbd2cSJim Jagielski
1551*b1cdbd2cSJim Jagielski if ( !IsWait() )
1552*b1cdbd2cSJim Jagielski EnterWait();
1553*b1cdbd2cSJim Jagielski sal_Bool bSuccess = sal_False;
1554*b1cdbd2cSJim Jagielski // TODO implement locale fallback ... see below while(sal_True)
1555*b1cdbd2cSJim Jagielski {
1556*b1cdbd2cSJim Jagielski try
1557*b1cdbd2cSJim Jagielski {
1558*b1cdbd2cSJim Jagielski Reference< XComponent > xContent = xLoader->loadComponentFromURL(sHelpURL, DEFINE_CONST_UNICODE("_self"), 0, Sequence< PropertyValue >());
1559*b1cdbd2cSJim Jagielski if (xContent.is())
1560*b1cdbd2cSJim Jagielski {
1561*b1cdbd2cSJim Jagielski bSuccess = sal_True;
1562*b1cdbd2cSJim Jagielski // break;
1563*b1cdbd2cSJim Jagielski }
1564*b1cdbd2cSJim Jagielski }
1565*b1cdbd2cSJim Jagielski catch(const RuntimeException&)
1566*b1cdbd2cSJim Jagielski { throw; }
1567*b1cdbd2cSJim Jagielski catch(const Exception&)
1568*b1cdbd2cSJim Jagielski { /*break;*/ }
1569*b1cdbd2cSJim Jagielski
1570*b1cdbd2cSJim Jagielski /* TODO try next locale ...
1571*b1cdbd2cSJim Jagielski no further locale available? => break loop and show error page
1572*b1cdbd2cSJim Jagielski */
1573*b1cdbd2cSJim Jagielski }
1574*b1cdbd2cSJim Jagielski openDone(sHelpURL, bSuccess);
1575*b1cdbd2cSJim Jagielski if ( IsWait() )
1576*b1cdbd2cSJim Jagielski LeaveWait();
1577*b1cdbd2cSJim Jagielski }
1578*b1cdbd2cSJim Jagielski
SfxHelpIndexWindow_Impl(SfxHelpWindow_Impl * _pParent)1579*b1cdbd2cSJim Jagielski SfxHelpIndexWindow_Impl::SfxHelpIndexWindow_Impl( SfxHelpWindow_Impl* _pParent ) :
1580*b1cdbd2cSJim Jagielski
1581*b1cdbd2cSJim Jagielski Window( _pParent, SfxResId( WIN_HELPINDEX ) ),
1582*b1cdbd2cSJim Jagielski
1583*b1cdbd2cSJim Jagielski aActiveLB ( this, SfxResId( LB_ACTIVE ) ),
1584*b1cdbd2cSJim Jagielski aActiveLine ( this, SfxResId( FL_ACTIVE ) ),
1585*b1cdbd2cSJim Jagielski aTabCtrl ( this, SfxResId( TC_INDEX ) ),
1586*b1cdbd2cSJim Jagielski
1587*b1cdbd2cSJim Jagielski aIndexKeywordLink ( LINK( this, SfxHelpIndexWindow_Impl, KeywordHdl ) ),
1588*b1cdbd2cSJim Jagielski pParentWin ( _pParent ),
1589*b1cdbd2cSJim Jagielski
1590*b1cdbd2cSJim Jagielski pCPage ( NULL ),
1591*b1cdbd2cSJim Jagielski pIPage ( NULL ),
1592*b1cdbd2cSJim Jagielski pSPage ( NULL ),
1593*b1cdbd2cSJim Jagielski pBPage ( NULL ),
1594*b1cdbd2cSJim Jagielski
1595*b1cdbd2cSJim Jagielski bWasCursorLeftOrRight( false ),
1596*b1cdbd2cSJim Jagielski bIsInitDone ( false )
1597*b1cdbd2cSJim Jagielski
1598*b1cdbd2cSJim Jagielski {
1599*b1cdbd2cSJim Jagielski FreeResource();
1600*b1cdbd2cSJim Jagielski
1601*b1cdbd2cSJim Jagielski sfx2::AddToTaskPaneList( this );
1602*b1cdbd2cSJim Jagielski
1603*b1cdbd2cSJim Jagielski aTabCtrl.SetActivatePageHdl( LINK( this, SfxHelpIndexWindow_Impl, ActivatePageHdl ) );
1604*b1cdbd2cSJim Jagielski aTabCtrl.Show();
1605*b1cdbd2cSJim Jagielski
1606*b1cdbd2cSJim Jagielski sal_Int32 nPageId = HELP_INDEX_PAGE_INDEX;
1607*b1cdbd2cSJim Jagielski SvtViewOptions aViewOpt( E_TABDIALOG, CONFIGNAME_INDEXWIN );
1608*b1cdbd2cSJim Jagielski if ( aViewOpt.Exists() )
1609*b1cdbd2cSJim Jagielski nPageId = aViewOpt.GetPageID();
1610*b1cdbd2cSJim Jagielski aTabCtrl.SetCurPageId( (sal_uInt16)nPageId );
1611*b1cdbd2cSJim Jagielski ActivatePageHdl( &aTabCtrl );
1612*b1cdbd2cSJim Jagielski aActiveLB.SetSelectHdl( LINK( this, SfxHelpIndexWindow_Impl, SelectHdl ) );
1613*b1cdbd2cSJim Jagielski nMinWidth = ( aActiveLB.GetSizePixel().Width() / 2 );
1614*b1cdbd2cSJim Jagielski
1615*b1cdbd2cSJim Jagielski aTimer.SetTimeoutHdl( LINK( this, SfxHelpIndexWindow_Impl, InitHdl ) );
1616*b1cdbd2cSJim Jagielski aTimer.SetTimeout( 200 );
1617*b1cdbd2cSJim Jagielski aTimer.Start();
1618*b1cdbd2cSJim Jagielski }
1619*b1cdbd2cSJim Jagielski
1620*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1621*b1cdbd2cSJim Jagielski
~SfxHelpIndexWindow_Impl()1622*b1cdbd2cSJim Jagielski SfxHelpIndexWindow_Impl::~SfxHelpIndexWindow_Impl()
1623*b1cdbd2cSJim Jagielski {
1624*b1cdbd2cSJim Jagielski sfx2::RemoveFromTaskPaneList( this );
1625*b1cdbd2cSJim Jagielski
1626*b1cdbd2cSJim Jagielski DELETEZ( pCPage );
1627*b1cdbd2cSJim Jagielski DELETEZ( pIPage );
1628*b1cdbd2cSJim Jagielski DELETEZ( pSPage );
1629*b1cdbd2cSJim Jagielski DELETEZ( pBPage );
1630*b1cdbd2cSJim Jagielski
1631*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < aActiveLB.GetEntryCount(); ++i )
1632*b1cdbd2cSJim Jagielski delete (String*)(sal_uIntPtr)aActiveLB.GetEntryData(i);
1633*b1cdbd2cSJim Jagielski
1634*b1cdbd2cSJim Jagielski SvtViewOptions aViewOpt( E_TABDIALOG, CONFIGNAME_INDEXWIN );
1635*b1cdbd2cSJim Jagielski aViewOpt.SetPageID( (sal_Int32)aTabCtrl.GetCurPageId() );
1636*b1cdbd2cSJim Jagielski }
1637*b1cdbd2cSJim Jagielski
1638*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1639*b1cdbd2cSJim Jagielski
Initialize()1640*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::Initialize()
1641*b1cdbd2cSJim Jagielski {
1642*b1cdbd2cSJim Jagielski String aHelpURL = HELP_URL;
1643*b1cdbd2cSJim Jagielski AppendConfigToken_Impl( aHelpURL, sal_True );
1644*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > aFactories = SfxContentHelper::GetResultSet( aHelpURL );
1645*b1cdbd2cSJim Jagielski const ::rtl::OUString* pFacs = aFactories.getConstArray();
1646*b1cdbd2cSJim Jagielski sal_uInt32 i, nCount = aFactories.getLength();
1647*b1cdbd2cSJim Jagielski for ( i = 0; i < nCount; ++i )
1648*b1cdbd2cSJim Jagielski {
1649*b1cdbd2cSJim Jagielski String aRow( pFacs[i] );
1650*b1cdbd2cSJim Jagielski String aTitle, aType, aURL;
1651*b1cdbd2cSJim Jagielski xub_StrLen nIdx = 0;
1652*b1cdbd2cSJim Jagielski aTitle = aRow.GetToken( 0, '\t', nIdx );
1653*b1cdbd2cSJim Jagielski aType = aRow.GetToken( 0, '\t', nIdx );
1654*b1cdbd2cSJim Jagielski aURL = aRow.GetToken( 0, '\t', nIdx );
1655*b1cdbd2cSJim Jagielski String* pFactory = new String( INetURLObject( aURL ).GetHost() );
1656*b1cdbd2cSJim Jagielski sal_uInt16 nPos = aActiveLB.InsertEntry( aTitle );
1657*b1cdbd2cSJim Jagielski aActiveLB.SetEntryData( nPos, (void*)(sal_uIntPtr)pFactory );
1658*b1cdbd2cSJim Jagielski }
1659*b1cdbd2cSJim Jagielski
1660*b1cdbd2cSJim Jagielski aActiveLB.SetDropDownLineCount( (sal_uInt16)nCount );
1661*b1cdbd2cSJim Jagielski if ( aActiveLB.GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND )
1662*b1cdbd2cSJim Jagielski SetActiveFactory();
1663*b1cdbd2cSJim Jagielski }
1664*b1cdbd2cSJim Jagielski
1665*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1666*b1cdbd2cSJim Jagielski
SetActiveFactory()1667*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::SetActiveFactory()
1668*b1cdbd2cSJim Jagielski {
1669*b1cdbd2cSJim Jagielski DBG_ASSERT( pIPage, "index page not initialized" );
1670*b1cdbd2cSJim Jagielski if ( !bIsInitDone && !aActiveLB.GetEntryCount() )
1671*b1cdbd2cSJim Jagielski {
1672*b1cdbd2cSJim Jagielski aTimer.Stop();
1673*b1cdbd2cSJim Jagielski InitHdl( NULL );
1674*b1cdbd2cSJim Jagielski }
1675*b1cdbd2cSJim Jagielski
1676*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < aActiveLB.GetEntryCount(); ++i )
1677*b1cdbd2cSJim Jagielski {
1678*b1cdbd2cSJim Jagielski String* pFactory = (String*)(sal_uIntPtr)aActiveLB.GetEntryData(i);
1679*b1cdbd2cSJim Jagielski pFactory->ToLowerAscii();
1680*b1cdbd2cSJim Jagielski if ( *pFactory == pIPage->GetFactory() )
1681*b1cdbd2cSJim Jagielski {
1682*b1cdbd2cSJim Jagielski if ( aActiveLB.GetSelectEntryPos() != i )
1683*b1cdbd2cSJim Jagielski {
1684*b1cdbd2cSJim Jagielski aActiveLB.SelectEntryPos(i);
1685*b1cdbd2cSJim Jagielski aSelectFactoryLink.Call( NULL );
1686*b1cdbd2cSJim Jagielski }
1687*b1cdbd2cSJim Jagielski break;
1688*b1cdbd2cSJim Jagielski }
1689*b1cdbd2cSJim Jagielski }
1690*b1cdbd2cSJim Jagielski }
1691*b1cdbd2cSJim Jagielski
1692*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1693*b1cdbd2cSJim Jagielski
GetCurrentPage(sal_uInt16 & rCurId)1694*b1cdbd2cSJim Jagielski HelpTabPage_Impl* SfxHelpIndexWindow_Impl::GetCurrentPage( sal_uInt16& rCurId )
1695*b1cdbd2cSJim Jagielski {
1696*b1cdbd2cSJim Jagielski rCurId = aTabCtrl.GetCurPageId();
1697*b1cdbd2cSJim Jagielski HelpTabPage_Impl* pPage = NULL;
1698*b1cdbd2cSJim Jagielski
1699*b1cdbd2cSJim Jagielski switch ( rCurId )
1700*b1cdbd2cSJim Jagielski {
1701*b1cdbd2cSJim Jagielski case HELP_INDEX_PAGE_CONTENTS:
1702*b1cdbd2cSJim Jagielski {
1703*b1cdbd2cSJim Jagielski pPage = GetContentPage();
1704*b1cdbd2cSJim Jagielski break;
1705*b1cdbd2cSJim Jagielski }
1706*b1cdbd2cSJim Jagielski
1707*b1cdbd2cSJim Jagielski case HELP_INDEX_PAGE_INDEX:
1708*b1cdbd2cSJim Jagielski {
1709*b1cdbd2cSJim Jagielski pPage = GetIndexPage();
1710*b1cdbd2cSJim Jagielski break;
1711*b1cdbd2cSJim Jagielski }
1712*b1cdbd2cSJim Jagielski
1713*b1cdbd2cSJim Jagielski case HELP_INDEX_PAGE_SEARCH:
1714*b1cdbd2cSJim Jagielski {
1715*b1cdbd2cSJim Jagielski pPage = GetSearchPage();
1716*b1cdbd2cSJim Jagielski break;
1717*b1cdbd2cSJim Jagielski }
1718*b1cdbd2cSJim Jagielski
1719*b1cdbd2cSJim Jagielski case HELP_INDEX_PAGE_BOOKMARKS:
1720*b1cdbd2cSJim Jagielski {
1721*b1cdbd2cSJim Jagielski pPage = GetBookmarksPage();
1722*b1cdbd2cSJim Jagielski break;
1723*b1cdbd2cSJim Jagielski }
1724*b1cdbd2cSJim Jagielski }
1725*b1cdbd2cSJim Jagielski
1726*b1cdbd2cSJim Jagielski DBG_ASSERT( pPage, "SfxHelpIndexWindow_Impl::GetCurrentPage(): no current page" );
1727*b1cdbd2cSJim Jagielski return pPage;
1728*b1cdbd2cSJim Jagielski }
1729*b1cdbd2cSJim Jagielski
1730*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1731*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpIndexWindow_Impl,ActivatePageHdl,TabControl *,pTabCtrl)1732*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpIndexWindow_Impl, ActivatePageHdl, TabControl *, pTabCtrl )
1733*b1cdbd2cSJim Jagielski {
1734*b1cdbd2cSJim Jagielski sal_uInt16 nId = 0;
1735*b1cdbd2cSJim Jagielski TabPage* pPage = GetCurrentPage( nId );
1736*b1cdbd2cSJim Jagielski pTabCtrl->SetTabPage( nId, pPage );
1737*b1cdbd2cSJim Jagielski return 0;
1738*b1cdbd2cSJim Jagielski }
1739*b1cdbd2cSJim Jagielski
1740*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1741*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpIndexWindow_Impl,SelectHdl,ListBox *,EMPTYARG)1742*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpIndexWindow_Impl, SelectHdl, ListBox *, EMPTYARG )
1743*b1cdbd2cSJim Jagielski {
1744*b1cdbd2cSJim Jagielski aTimer.Start();
1745*b1cdbd2cSJim Jagielski
1746*b1cdbd2cSJim Jagielski return 0;
1747*b1cdbd2cSJim Jagielski }
1748*b1cdbd2cSJim Jagielski
1749*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1750*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpIndexWindow_Impl,InitHdl,Timer *,EMPTYARG)1751*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpIndexWindow_Impl, InitHdl, Timer *, EMPTYARG )
1752*b1cdbd2cSJim Jagielski {
1753*b1cdbd2cSJim Jagielski bIsInitDone = true;
1754*b1cdbd2cSJim Jagielski Initialize();
1755*b1cdbd2cSJim Jagielski
1756*b1cdbd2cSJim Jagielski // now use the timer for selection
1757*b1cdbd2cSJim Jagielski aTimer.SetTimeoutHdl( LINK( this, SfxHelpIndexWindow_Impl, SelectFactoryHdl ) );
1758*b1cdbd2cSJim Jagielski aTimer.SetTimeout( 1000 );
1759*b1cdbd2cSJim Jagielski
1760*b1cdbd2cSJim Jagielski return 0;
1761*b1cdbd2cSJim Jagielski }
1762*b1cdbd2cSJim Jagielski
1763*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1764*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpIndexWindow_Impl,SelectFactoryHdl,Timer *,EMPTYARG)1765*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpIndexWindow_Impl, SelectFactoryHdl, Timer *, EMPTYARG )
1766*b1cdbd2cSJim Jagielski {
1767*b1cdbd2cSJim Jagielski String* pFactory = (String*)(sal_uIntPtr)aActiveLB.GetEntryData( aActiveLB.GetSelectEntryPos() );
1768*b1cdbd2cSJim Jagielski if ( pFactory )
1769*b1cdbd2cSJim Jagielski {
1770*b1cdbd2cSJim Jagielski String aFactory( *pFactory );
1771*b1cdbd2cSJim Jagielski aFactory.ToLowerAscii();
1772*b1cdbd2cSJim Jagielski SetFactory( aFactory, sal_False );
1773*b1cdbd2cSJim Jagielski aSelectFactoryLink.Call( this );
1774*b1cdbd2cSJim Jagielski }
1775*b1cdbd2cSJim Jagielski
1776*b1cdbd2cSJim Jagielski return 0;
1777*b1cdbd2cSJim Jagielski }
1778*b1cdbd2cSJim Jagielski
1779*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1780*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpIndexWindow_Impl,KeywordHdl,IndexTabPage_Impl *,EMPTYARG)1781*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpIndexWindow_Impl, KeywordHdl, IndexTabPage_Impl *, EMPTYARG )
1782*b1cdbd2cSJim Jagielski {
1783*b1cdbd2cSJim Jagielski // keyword found on index?
1784*b1cdbd2cSJim Jagielski sal_Bool bIndex = pIPage->HasKeyword();
1785*b1cdbd2cSJim Jagielski //The following two lines are added by BerryJia for fixing Bug98251, 2002-12-11
1786*b1cdbd2cSJim Jagielski if( !bIndex)
1787*b1cdbd2cSJim Jagielski bIndex = pIPage->HasKeywordIgnoreCase();
1788*b1cdbd2cSJim Jagielski // then set index or search page as current.
1789*b1cdbd2cSJim Jagielski sal_uInt16 nPageId = ( bIndex ) ? HELP_INDEX_PAGE_INDEX : HELP_INDEX_PAGE_SEARCH;
1790*b1cdbd2cSJim Jagielski if ( nPageId != aTabCtrl.GetCurPageId() )
1791*b1cdbd2cSJim Jagielski {
1792*b1cdbd2cSJim Jagielski aTabCtrl.SetCurPageId( nPageId );
1793*b1cdbd2cSJim Jagielski ActivatePageHdl( &aTabCtrl );
1794*b1cdbd2cSJim Jagielski }
1795*b1cdbd2cSJim Jagielski
1796*b1cdbd2cSJim Jagielski // at last we open the keyword
1797*b1cdbd2cSJim Jagielski if ( bIndex )
1798*b1cdbd2cSJim Jagielski pIPage->OpenKeyword();
1799*b1cdbd2cSJim Jagielski else if ( !pSPage->OpenKeyword( sKeyword ) )
1800*b1cdbd2cSJim Jagielski pParentWin->ShowStartPage();
1801*b1cdbd2cSJim Jagielski
1802*b1cdbd2cSJim Jagielski return 0;
1803*b1cdbd2cSJim Jagielski }
1804*b1cdbd2cSJim Jagielski
1805*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1806*b1cdbd2cSJim Jagielski
Resize()1807*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::Resize()
1808*b1cdbd2cSJim Jagielski {
1809*b1cdbd2cSJim Jagielski Size aSize = GetOutputSizePixel();
1810*b1cdbd2cSJim Jagielski if ( aSize.Width() < nMinWidth )
1811*b1cdbd2cSJim Jagielski aSize.Width() = nMinWidth;
1812*b1cdbd2cSJim Jagielski
1813*b1cdbd2cSJim Jagielski Point aPnt = aActiveLB.GetPosPixel();
1814*b1cdbd2cSJim Jagielski Size aNewSize = aActiveLB.GetSizePixel();
1815*b1cdbd2cSJim Jagielski aNewSize.Width() = aSize.Width() - ( aPnt.X() * 2 );
1816*b1cdbd2cSJim Jagielski aActiveLB.SetSizePixel( aNewSize );
1817*b1cdbd2cSJim Jagielski aPnt = aActiveLine.GetPosPixel();
1818*b1cdbd2cSJim Jagielski aNewSize = aActiveLine.GetSizePixel();
1819*b1cdbd2cSJim Jagielski aNewSize.Width() = aSize.Width() - ( aPnt.X() * 2 );
1820*b1cdbd2cSJim Jagielski aActiveLine.SetSizePixel( aNewSize );
1821*b1cdbd2cSJim Jagielski aPnt = aTabCtrl.GetPosPixel();
1822*b1cdbd2cSJim Jagielski aNewSize = aSize;
1823*b1cdbd2cSJim Jagielski aSize.Width() -= aPnt.X();
1824*b1cdbd2cSJim Jagielski aSize.Height() -= aPnt.Y();
1825*b1cdbd2cSJim Jagielski aTabCtrl.SetSizePixel( aSize );
1826*b1cdbd2cSJim Jagielski }
1827*b1cdbd2cSJim Jagielski
1828*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1829*b1cdbd2cSJim Jagielski
PreNotify(NotifyEvent & rNEvt)1830*b1cdbd2cSJim Jagielski long SfxHelpIndexWindow_Impl::PreNotify( NotifyEvent& rNEvt )
1831*b1cdbd2cSJim Jagielski {
1832*b1cdbd2cSJim Jagielski long nDone = 0;
1833*b1cdbd2cSJim Jagielski sal_uInt16 nType = rNEvt.GetType();
1834*b1cdbd2cSJim Jagielski if ( EVENT_KEYINPUT == nType && rNEvt.GetKeyEvent() )
1835*b1cdbd2cSJim Jagielski {
1836*b1cdbd2cSJim Jagielski const KeyCode& rKeyCode = rNEvt.GetKeyEvent()->GetKeyCode();
1837*b1cdbd2cSJim Jagielski sal_uInt16 nCode = rKeyCode.GetCode();
1838*b1cdbd2cSJim Jagielski
1839*b1cdbd2cSJim Jagielski if ( KEY_TAB == nCode )
1840*b1cdbd2cSJim Jagielski {
1841*b1cdbd2cSJim Jagielski // don't exit index pane with <TAB>
1842*b1cdbd2cSJim Jagielski sal_uInt16 nPageId = 0;
1843*b1cdbd2cSJim Jagielski HelpTabPage_Impl* pCurPage = GetCurrentPage( nPageId );
1844*b1cdbd2cSJim Jagielski Control* pControl = pCurPage->GetLastFocusControl();
1845*b1cdbd2cSJim Jagielski sal_Bool bShift = rKeyCode.IsShift();
1846*b1cdbd2cSJim Jagielski sal_Bool bCtrl = rKeyCode.IsMod1();
1847*b1cdbd2cSJim Jagielski if ( !bCtrl && bShift && aActiveLB.HasChildPathFocus() )
1848*b1cdbd2cSJim Jagielski {
1849*b1cdbd2cSJim Jagielski pControl->GrabFocus();
1850*b1cdbd2cSJim Jagielski nDone = 1;
1851*b1cdbd2cSJim Jagielski }
1852*b1cdbd2cSJim Jagielski else if ( !bCtrl && !bShift && pControl->HasChildPathFocus() )
1853*b1cdbd2cSJim Jagielski {
1854*b1cdbd2cSJim Jagielski aActiveLB.GrabFocus();
1855*b1cdbd2cSJim Jagielski nDone = 1;
1856*b1cdbd2cSJim Jagielski }
1857*b1cdbd2cSJim Jagielski else if ( bCtrl )
1858*b1cdbd2cSJim Jagielski {
1859*b1cdbd2cSJim Jagielski // <STRG><TAB> moves through the pages
1860*b1cdbd2cSJim Jagielski if ( nPageId < HELP_INDEX_PAGE_LAST )
1861*b1cdbd2cSJim Jagielski nPageId++;
1862*b1cdbd2cSJim Jagielski else
1863*b1cdbd2cSJim Jagielski nPageId = HELP_INDEX_PAGE_FIRST;
1864*b1cdbd2cSJim Jagielski aTabCtrl.SetCurPageId( (sal_uInt16)nPageId );
1865*b1cdbd2cSJim Jagielski ActivatePageHdl( &aTabCtrl );
1866*b1cdbd2cSJim Jagielski nDone = 1;
1867*b1cdbd2cSJim Jagielski }
1868*b1cdbd2cSJim Jagielski }
1869*b1cdbd2cSJim Jagielski else if ( aTabCtrl.HasFocus() && ( KEY_LEFT == nCode || KEY_RIGHT == nCode ) )
1870*b1cdbd2cSJim Jagielski {
1871*b1cdbd2cSJim Jagielski bWasCursorLeftOrRight = true;
1872*b1cdbd2cSJim Jagielski }
1873*b1cdbd2cSJim Jagielski }
1874*b1cdbd2cSJim Jagielski
1875*b1cdbd2cSJim Jagielski return nDone ? nDone : Window::PreNotify( rNEvt );
1876*b1cdbd2cSJim Jagielski }
1877*b1cdbd2cSJim Jagielski
1878*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1879*b1cdbd2cSJim Jagielski
DataChanged(const DataChangedEvent & rDCEvt)1880*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::DataChanged( const DataChangedEvent& rDCEvt )
1881*b1cdbd2cSJim Jagielski {
1882*b1cdbd2cSJim Jagielski Window::DataChanged( rDCEvt );
1883*b1cdbd2cSJim Jagielski
1884*b1cdbd2cSJim Jagielski if ( ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) ||
1885*b1cdbd2cSJim Jagielski ( rDCEvt.GetType() == DATACHANGED_DISPLAY ) ) &&
1886*b1cdbd2cSJim Jagielski ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
1887*b1cdbd2cSJim Jagielski {
1888*b1cdbd2cSJim Jagielski SetBackground( Wallpaper( GetSettings().GetStyleSettings().GetFaceColor() ) );
1889*b1cdbd2cSJim Jagielski }
1890*b1cdbd2cSJim Jagielski }
1891*b1cdbd2cSJim Jagielski
1892*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1893*b1cdbd2cSJim Jagielski
SetDoubleClickHdl(const Link & rLink)1894*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::SetDoubleClickHdl( const Link& rLink )
1895*b1cdbd2cSJim Jagielski {
1896*b1cdbd2cSJim Jagielski aPageDoubleClickLink = rLink;
1897*b1cdbd2cSJim Jagielski if ( pCPage )
1898*b1cdbd2cSJim Jagielski pCPage->SetOpenHdl( aPageDoubleClickLink );
1899*b1cdbd2cSJim Jagielski if ( pIPage )
1900*b1cdbd2cSJim Jagielski pIPage->SetDoubleClickHdl( aPageDoubleClickLink );
1901*b1cdbd2cSJim Jagielski if ( pSPage )
1902*b1cdbd2cSJim Jagielski pSPage->SetDoubleClickHdl( aPageDoubleClickLink );
1903*b1cdbd2cSJim Jagielski if ( pBPage )
1904*b1cdbd2cSJim Jagielski pBPage->SetDoubleClickHdl( aPageDoubleClickLink );
1905*b1cdbd2cSJim Jagielski }
1906*b1cdbd2cSJim Jagielski
1907*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1908*b1cdbd2cSJim Jagielski
SetFactory(const String & rFactory,sal_Bool bActive)1909*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::SetFactory( const String& rFactory, sal_Bool bActive )
1910*b1cdbd2cSJim Jagielski {
1911*b1cdbd2cSJim Jagielski if ( rFactory.Len() > 0 )
1912*b1cdbd2cSJim Jagielski {
1913*b1cdbd2cSJim Jagielski GetIndexPage()->SetFactory( rFactory );
1914*b1cdbd2cSJim Jagielski // the index page did a check if rFactory is valid,
1915*b1cdbd2cSJim Jagielski // so the index page always returns a valid factory
1916*b1cdbd2cSJim Jagielski GetSearchPage()->SetFactory( GetIndexPage()->GetFactory() );
1917*b1cdbd2cSJim Jagielski if ( bActive )
1918*b1cdbd2cSJim Jagielski SetActiveFactory();
1919*b1cdbd2cSJim Jagielski }
1920*b1cdbd2cSJim Jagielski }
1921*b1cdbd2cSJim Jagielski
1922*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1923*b1cdbd2cSJim Jagielski
GetSelectEntry() const1924*b1cdbd2cSJim Jagielski String SfxHelpIndexWindow_Impl::GetSelectEntry() const
1925*b1cdbd2cSJim Jagielski {
1926*b1cdbd2cSJim Jagielski String sRet;
1927*b1cdbd2cSJim Jagielski
1928*b1cdbd2cSJim Jagielski switch ( aTabCtrl.GetCurPageId() )
1929*b1cdbd2cSJim Jagielski {
1930*b1cdbd2cSJim Jagielski case HELP_INDEX_PAGE_CONTENTS:
1931*b1cdbd2cSJim Jagielski sRet = pCPage->GetSelectEntry();
1932*b1cdbd2cSJim Jagielski break;
1933*b1cdbd2cSJim Jagielski
1934*b1cdbd2cSJim Jagielski case HELP_INDEX_PAGE_INDEX:
1935*b1cdbd2cSJim Jagielski sRet = pIPage->GetSelectEntry();
1936*b1cdbd2cSJim Jagielski break;
1937*b1cdbd2cSJim Jagielski
1938*b1cdbd2cSJim Jagielski case HELP_INDEX_PAGE_SEARCH:
1939*b1cdbd2cSJim Jagielski sRet = pSPage->GetSelectEntry();
1940*b1cdbd2cSJim Jagielski break;
1941*b1cdbd2cSJim Jagielski
1942*b1cdbd2cSJim Jagielski case HELP_INDEX_PAGE_BOOKMARKS:
1943*b1cdbd2cSJim Jagielski sRet = pBPage->GetSelectEntry();
1944*b1cdbd2cSJim Jagielski break;
1945*b1cdbd2cSJim Jagielski }
1946*b1cdbd2cSJim Jagielski
1947*b1cdbd2cSJim Jagielski return sRet;
1948*b1cdbd2cSJim Jagielski }
1949*b1cdbd2cSJim Jagielski
1950*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1951*b1cdbd2cSJim Jagielski
AddBookmarks(const String & rTitle,const String & rURL)1952*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::AddBookmarks( const String& rTitle, const String& rURL )
1953*b1cdbd2cSJim Jagielski {
1954*b1cdbd2cSJim Jagielski GetBookmarksPage()->AddBookmarks( rTitle, rURL );
1955*b1cdbd2cSJim Jagielski }
1956*b1cdbd2cSJim Jagielski
1957*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1958*b1cdbd2cSJim Jagielski
IsValidFactory(const String & _rFactory)1959*b1cdbd2cSJim Jagielski bool SfxHelpIndexWindow_Impl::IsValidFactory( const String& _rFactory )
1960*b1cdbd2cSJim Jagielski {
1961*b1cdbd2cSJim Jagielski bool bValid = false;
1962*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < aActiveLB.GetEntryCount(); ++i )
1963*b1cdbd2cSJim Jagielski {
1964*b1cdbd2cSJim Jagielski String* pFactory = (String*)(sal_uIntPtr)aActiveLB.GetEntryData(i);
1965*b1cdbd2cSJim Jagielski if ( *pFactory == _rFactory )
1966*b1cdbd2cSJim Jagielski {
1967*b1cdbd2cSJim Jagielski bValid = true;
1968*b1cdbd2cSJim Jagielski break;
1969*b1cdbd2cSJim Jagielski }
1970*b1cdbd2cSJim Jagielski }
1971*b1cdbd2cSJim Jagielski return bValid;
1972*b1cdbd2cSJim Jagielski }
1973*b1cdbd2cSJim Jagielski
1974*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1975*b1cdbd2cSJim Jagielski
ClearSearchPage()1976*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::ClearSearchPage()
1977*b1cdbd2cSJim Jagielski {
1978*b1cdbd2cSJim Jagielski if ( pSPage )
1979*b1cdbd2cSJim Jagielski pSPage->ClearPage();
1980*b1cdbd2cSJim Jagielski }
1981*b1cdbd2cSJim Jagielski
1982*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1983*b1cdbd2cSJim Jagielski
GrabFocusBack()1984*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::GrabFocusBack()
1985*b1cdbd2cSJim Jagielski {
1986*b1cdbd2cSJim Jagielski if ( aTabCtrl.GetCurPageId() == HELP_INDEX_PAGE_CONTENTS && pCPage )
1987*b1cdbd2cSJim Jagielski pCPage->SetFocusOnBox();
1988*b1cdbd2cSJim Jagielski else if ( aTabCtrl.GetCurPageId() == HELP_INDEX_PAGE_INDEX && pIPage )
1989*b1cdbd2cSJim Jagielski pIPage->SetFocusOnBox();
1990*b1cdbd2cSJim Jagielski else if ( aTabCtrl.GetCurPageId() == HELP_INDEX_PAGE_SEARCH && pSPage )
1991*b1cdbd2cSJim Jagielski pSPage->SetFocusOnBox();
1992*b1cdbd2cSJim Jagielski else if ( aTabCtrl.GetCurPageId() == HELP_INDEX_PAGE_BOOKMARKS && pBPage )
1993*b1cdbd2cSJim Jagielski pBPage->SetFocusOnBox();
1994*b1cdbd2cSJim Jagielski }
1995*b1cdbd2cSJim Jagielski
1996*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1997*b1cdbd2cSJim Jagielski
HasFocusOnEdit() const1998*b1cdbd2cSJim Jagielski sal_Bool SfxHelpIndexWindow_Impl::HasFocusOnEdit() const
1999*b1cdbd2cSJim Jagielski {
2000*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_False;
2001*b1cdbd2cSJim Jagielski if ( aTabCtrl.GetCurPageId() == HELP_INDEX_PAGE_INDEX && pIPage )
2002*b1cdbd2cSJim Jagielski bRet = pIPage->HasFocusOnEdit();
2003*b1cdbd2cSJim Jagielski else if ( aTabCtrl.GetCurPageId() == HELP_INDEX_PAGE_SEARCH && pSPage )
2004*b1cdbd2cSJim Jagielski bRet = pSPage->HasFocusOnEdit();
2005*b1cdbd2cSJim Jagielski return bRet;
2006*b1cdbd2cSJim Jagielski }
2007*b1cdbd2cSJim Jagielski
2008*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2009*b1cdbd2cSJim Jagielski
GetSearchText() const2010*b1cdbd2cSJim Jagielski String SfxHelpIndexWindow_Impl::GetSearchText() const
2011*b1cdbd2cSJim Jagielski {
2012*b1cdbd2cSJim Jagielski String sRet;
2013*b1cdbd2cSJim Jagielski if ( aTabCtrl.GetCurPageId() == HELP_INDEX_PAGE_SEARCH && pSPage )
2014*b1cdbd2cSJim Jagielski sRet = pSPage->GetSearchText();
2015*b1cdbd2cSJim Jagielski return sRet;
2016*b1cdbd2cSJim Jagielski }
2017*b1cdbd2cSJim Jagielski
2018*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2019*b1cdbd2cSJim Jagielski
IsFullWordSearch() const2020*b1cdbd2cSJim Jagielski sal_Bool SfxHelpIndexWindow_Impl::IsFullWordSearch() const
2021*b1cdbd2cSJim Jagielski {
2022*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_False;
2023*b1cdbd2cSJim Jagielski if ( aTabCtrl.GetCurPageId() == HELP_INDEX_PAGE_SEARCH && pSPage )
2024*b1cdbd2cSJim Jagielski bRet = pSPage->IsFullWordSearch();
2025*b1cdbd2cSJim Jagielski return bRet;
2026*b1cdbd2cSJim Jagielski }
2027*b1cdbd2cSJim Jagielski
2028*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2029*b1cdbd2cSJim Jagielski
OpenKeyword(const String & rKeyword)2030*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::OpenKeyword( const String& rKeyword )
2031*b1cdbd2cSJim Jagielski {
2032*b1cdbd2cSJim Jagielski sKeyword = rKeyword;
2033*b1cdbd2cSJim Jagielski DBG_ASSERT( pIPage, "invalid index page" );
2034*b1cdbd2cSJim Jagielski pIPage->SetKeyword( sKeyword );
2035*b1cdbd2cSJim Jagielski }
2036*b1cdbd2cSJim Jagielski
2037*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2038*b1cdbd2cSJim Jagielski
SelectExecutableEntry()2039*b1cdbd2cSJim Jagielski void SfxHelpIndexWindow_Impl::SelectExecutableEntry()
2040*b1cdbd2cSJim Jagielski {
2041*b1cdbd2cSJim Jagielski if ( aTabCtrl.GetCurPageId() == HELP_INDEX_PAGE_INDEX && pIPage )
2042*b1cdbd2cSJim Jagielski pIPage->SelectExecutableEntry();
2043*b1cdbd2cSJim Jagielski }
2044*b1cdbd2cSJim Jagielski
2045*b1cdbd2cSJim Jagielski // class TextWin_Impl ----------------------------------------------------
2046*b1cdbd2cSJim Jagielski
TextWin_Impl(Window * p)2047*b1cdbd2cSJim Jagielski TextWin_Impl::TextWin_Impl( Window* p ) : DockingWindow( p, 0 )
2048*b1cdbd2cSJim Jagielski {
2049*b1cdbd2cSJim Jagielski }
2050*b1cdbd2cSJim Jagielski
~TextWin_Impl()2051*b1cdbd2cSJim Jagielski TextWin_Impl::~TextWin_Impl()
2052*b1cdbd2cSJim Jagielski {
2053*b1cdbd2cSJim Jagielski }
2054*b1cdbd2cSJim Jagielski
Notify(NotifyEvent & rNEvt)2055*b1cdbd2cSJim Jagielski long TextWin_Impl::Notify( NotifyEvent& rNEvt )
2056*b1cdbd2cSJim Jagielski {
2057*b1cdbd2cSJim Jagielski if( ( rNEvt.GetType() == EVENT_KEYINPUT ) && rNEvt.GetKeyEvent()->GetKeyCode().GetCode() == KEY_TAB )
2058*b1cdbd2cSJim Jagielski return GetParent()->Notify( rNEvt );
2059*b1cdbd2cSJim Jagielski else
2060*b1cdbd2cSJim Jagielski return DockingWindow::Notify( rNEvt );
2061*b1cdbd2cSJim Jagielski }
2062*b1cdbd2cSJim Jagielski
2063*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2064*b1cdbd2cSJim Jagielski // remove docking area acceptor from layoutmanager, so it will not layout anything further .-)
lcl_disableLayoutOfFrame(const Reference<XFrame> & xFrame)2065*b1cdbd2cSJim Jagielski void lcl_disableLayoutOfFrame(const Reference< XFrame >& xFrame)
2066*b1cdbd2cSJim Jagielski {
2067*b1cdbd2cSJim Jagielski static const ::rtl::OUString PROP_LAYOUT_MANAGER(DEFINE_CONST_UNICODE("LayoutManager"));
2068*b1cdbd2cSJim Jagielski
2069*b1cdbd2cSJim Jagielski Reference< XPropertySet > xPropSet(xFrame, UNO_QUERY_THROW);
2070*b1cdbd2cSJim Jagielski xPropSet->setPropertyValue(PROP_LAYOUT_MANAGER, makeAny(Reference< XLayoutManager >()));
2071*b1cdbd2cSJim Jagielski }
2072*b1cdbd2cSJim Jagielski
2073*b1cdbd2cSJim Jagielski // class SfxHelpTextWindow_Impl ------------------------------------------
2074*b1cdbd2cSJim Jagielski
SfxHelpTextWindow_Impl(SfxHelpWindow_Impl * pParent)2075*b1cdbd2cSJim Jagielski SfxHelpTextWindow_Impl::SfxHelpTextWindow_Impl( SfxHelpWindow_Impl* pParent ) :
2076*b1cdbd2cSJim Jagielski
2077*b1cdbd2cSJim Jagielski Window( pParent, WB_CLIPCHILDREN | WB_TABSTOP | WB_DIALOGCONTROL ),
2078*b1cdbd2cSJim Jagielski
2079*b1cdbd2cSJim Jagielski aToolBox ( this, 0 ),
2080*b1cdbd2cSJim Jagielski aOnStartupCB ( this, SfxResId( RID_HELP_ONSTARTUP_BOX ) ),
2081*b1cdbd2cSJim Jagielski aIndexOnImage ( SfxResId( IMG_HELP_TOOLBOX_INDEX_ON ) ),
2082*b1cdbd2cSJim Jagielski aIndexOffImage ( SfxResId( IMG_HELP_TOOLBOX_INDEX_OFF ) ),
2083*b1cdbd2cSJim Jagielski aIndexOnText ( SfxResId( STR_HELP_BUTTON_INDEX_ON ) ),
2084*b1cdbd2cSJim Jagielski aIndexOffText ( SfxResId( STR_HELP_BUTTON_INDEX_OFF ) ),
2085*b1cdbd2cSJim Jagielski aOnStartupText ( SfxResId( RID_HELP_ONSTARTUP_TEXT ) ),
2086*b1cdbd2cSJim Jagielski pHelpWin ( pParent ),
2087*b1cdbd2cSJim Jagielski pTextWin ( new TextWin_Impl( this ) ),
2088*b1cdbd2cSJim Jagielski pSrchDlg ( NULL ),
2089*b1cdbd2cSJim Jagielski nMinPos ( 0 ),
2090*b1cdbd2cSJim Jagielski bIsDebug ( sal_False ),
2091*b1cdbd2cSJim Jagielski bIsIndexOn ( sal_False ),
2092*b1cdbd2cSJim Jagielski bIsInClose ( sal_False ),
2093*b1cdbd2cSJim Jagielski bIsFullWordSearch ( sal_False )
2094*b1cdbd2cSJim Jagielski
2095*b1cdbd2cSJim Jagielski {
2096*b1cdbd2cSJim Jagielski sfx2::AddToTaskPaneList( &aToolBox );
2097*b1cdbd2cSJim Jagielski
2098*b1cdbd2cSJim Jagielski xFrame = Reference < XFrame > ( ::comphelper::getProcessServiceFactory()->createInstance(
2099*b1cdbd2cSJim Jagielski DEFINE_CONST_UNICODE("com.sun.star.frame.Frame") ), UNO_QUERY );
2100*b1cdbd2cSJim Jagielski xFrame->initialize( VCLUnoHelper::GetInterface ( pTextWin ) );
2101*b1cdbd2cSJim Jagielski xFrame->setName( DEFINE_CONST_UNICODE("OFFICE_HELP") );
2102*b1cdbd2cSJim Jagielski lcl_disableLayoutOfFrame(xFrame);
2103*b1cdbd2cSJim Jagielski
2104*b1cdbd2cSJim Jagielski aToolBox.SetHelpId( HID_HELP_TOOLBOX );
2105*b1cdbd2cSJim Jagielski
2106*b1cdbd2cSJim Jagielski aToolBox.InsertItem( TBI_INDEX, aIndexOffText );
2107*b1cdbd2cSJim Jagielski aToolBox.SetHelpId( TBI_INDEX, HID_HELP_TOOLBOXITEM_INDEX );
2108*b1cdbd2cSJim Jagielski aToolBox.InsertSeparator();
2109*b1cdbd2cSJim Jagielski aToolBox.InsertItem( TBI_BACKWARD, String( SfxResId( STR_HELP_BUTTON_PREV ) ) );
2110*b1cdbd2cSJim Jagielski aToolBox.SetHelpId( TBI_BACKWARD, HID_HELP_TOOLBOXITEM_BACKWARD );
2111*b1cdbd2cSJim Jagielski aToolBox.InsertItem( TBI_FORWARD, String( SfxResId( STR_HELP_BUTTON_NEXT ) ) );
2112*b1cdbd2cSJim Jagielski aToolBox.SetHelpId( TBI_FORWARD, HID_HELP_TOOLBOXITEM_FORWARD );
2113*b1cdbd2cSJim Jagielski aToolBox.InsertItem( TBI_START, String( SfxResId( STR_HELP_BUTTON_START ) ) );
2114*b1cdbd2cSJim Jagielski aToolBox.SetHelpId( TBI_START, HID_HELP_TOOLBOXITEM_START );
2115*b1cdbd2cSJim Jagielski aToolBox.InsertSeparator();
2116*b1cdbd2cSJim Jagielski aToolBox.InsertItem( TBI_PRINT, String( SfxResId( STR_HELP_BUTTON_PRINT ) ) );
2117*b1cdbd2cSJim Jagielski aToolBox.SetHelpId( TBI_PRINT, HID_HELP_TOOLBOXITEM_PRINT );
2118*b1cdbd2cSJim Jagielski aToolBox.InsertItem( TBI_BOOKMARKS, String( SfxResId( STR_HELP_BUTTON_ADDBOOKMARK ) ) );
2119*b1cdbd2cSJim Jagielski aToolBox.SetHelpId( TBI_BOOKMARKS, HID_HELP_TOOLBOXITEM_BOOKMARKS );
2120*b1cdbd2cSJim Jagielski aToolBox.InsertItem( TBI_SEARCHDIALOG, String( SfxResId( STR_HELP_BUTTON_SEARCHDIALOG ) ) );
2121*b1cdbd2cSJim Jagielski aToolBox.SetHelpId( TBI_SEARCHDIALOG, HID_HELP_TOOLBOXITEM_SEARCHDIALOG );
2122*b1cdbd2cSJim Jagielski
2123*b1cdbd2cSJim Jagielski InitToolBoxImages();
2124*b1cdbd2cSJim Jagielski aToolBox.Show();
2125*b1cdbd2cSJim Jagielski InitOnStartupBox( false );
2126*b1cdbd2cSJim Jagielski aOnStartupCB.SetClickHdl( LINK( this, SfxHelpTextWindow_Impl, CheckHdl ) );
2127*b1cdbd2cSJim Jagielski
2128*b1cdbd2cSJim Jagielski aSelectTimer.SetTimeoutHdl( LINK( this, SfxHelpTextWindow_Impl, SelectHdl ) );
2129*b1cdbd2cSJim Jagielski aSelectTimer.SetTimeout( 1000 );
2130*b1cdbd2cSJim Jagielski
2131*b1cdbd2cSJim Jagielski char* pEnv = getenv( "help_debug" );
2132*b1cdbd2cSJim Jagielski if ( pEnv )
2133*b1cdbd2cSJim Jagielski bIsDebug = sal_True;
2134*b1cdbd2cSJim Jagielski
2135*b1cdbd2cSJim Jagielski SvtMiscOptions().AddListenerLink( LINK( this, SfxHelpTextWindow_Impl, NotifyHdl ) );
2136*b1cdbd2cSJim Jagielski
2137*b1cdbd2cSJim Jagielski if ( !aOnStartupCB.GetHelpId().getLength() )
2138*b1cdbd2cSJim Jagielski aOnStartupCB.SetHelpId( HID_HELP_ONSTARTUP_BOX );
2139*b1cdbd2cSJim Jagielski }
2140*b1cdbd2cSJim Jagielski
2141*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2142*b1cdbd2cSJim Jagielski
~SfxHelpTextWindow_Impl()2143*b1cdbd2cSJim Jagielski SfxHelpTextWindow_Impl::~SfxHelpTextWindow_Impl()
2144*b1cdbd2cSJim Jagielski {
2145*b1cdbd2cSJim Jagielski sfx2::RemoveFromTaskPaneList( &aToolBox );
2146*b1cdbd2cSJim Jagielski
2147*b1cdbd2cSJim Jagielski bIsInClose = sal_True;
2148*b1cdbd2cSJim Jagielski SvtMiscOptions().RemoveListenerLink( LINK( this, SfxHelpTextWindow_Impl, NotifyHdl ) );
2149*b1cdbd2cSJim Jagielski delete pSrchDlg;
2150*b1cdbd2cSJim Jagielski }
2151*b1cdbd2cSJim Jagielski
2152*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2153*b1cdbd2cSJim Jagielski
HasSelection() const2154*b1cdbd2cSJim Jagielski sal_Bool SfxHelpTextWindow_Impl::HasSelection() const
2155*b1cdbd2cSJim Jagielski {
2156*b1cdbd2cSJim Jagielski // is there any selection in the text and not only a cursor?
2157*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_False;
2158*b1cdbd2cSJim Jagielski Reference < XTextRange > xRange = getCursor();
2159*b1cdbd2cSJim Jagielski if ( xRange.is() )
2160*b1cdbd2cSJim Jagielski {
2161*b1cdbd2cSJim Jagielski Reference < XText > xText = xRange->getText();
2162*b1cdbd2cSJim Jagielski Reference < XTextCursor > xCursor = xText->createTextCursorByRange( xRange );
2163*b1cdbd2cSJim Jagielski bRet = !xCursor->isCollapsed();
2164*b1cdbd2cSJim Jagielski }
2165*b1cdbd2cSJim Jagielski
2166*b1cdbd2cSJim Jagielski return bRet;
2167*b1cdbd2cSJim Jagielski }
2168*b1cdbd2cSJim Jagielski
2169*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2170*b1cdbd2cSJim Jagielski
InitToolBoxImages()2171*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::InitToolBoxImages()
2172*b1cdbd2cSJim Jagielski {
2173*b1cdbd2cSJim Jagielski sal_Bool bLarge = SvtMiscOptions().AreCurrentSymbolsLarge();
2174*b1cdbd2cSJim Jagielski sal_Bool bHiContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
2175*b1cdbd2cSJim Jagielski
2176*b1cdbd2cSJim Jagielski aIndexOnImage = Image( SfxResId(
2177*b1cdbd2cSJim Jagielski bLarge ? bHiContrast ? IMG_HELP_TOOLBOX_HCL_INDEX_ON : IMG_HELP_TOOLBOX_L_INDEX_ON
2178*b1cdbd2cSJim Jagielski : bHiContrast ? IMG_HELP_TOOLBOX_HC_INDEX_ON : IMG_HELP_TOOLBOX_INDEX_ON ) );
2179*b1cdbd2cSJim Jagielski aIndexOffImage = Image( SfxResId(
2180*b1cdbd2cSJim Jagielski bLarge ? bHiContrast ? IMG_HELP_TOOLBOX_HCL_INDEX_OFF : IMG_HELP_TOOLBOX_L_INDEX_OFF
2181*b1cdbd2cSJim Jagielski : bHiContrast ? IMG_HELP_TOOLBOX_HC_INDEX_OFF : IMG_HELP_TOOLBOX_INDEX_OFF ) );
2182*b1cdbd2cSJim Jagielski aToolBox.SetItemImage( TBI_INDEX, bIsIndexOn ? aIndexOffImage : aIndexOnImage );
2183*b1cdbd2cSJim Jagielski
2184*b1cdbd2cSJim Jagielski aToolBox.SetItemImage( TBI_BACKWARD, Image( SfxResId(
2185*b1cdbd2cSJim Jagielski bLarge ? bHiContrast ? IMG_HELP_TOOLBOX_HCL_PREV : IMG_HELP_TOOLBOX_L_PREV
2186*b1cdbd2cSJim Jagielski : bHiContrast ? IMG_HELP_TOOLBOX_HC_PREV : IMG_HELP_TOOLBOX_PREV ) ) );
2187*b1cdbd2cSJim Jagielski aToolBox.SetItemImage( TBI_FORWARD, Image( SfxResId(
2188*b1cdbd2cSJim Jagielski bLarge ? bHiContrast ? IMG_HELP_TOOLBOX_HCL_NEXT : IMG_HELP_TOOLBOX_L_NEXT
2189*b1cdbd2cSJim Jagielski : bHiContrast ? IMG_HELP_TOOLBOX_HC_NEXT : IMG_HELP_TOOLBOX_NEXT ) ) );
2190*b1cdbd2cSJim Jagielski aToolBox.SetItemImage( TBI_START, Image( SfxResId(
2191*b1cdbd2cSJim Jagielski bLarge ? bHiContrast ? IMG_HELP_TOOLBOX_HCL_START : IMG_HELP_TOOLBOX_L_START
2192*b1cdbd2cSJim Jagielski : bHiContrast ? IMG_HELP_TOOLBOX_HC_START : IMG_HELP_TOOLBOX_START ) ) );
2193*b1cdbd2cSJim Jagielski aToolBox.SetItemImage( TBI_PRINT, Image( SfxResId(
2194*b1cdbd2cSJim Jagielski bLarge ? bHiContrast ? IMG_HELP_TOOLBOX_HCL_PRINT : IMG_HELP_TOOLBOX_L_PRINT
2195*b1cdbd2cSJim Jagielski : bHiContrast ? IMG_HELP_TOOLBOX_HC_PRINT : IMG_HELP_TOOLBOX_PRINT ) ) );
2196*b1cdbd2cSJim Jagielski aToolBox.SetItemImage( TBI_BOOKMARKS, Image( SfxResId(
2197*b1cdbd2cSJim Jagielski bLarge ? bHiContrast ? IMG_HELP_TOOLBOX_HCL_BOOKMARKS : IMG_HELP_TOOLBOX_L_BOOKMARKS
2198*b1cdbd2cSJim Jagielski : bHiContrast ? IMG_HELP_TOOLBOX_HC_BOOKMARKS : IMG_HELP_TOOLBOX_BOOKMARKS ) ) );
2199*b1cdbd2cSJim Jagielski aToolBox.SetItemImage( TBI_SEARCHDIALOG, Image( SfxResId(
2200*b1cdbd2cSJim Jagielski bLarge ? bHiContrast ? IMG_HELP_TOOLBOX_HCL_SEARCHDIALOG : IMG_HELP_TOOLBOX_L_SEARCHDIALOG
2201*b1cdbd2cSJim Jagielski : bHiContrast ? IMG_HELP_TOOLBOX_HC_SEARCHDIALOG : IMG_HELP_TOOLBOX_SEARCHDIALOG ) ) );
2202*b1cdbd2cSJim Jagielski
2203*b1cdbd2cSJim Jagielski Size aSize = aToolBox.CalcWindowSizePixel();
2204*b1cdbd2cSJim Jagielski aSize.Height() += TOOLBOX_OFFSET;
2205*b1cdbd2cSJim Jagielski aToolBox.SetPosSizePixel( Point( 0, TOOLBOX_OFFSET ), aSize );
2206*b1cdbd2cSJim Jagielski
2207*b1cdbd2cSJim Jagielski SvtMiscOptions aMiscOptions;
2208*b1cdbd2cSJim Jagielski if ( aMiscOptions.GetToolboxStyle() != aToolBox.GetOutStyle() )
2209*b1cdbd2cSJim Jagielski aToolBox.SetOutStyle( aMiscOptions.GetToolboxStyle() );
2210*b1cdbd2cSJim Jagielski }
2211*b1cdbd2cSJim Jagielski
2212*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2213*b1cdbd2cSJim Jagielski
InitOnStartupBox(bool bOnlyText)2214*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::InitOnStartupBox( bool bOnlyText )
2215*b1cdbd2cSJim Jagielski {
2216*b1cdbd2cSJim Jagielski sCurrentFactory = SfxHelp::GetCurrentModuleIdentifier();
2217*b1cdbd2cSJim Jagielski
2218*b1cdbd2cSJim Jagielski Reference< XMultiServiceFactory > xMultiServiceFac = ::comphelper::getProcessServiceFactory();
2219*b1cdbd2cSJim Jagielski Reference< XInterface > xConfig;
2220*b1cdbd2cSJim Jagielski ::rtl::OUString sPath( PATH_OFFICE_FACTORIES );
2221*b1cdbd2cSJim Jagielski sPath += sCurrentFactory;
2222*b1cdbd2cSJim Jagielski ::rtl::OUString sKey( KEY_HELP_ON_OPEN );
2223*b1cdbd2cSJim Jagielski
2224*b1cdbd2cSJim Jagielski // Attention: This check boy knows two states:
2225*b1cdbd2cSJim Jagielski // 1) Reading of the config key fails with an exception or by getting an empty Any (!) => check box must be hidden
2226*b1cdbd2cSJim Jagielski // 2) We read sal_True/sal_False => check box must be shown and enabled/disabled
2227*b1cdbd2cSJim Jagielski
2228*b1cdbd2cSJim Jagielski bool bHideBox = true;
2229*b1cdbd2cSJim Jagielski sal_Bool bHelpAtStartup = sal_False;
2230*b1cdbd2cSJim Jagielski try
2231*b1cdbd2cSJim Jagielski {
2232*b1cdbd2cSJim Jagielski xConfiguration = ConfigurationHelper::openConfig(
2233*b1cdbd2cSJim Jagielski xMultiServiceFac, PACKAGE_SETUP, ConfigurationHelper::E_STANDARD );
2234*b1cdbd2cSJim Jagielski if ( xConfiguration.is() )
2235*b1cdbd2cSJim Jagielski {
2236*b1cdbd2cSJim Jagielski Any aAny = ConfigurationHelper::readRelativeKey( xConfiguration, sPath, sKey );
2237*b1cdbd2cSJim Jagielski if (aAny >>= bHelpAtStartup)
2238*b1cdbd2cSJim Jagielski bHideBox = false;
2239*b1cdbd2cSJim Jagielski }
2240*b1cdbd2cSJim Jagielski }
2241*b1cdbd2cSJim Jagielski catch( Exception& )
2242*b1cdbd2cSJim Jagielski {
2243*b1cdbd2cSJim Jagielski bHideBox = true;
2244*b1cdbd2cSJim Jagielski }
2245*b1cdbd2cSJim Jagielski
2246*b1cdbd2cSJim Jagielski if ( bHideBox )
2247*b1cdbd2cSJim Jagielski aOnStartupCB.Hide();
2248*b1cdbd2cSJim Jagielski else
2249*b1cdbd2cSJim Jagielski {
2250*b1cdbd2cSJim Jagielski // detect module name
2251*b1cdbd2cSJim Jagielski String sModuleName;
2252*b1cdbd2cSJim Jagielski
2253*b1cdbd2cSJim Jagielski if ( xConfiguration.is() )
2254*b1cdbd2cSJim Jagielski {
2255*b1cdbd2cSJim Jagielski ::rtl::OUString sTemp;
2256*b1cdbd2cSJim Jagielski sKey = KEY_UI_NAME;
2257*b1cdbd2cSJim Jagielski try
2258*b1cdbd2cSJim Jagielski {
2259*b1cdbd2cSJim Jagielski Any aAny = ConfigurationHelper::readRelativeKey( xConfiguration, sPath, sKey );
2260*b1cdbd2cSJim Jagielski aAny >>= sTemp;
2261*b1cdbd2cSJim Jagielski }
2262*b1cdbd2cSJim Jagielski catch( Exception& )
2263*b1cdbd2cSJim Jagielski {
2264*b1cdbd2cSJim Jagielski DBG_ERRORFILE( "SfxHelpTextWindow_Impl::InitOnStartupBox(): unexpected exception" );
2265*b1cdbd2cSJim Jagielski }
2266*b1cdbd2cSJim Jagielski sModuleName = String( sTemp );
2267*b1cdbd2cSJim Jagielski }
2268*b1cdbd2cSJim Jagielski
2269*b1cdbd2cSJim Jagielski if ( sModuleName.Len() > 0 )
2270*b1cdbd2cSJim Jagielski {
2271*b1cdbd2cSJim Jagielski // set module name in checkbox text
2272*b1cdbd2cSJim Jagielski String sText( aOnStartupText );
2273*b1cdbd2cSJim Jagielski sText.SearchAndReplace( String::CreateFromAscii( "%MODULENAME" ), sModuleName );
2274*b1cdbd2cSJim Jagielski aOnStartupCB.SetText( sText );
2275*b1cdbd2cSJim Jagielski // and show it
2276*b1cdbd2cSJim Jagielski aOnStartupCB.Show();
2277*b1cdbd2cSJim Jagielski // set check state
2278*b1cdbd2cSJim Jagielski aOnStartupCB.Check( bHelpAtStartup );
2279*b1cdbd2cSJim Jagielski aOnStartupCB.SaveValue();
2280*b1cdbd2cSJim Jagielski
2281*b1cdbd2cSJim Jagielski // calculate and set optimal width of the onstartup checkbox
2282*b1cdbd2cSJim Jagielski String sCBText( DEFINE_CONST_UNICODE( "XXX" ) );
2283*b1cdbd2cSJim Jagielski sCBText += aOnStartupCB.GetText();
2284*b1cdbd2cSJim Jagielski long nTextWidth = aOnStartupCB.GetTextWidth( sCBText );
2285*b1cdbd2cSJim Jagielski Size aSize = aOnStartupCB.GetSizePixel();
2286*b1cdbd2cSJim Jagielski aSize.Width() = nTextWidth;
2287*b1cdbd2cSJim Jagielski aOnStartupCB.SetSizePixel( aSize );
2288*b1cdbd2cSJim Jagielski SetOnStartupBoxPosition();
2289*b1cdbd2cSJim Jagielski }
2290*b1cdbd2cSJim Jagielski
2291*b1cdbd2cSJim Jagielski if ( !bOnlyText )
2292*b1cdbd2cSJim Jagielski {
2293*b1cdbd2cSJim Jagielski // set position of the checkbox
2294*b1cdbd2cSJim Jagielski Size a3Size = LogicToPixel( Size( 3, 3 ), MAP_APPFONT );
2295*b1cdbd2cSJim Jagielski Size aTBSize = aToolBox.GetSizePixel();
2296*b1cdbd2cSJim Jagielski Size aCBSize = aOnStartupCB.GetSizePixel();
2297*b1cdbd2cSJim Jagielski Point aPnt = aToolBox.GetPosPixel();
2298*b1cdbd2cSJim Jagielski aPnt.X() += aTBSize.Width() + a3Size.Width();
2299*b1cdbd2cSJim Jagielski aPnt.Y() += ( ( aTBSize.Height() - aCBSize.Height() ) / 2 );
2300*b1cdbd2cSJim Jagielski aOnStartupCB.SetPosPixel( aPnt );
2301*b1cdbd2cSJim Jagielski nMinPos = aPnt.X();
2302*b1cdbd2cSJim Jagielski }
2303*b1cdbd2cSJim Jagielski }
2304*b1cdbd2cSJim Jagielski }
2305*b1cdbd2cSJim Jagielski
2306*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2307*b1cdbd2cSJim Jagielski
SetOnStartupBoxPosition()2308*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::SetOnStartupBoxPosition()
2309*b1cdbd2cSJim Jagielski {
2310*b1cdbd2cSJim Jagielski long nX = Max( GetOutputSizePixel().Width() - aOnStartupCB.GetSizePixel().Width(), nMinPos );
2311*b1cdbd2cSJim Jagielski Point aPos = aOnStartupCB.GetPosPixel();
2312*b1cdbd2cSJim Jagielski aPos.X() = nX;
2313*b1cdbd2cSJim Jagielski aOnStartupCB.SetPosPixel( aPos );
2314*b1cdbd2cSJim Jagielski }
2315*b1cdbd2cSJim Jagielski
2316*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2317*b1cdbd2cSJim Jagielski
GetBreakIterator()2318*b1cdbd2cSJim Jagielski Reference< XBreakIterator > SfxHelpTextWindow_Impl::GetBreakIterator()
2319*b1cdbd2cSJim Jagielski {
2320*b1cdbd2cSJim Jagielski if ( !xBreakIterator.is() )
2321*b1cdbd2cSJim Jagielski xBreakIterator = vcl::unohelper::CreateBreakIterator();
2322*b1cdbd2cSJim Jagielski DBG_ASSERT( xBreakIterator.is(), "Could not create BreakIterator" );
2323*b1cdbd2cSJim Jagielski return xBreakIterator;
2324*b1cdbd2cSJim Jagielski }
2325*b1cdbd2cSJim Jagielski
2326*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2327*b1cdbd2cSJim Jagielski
getCursor() const2328*b1cdbd2cSJim Jagielski Reference< XTextRange > SfxHelpTextWindow_Impl::getCursor() const
2329*b1cdbd2cSJim Jagielski {
2330*b1cdbd2cSJim Jagielski // return the current cursor
2331*b1cdbd2cSJim Jagielski Reference< XTextRange > xCursor;
2332*b1cdbd2cSJim Jagielski
2333*b1cdbd2cSJim Jagielski try
2334*b1cdbd2cSJim Jagielski {
2335*b1cdbd2cSJim Jagielski Reference < XSelectionSupplier > xSelSup( xFrame->getController(), UNO_QUERY );
2336*b1cdbd2cSJim Jagielski if ( xSelSup.is() )
2337*b1cdbd2cSJim Jagielski {
2338*b1cdbd2cSJim Jagielski Any aAny = xSelSup->getSelection();
2339*b1cdbd2cSJim Jagielski Reference < XIndexAccess > xSelection;
2340*b1cdbd2cSJim Jagielski if ( aAny >>= xSelection )
2341*b1cdbd2cSJim Jagielski {
2342*b1cdbd2cSJim Jagielski if ( xSelection->getCount() == 1 )
2343*b1cdbd2cSJim Jagielski {
2344*b1cdbd2cSJim Jagielski aAny = xSelection->getByIndex(0);
2345*b1cdbd2cSJim Jagielski aAny >>= xCursor;
2346*b1cdbd2cSJim Jagielski }
2347*b1cdbd2cSJim Jagielski }
2348*b1cdbd2cSJim Jagielski }
2349*b1cdbd2cSJim Jagielski }
2350*b1cdbd2cSJim Jagielski catch( Exception& )
2351*b1cdbd2cSJim Jagielski {
2352*b1cdbd2cSJim Jagielski DBG_ERROR( "SfxHelpTextWindow_Impl::getCursor(): unexpected exception" );
2353*b1cdbd2cSJim Jagielski }
2354*b1cdbd2cSJim Jagielski
2355*b1cdbd2cSJim Jagielski return xCursor;
2356*b1cdbd2cSJim Jagielski }
2357*b1cdbd2cSJim Jagielski
2358*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2359*b1cdbd2cSJim Jagielski
isHandledKey(const KeyCode & _rKeyCode)2360*b1cdbd2cSJim Jagielski bool SfxHelpTextWindow_Impl::isHandledKey( const KeyCode& _rKeyCode )
2361*b1cdbd2cSJim Jagielski {
2362*b1cdbd2cSJim Jagielski bool bRet = false;
2363*b1cdbd2cSJim Jagielski sal_uInt16 nCode = _rKeyCode.GetCode();
2364*b1cdbd2cSJim Jagielski
2365*b1cdbd2cSJim Jagielski // the keys <STRG><A> (select all), <STRG><C> (copy),
2366*b1cdbd2cSJim Jagielski // <STRG><F> (find), <STRG><P> (print) and <STRG><W> (close window)
2367*b1cdbd2cSJim Jagielski // were handled in help
2368*b1cdbd2cSJim Jagielski if ( _rKeyCode.IsMod1() &&
2369*b1cdbd2cSJim Jagielski ( KEY_A == nCode || KEY_C == nCode || KEY_F == nCode || KEY_P == nCode || KEY_W == nCode ) )
2370*b1cdbd2cSJim Jagielski {
2371*b1cdbd2cSJim Jagielski if ( KEY_F == nCode )
2372*b1cdbd2cSJim Jagielski DoSearch();
2373*b1cdbd2cSJim Jagielski else
2374*b1cdbd2cSJim Jagielski bRet = true;
2375*b1cdbd2cSJim Jagielski }
2376*b1cdbd2cSJim Jagielski
2377*b1cdbd2cSJim Jagielski return bRet;
2378*b1cdbd2cSJim Jagielski }
2379*b1cdbd2cSJim Jagielski
2380*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2381*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpTextWindow_Impl,SelectHdl,Timer *,EMPTYARG)2382*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpTextWindow_Impl, SelectHdl, Timer*, EMPTYARG )
2383*b1cdbd2cSJim Jagielski {
2384*b1cdbd2cSJim Jagielski try
2385*b1cdbd2cSJim Jagielski {
2386*b1cdbd2cSJim Jagielski // select the words, which are equal to the search text of the search page
2387*b1cdbd2cSJim Jagielski Reference < XController > xController = xFrame->getController();
2388*b1cdbd2cSJim Jagielski if ( xController.is() )
2389*b1cdbd2cSJim Jagielski {
2390*b1cdbd2cSJim Jagielski // get document
2391*b1cdbd2cSJim Jagielski Reference < XSearchable > xSearchable( xController->getModel(), UNO_QUERY );
2392*b1cdbd2cSJim Jagielski if ( xSearchable.is() )
2393*b1cdbd2cSJim Jagielski {
2394*b1cdbd2cSJim Jagielski // create descriptor, set string and find all words
2395*b1cdbd2cSJim Jagielski Reference < XSearchDescriptor > xSrchDesc = xSearchable->createSearchDescriptor();
2396*b1cdbd2cSJim Jagielski Reference < XPropertySet > xPropSet( xSrchDesc, UNO_QUERY );
2397*b1cdbd2cSJim Jagielski xPropSet->setPropertyValue( DEFINE_CONST_OUSTRING("SearchRegularExpression"),
2398*b1cdbd2cSJim Jagielski makeAny( sal_Bool( sal_True ) ) );
2399*b1cdbd2cSJim Jagielski if ( bIsFullWordSearch )
2400*b1cdbd2cSJim Jagielski xPropSet->setPropertyValue( DEFINE_CONST_OUSTRING("SearchWords"),
2401*b1cdbd2cSJim Jagielski makeAny( sal_Bool( sal_True ) ) );
2402*b1cdbd2cSJim Jagielski
2403*b1cdbd2cSJim Jagielski String sSearchString = sfx2::PrepareSearchString( aSearchText, GetBreakIterator(), false );
2404*b1cdbd2cSJim Jagielski xSrchDesc->setSearchString( sSearchString );
2405*b1cdbd2cSJim Jagielski Reference< XIndexAccess > xSelection = xSearchable->findAll( xSrchDesc );
2406*b1cdbd2cSJim Jagielski
2407*b1cdbd2cSJim Jagielski // then select all found words
2408*b1cdbd2cSJim Jagielski Reference < XSelectionSupplier > xSelectionSup( xController, UNO_QUERY );
2409*b1cdbd2cSJim Jagielski if ( xSelectionSup.is() )
2410*b1cdbd2cSJim Jagielski {
2411*b1cdbd2cSJim Jagielski Any aAny;
2412*b1cdbd2cSJim Jagielski aAny <<= xSelection;
2413*b1cdbd2cSJim Jagielski xSelectionSup->select( aAny );
2414*b1cdbd2cSJim Jagielski }
2415*b1cdbd2cSJim Jagielski }
2416*b1cdbd2cSJim Jagielski }
2417*b1cdbd2cSJim Jagielski }
2418*b1cdbd2cSJim Jagielski catch( Exception& )
2419*b1cdbd2cSJim Jagielski {
2420*b1cdbd2cSJim Jagielski DBG_ERROR( "SfxHelpTextWindow_Impl::SelectHdl(): unexpected exception" );
2421*b1cdbd2cSJim Jagielski }
2422*b1cdbd2cSJim Jagielski
2423*b1cdbd2cSJim Jagielski return 1;
2424*b1cdbd2cSJim Jagielski }
2425*b1cdbd2cSJim Jagielski
2426*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2427*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpTextWindow_Impl,NotifyHdl,SvtMiscOptions *,pOptions)2428*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpTextWindow_Impl, NotifyHdl, SvtMiscOptions*, pOptions )
2429*b1cdbd2cSJim Jagielski {
2430*b1cdbd2cSJim Jagielski (void)pOptions; // unused variable
2431*b1cdbd2cSJim Jagielski InitToolBoxImages();
2432*b1cdbd2cSJim Jagielski Resize();
2433*b1cdbd2cSJim Jagielski aToolBox.Invalidate();
2434*b1cdbd2cSJim Jagielski return 0;
2435*b1cdbd2cSJim Jagielski }
2436*b1cdbd2cSJim Jagielski
2437*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2438*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpTextWindow_Impl,FindHdl,sfx2::SearchDialog *,pDlg)2439*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpTextWindow_Impl, FindHdl, sfx2::SearchDialog*, pDlg )
2440*b1cdbd2cSJim Jagielski {
2441*b1cdbd2cSJim Jagielski bool bWrapAround = ( NULL == pDlg );
2442*b1cdbd2cSJim Jagielski if ( bWrapAround )
2443*b1cdbd2cSJim Jagielski pDlg = pSrchDlg;
2444*b1cdbd2cSJim Jagielski DBG_ASSERT( pDlg, "invalid search dialog" );
2445*b1cdbd2cSJim Jagielski String sSearchText = pDlg->GetSearchText();
2446*b1cdbd2cSJim Jagielski try
2447*b1cdbd2cSJim Jagielski {
2448*b1cdbd2cSJim Jagielski // select the words, which are equal to the search text of the search page
2449*b1cdbd2cSJim Jagielski Reference < XController > xController = xFrame->getController();
2450*b1cdbd2cSJim Jagielski if ( xController.is() )
2451*b1cdbd2cSJim Jagielski {
2452*b1cdbd2cSJim Jagielski // get document
2453*b1cdbd2cSJim Jagielski Reference < XSearchable > xSearchable( xController->getModel(), UNO_QUERY );
2454*b1cdbd2cSJim Jagielski if ( xSearchable.is() )
2455*b1cdbd2cSJim Jagielski {
2456*b1cdbd2cSJim Jagielski // create descriptor, set string and find all words
2457*b1cdbd2cSJim Jagielski Reference < XSearchDescriptor > xSrchDesc = xSearchable->createSearchDescriptor();
2458*b1cdbd2cSJim Jagielski Reference < XPropertySet > xPropSet( xSrchDesc, UNO_QUERY );
2459*b1cdbd2cSJim Jagielski xPropSet->setPropertyValue( DEFINE_CONST_OUSTRING("SearchWords"), makeAny( sal_Bool( pDlg->IsOnlyWholeWords() != false ) ) );
2460*b1cdbd2cSJim Jagielski xPropSet->setPropertyValue( DEFINE_CONST_OUSTRING("SearchCaseSensitive"), makeAny( sal_Bool( pDlg->IsMarchCase() != false ) ) );
2461*b1cdbd2cSJim Jagielski xPropSet->setPropertyValue( DEFINE_CONST_OUSTRING("SearchBackwards"), makeAny( sal_Bool( pDlg->IsSearchBackwards() != false ) ) );
2462*b1cdbd2cSJim Jagielski xSrchDesc->setSearchString( sSearchText );
2463*b1cdbd2cSJim Jagielski Reference< XInterface > xSelection;
2464*b1cdbd2cSJim Jagielski Reference< XTextRange > xCursor = getCursor();
2465*b1cdbd2cSJim Jagielski
2466*b1cdbd2cSJim Jagielski if ( xCursor.is() )
2467*b1cdbd2cSJim Jagielski {
2468*b1cdbd2cSJim Jagielski if ( pDlg->IsSearchBackwards() )
2469*b1cdbd2cSJim Jagielski xCursor = xCursor->getStart();
2470*b1cdbd2cSJim Jagielski xSelection = xSearchable->findNext( xCursor, xSrchDesc );
2471*b1cdbd2cSJim Jagielski }
2472*b1cdbd2cSJim Jagielski else
2473*b1cdbd2cSJim Jagielski xSelection = xSearchable->findFirst( xSrchDesc );
2474*b1cdbd2cSJim Jagielski
2475*b1cdbd2cSJim Jagielski // then select the found word
2476*b1cdbd2cSJim Jagielski if ( xSelection.is() )
2477*b1cdbd2cSJim Jagielski {
2478*b1cdbd2cSJim Jagielski Reference < XSelectionSupplier > xSelectionSup( xController, UNO_QUERY );
2479*b1cdbd2cSJim Jagielski if ( xSelectionSup.is() )
2480*b1cdbd2cSJim Jagielski {
2481*b1cdbd2cSJim Jagielski Any aAny;
2482*b1cdbd2cSJim Jagielski aAny <<= xSelection;
2483*b1cdbd2cSJim Jagielski xSelectionSup->select( aAny );
2484*b1cdbd2cSJim Jagielski }
2485*b1cdbd2cSJim Jagielski }
2486*b1cdbd2cSJim Jagielski else if ( pDlg->IsWrapAround() && !bWrapAround )
2487*b1cdbd2cSJim Jagielski {
2488*b1cdbd2cSJim Jagielski Reference < text::XTextViewCursorSupplier > xCrsrSupp( xController, uno::UNO_QUERY );
2489*b1cdbd2cSJim Jagielski Reference < text::XTextViewCursor > xTVCrsr( xCrsrSupp->getViewCursor(), uno::UNO_QUERY );
2490*b1cdbd2cSJim Jagielski if ( xTVCrsr.is() )
2491*b1cdbd2cSJim Jagielski {
2492*b1cdbd2cSJim Jagielski Reference < text::XTextDocument > xDoc( xController->getModel(), uno::UNO_QUERY );
2493*b1cdbd2cSJim Jagielski Reference < text::XText > xText = xDoc->getText();
2494*b1cdbd2cSJim Jagielski if ( xText.is() )
2495*b1cdbd2cSJim Jagielski {
2496*b1cdbd2cSJim Jagielski if ( pDlg->IsSearchBackwards() )
2497*b1cdbd2cSJim Jagielski xTVCrsr->gotoRange( xText->getEnd(), sal_False );
2498*b1cdbd2cSJim Jagielski else
2499*b1cdbd2cSJim Jagielski xTVCrsr->gotoRange( xText->getStart(), sal_False );
2500*b1cdbd2cSJim Jagielski FindHdl( NULL );
2501*b1cdbd2cSJim Jagielski }
2502*b1cdbd2cSJim Jagielski }
2503*b1cdbd2cSJim Jagielski }
2504*b1cdbd2cSJim Jagielski else
2505*b1cdbd2cSJim Jagielski {
2506*b1cdbd2cSJim Jagielski DBG_ASSERT( pSrchDlg, "no search dialog" );
2507*b1cdbd2cSJim Jagielski InfoBox aBox( pSrchDlg, SfxResId( RID_INFO_NOSEARCHTEXTFOUND ) );
2508*b1cdbd2cSJim Jagielski aBox.Execute();
2509*b1cdbd2cSJim Jagielski pSrchDlg->SetFocusOnEdit();
2510*b1cdbd2cSJim Jagielski }
2511*b1cdbd2cSJim Jagielski }
2512*b1cdbd2cSJim Jagielski }
2513*b1cdbd2cSJim Jagielski }
2514*b1cdbd2cSJim Jagielski catch( Exception& )
2515*b1cdbd2cSJim Jagielski {
2516*b1cdbd2cSJim Jagielski DBG_ERROR( "SfxHelpTextWindow_Impl::SelectHdl(): unexpected exception" );
2517*b1cdbd2cSJim Jagielski }
2518*b1cdbd2cSJim Jagielski
2519*b1cdbd2cSJim Jagielski return 0;
2520*b1cdbd2cSJim Jagielski }
2521*b1cdbd2cSJim Jagielski
2522*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2523*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpTextWindow_Impl,CloseHdl,sfx2::SearchDialog *,pDlg)2524*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpTextWindow_Impl, CloseHdl, sfx2::SearchDialog*, pDlg )
2525*b1cdbd2cSJim Jagielski {
2526*b1cdbd2cSJim Jagielski if ( pDlg )
2527*b1cdbd2cSJim Jagielski delete pSrchDlg;
2528*b1cdbd2cSJim Jagielski pSrchDlg = NULL;
2529*b1cdbd2cSJim Jagielski return 0;
2530*b1cdbd2cSJim Jagielski }
2531*b1cdbd2cSJim Jagielski
2532*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2533*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpTextWindow_Impl,CheckHdl,CheckBox *,pBox)2534*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpTextWindow_Impl, CheckHdl, CheckBox*, pBox )
2535*b1cdbd2cSJim Jagielski {
2536*b1cdbd2cSJim Jagielski if ( xConfiguration.is() )
2537*b1cdbd2cSJim Jagielski {
2538*b1cdbd2cSJim Jagielski sal_Bool bChecked = pBox->IsChecked();
2539*b1cdbd2cSJim Jagielski ::rtl::OUString sPath( PATH_OFFICE_FACTORIES );
2540*b1cdbd2cSJim Jagielski sPath += sCurrentFactory;
2541*b1cdbd2cSJim Jagielski try
2542*b1cdbd2cSJim Jagielski {
2543*b1cdbd2cSJim Jagielski ConfigurationHelper::writeRelativeKey(
2544*b1cdbd2cSJim Jagielski xConfiguration, sPath, KEY_HELP_ON_OPEN, makeAny( bChecked ) );
2545*b1cdbd2cSJim Jagielski ConfigurationHelper::flush( xConfiguration );
2546*b1cdbd2cSJim Jagielski }
2547*b1cdbd2cSJim Jagielski catch( Exception& )
2548*b1cdbd2cSJim Jagielski {
2549*b1cdbd2cSJim Jagielski DBG_ERRORFILE( "SfxHelpTextWindow_Impl::CheckHdl(): unexpected exception" );
2550*b1cdbd2cSJim Jagielski }
2551*b1cdbd2cSJim Jagielski }
2552*b1cdbd2cSJim Jagielski
2553*b1cdbd2cSJim Jagielski return 0;
2554*b1cdbd2cSJim Jagielski }
2555*b1cdbd2cSJim Jagielski
2556*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2557*b1cdbd2cSJim Jagielski
Resize()2558*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::Resize()
2559*b1cdbd2cSJim Jagielski {
2560*b1cdbd2cSJim Jagielski Size aSize = GetOutputSizePixel();
2561*b1cdbd2cSJim Jagielski long nToolBoxHeight = aToolBox.GetSizePixel().Height() + TOOLBOX_OFFSET;
2562*b1cdbd2cSJim Jagielski aSize.Height() -= nToolBoxHeight;
2563*b1cdbd2cSJim Jagielski pTextWin->SetPosSizePixel( Point( 0, nToolBoxHeight ), aSize );
2564*b1cdbd2cSJim Jagielski SetOnStartupBoxPosition();
2565*b1cdbd2cSJim Jagielski }
2566*b1cdbd2cSJim Jagielski
2567*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2568*b1cdbd2cSJim Jagielski
PreNotify(NotifyEvent & rNEvt)2569*b1cdbd2cSJim Jagielski long SfxHelpTextWindow_Impl::PreNotify( NotifyEvent& rNEvt )
2570*b1cdbd2cSJim Jagielski {
2571*b1cdbd2cSJim Jagielski long nDone = 0;
2572*b1cdbd2cSJim Jagielski sal_uInt16 nType = rNEvt.GetType();
2573*b1cdbd2cSJim Jagielski if ( EVENT_COMMAND == nType && rNEvt.GetCommandEvent() )
2574*b1cdbd2cSJim Jagielski {
2575*b1cdbd2cSJim Jagielski const CommandEvent* pCmdEvt = rNEvt.GetCommandEvent();
2576*b1cdbd2cSJim Jagielski Window* pCmdWin = rNEvt.GetWindow();
2577*b1cdbd2cSJim Jagielski
2578*b1cdbd2cSJim Jagielski if ( pCmdEvt->GetCommand() == COMMAND_CONTEXTMENU && pCmdWin != this && pCmdWin != &aToolBox )
2579*b1cdbd2cSJim Jagielski {
2580*b1cdbd2cSJim Jagielski sal_Bool bHiContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
2581*b1cdbd2cSJim Jagielski Point aPos;
2582*b1cdbd2cSJim Jagielski if ( pCmdEvt->IsMouseEvent() )
2583*b1cdbd2cSJim Jagielski aPos = pCmdEvt->GetMousePosPixel();
2584*b1cdbd2cSJim Jagielski else
2585*b1cdbd2cSJim Jagielski aPos = Point( pTextWin->GetPosPixel().X() + 20, 20 );
2586*b1cdbd2cSJim Jagielski aPos.Y() += pTextWin->GetPosPixel().Y();
2587*b1cdbd2cSJim Jagielski PopupMenu aMenu;
2588*b1cdbd2cSJim Jagielski if ( bIsIndexOn )
2589*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_INDEX, aIndexOffText, Image( SfxResId(
2590*b1cdbd2cSJim Jagielski bHiContrast ? IMG_HELP_TOOLBOX_HC_INDEX_OFF : IMG_HELP_TOOLBOX_INDEX_OFF ) ) );
2591*b1cdbd2cSJim Jagielski else
2592*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_INDEX, aIndexOnText, Image( SfxResId(
2593*b1cdbd2cSJim Jagielski bHiContrast ? IMG_HELP_TOOLBOX_HC_INDEX_ON : IMG_HELP_TOOLBOX_INDEX_ON ) ) );
2594*b1cdbd2cSJim Jagielski aMenu.SetHelpId( TBI_INDEX, HID_HELP_TOOLBOXITEM_INDEX );
2595*b1cdbd2cSJim Jagielski aMenu.InsertSeparator();
2596*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_BACKWARD, String( SfxResId( STR_HELP_BUTTON_PREV ) ),
2597*b1cdbd2cSJim Jagielski Image( SfxResId( bHiContrast ? IMG_HELP_TOOLBOX_HC_PREV : IMG_HELP_TOOLBOX_PREV ) ) );
2598*b1cdbd2cSJim Jagielski aMenu.SetHelpId( TBI_BACKWARD, HID_HELP_TOOLBOXITEM_BACKWARD );
2599*b1cdbd2cSJim Jagielski aMenu.EnableItem( TBI_BACKWARD, pHelpWin->HasHistoryPredecessor() );
2600*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_FORWARD, String( SfxResId( STR_HELP_BUTTON_NEXT ) ),
2601*b1cdbd2cSJim Jagielski Image( SfxResId( bHiContrast ? IMG_HELP_TOOLBOX_HC_NEXT : IMG_HELP_TOOLBOX_NEXT ) ) );
2602*b1cdbd2cSJim Jagielski aMenu.SetHelpId( TBI_FORWARD, HID_HELP_TOOLBOXITEM_FORWARD );
2603*b1cdbd2cSJim Jagielski aMenu.EnableItem( TBI_FORWARD, pHelpWin->HasHistorySuccessor() );
2604*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_START, String( SfxResId( STR_HELP_BUTTON_START ) ),
2605*b1cdbd2cSJim Jagielski Image( SfxResId( bHiContrast ? IMG_HELP_TOOLBOX_HC_START : IMG_HELP_TOOLBOX_START ) ) );
2606*b1cdbd2cSJim Jagielski aMenu.SetHelpId( TBI_START, HID_HELP_TOOLBOXITEM_START );
2607*b1cdbd2cSJim Jagielski aMenu.InsertSeparator();
2608*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_PRINT, String( SfxResId( STR_HELP_BUTTON_PRINT ) ),
2609*b1cdbd2cSJim Jagielski Image( SfxResId( bHiContrast ? IMG_HELP_TOOLBOX_HC_PRINT : IMG_HELP_TOOLBOX_PRINT ) ) );
2610*b1cdbd2cSJim Jagielski aMenu.SetHelpId( TBI_PRINT, HID_HELP_TOOLBOXITEM_PRINT );
2611*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_BOOKMARKS, String( SfxResId( STR_HELP_BUTTON_ADDBOOKMARK ) ),
2612*b1cdbd2cSJim Jagielski Image( SfxResId( bHiContrast ? IMG_HELP_TOOLBOX_HC_BOOKMARKS : IMG_HELP_TOOLBOX_BOOKMARKS ) ) );
2613*b1cdbd2cSJim Jagielski aMenu.SetHelpId( TBI_BOOKMARKS, HID_HELP_TOOLBOXITEM_BOOKMARKS );
2614*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_SEARCHDIALOG, String( SfxResId( STR_HELP_BUTTON_SEARCHDIALOG ) ),
2615*b1cdbd2cSJim Jagielski Image( SfxResId( bHiContrast ? IMG_HELP_TOOLBOX_HC_SEARCHDIALOG : IMG_HELP_TOOLBOX_SEARCHDIALOG ) ) );
2616*b1cdbd2cSJim Jagielski aMenu.SetHelpId( TBI_SEARCHDIALOG, HID_HELP_TOOLBOXITEM_SEARCHDIALOG );
2617*b1cdbd2cSJim Jagielski aMenu.InsertSeparator();
2618*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_SELECTIONMODE, String( SfxResId( STR_HELP_MENU_TEXT_SELECTION_MODE ) ) );
2619*b1cdbd2cSJim Jagielski aMenu.SetHelpId( TBI_SELECTIONMODE, HID_HELP_TEXT_SELECTION_MODE );
2620*b1cdbd2cSJim Jagielski Reference < XDispatchProvider > xProv( xFrame, UNO_QUERY );
2621*b1cdbd2cSJim Jagielski URL aURL;
2622*b1cdbd2cSJim Jagielski aURL.Complete = DEFINE_CONST_UNICODE(".uno:SelectTextMode");
2623*b1cdbd2cSJim Jagielski PARSE_URL( aURL );
2624*b1cdbd2cSJim Jagielski Reference < XDispatch > xDisp = xProv.is() ?
2625*b1cdbd2cSJim Jagielski xProv->queryDispatch( aURL, rtl::OUString(), 0 ) : Reference < XDispatch >();
2626*b1cdbd2cSJim Jagielski if(xDisp.is())
2627*b1cdbd2cSJim Jagielski {
2628*b1cdbd2cSJim Jagielski HelpStatusListener_Impl* pStateListener;
2629*b1cdbd2cSJim Jagielski Reference<XStatusListener>xStateListener = pStateListener =
2630*b1cdbd2cSJim Jagielski new HelpStatusListener_Impl(xDisp, aURL );
2631*b1cdbd2cSJim Jagielski FeatureStateEvent rEvent = pStateListener->GetStateEvent();
2632*b1cdbd2cSJim Jagielski sal_Bool bCheck = sal_False;
2633*b1cdbd2cSJim Jagielski rEvent.State >>= bCheck;
2634*b1cdbd2cSJim Jagielski aMenu.CheckItem(TBI_SELECTIONMODE, bCheck);
2635*b1cdbd2cSJim Jagielski }
2636*b1cdbd2cSJim Jagielski aMenu.InsertSeparator();
2637*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_COPY, String( SfxResId( STR_HELP_MENU_TEXT_COPY ) ),
2638*b1cdbd2cSJim Jagielski Image( SfxResId( bHiContrast ? IMG_HELP_TOOLBOX_HC_COPY : IMG_HELP_TOOLBOX_COPY ) ) );
2639*b1cdbd2cSJim Jagielski aMenu.SetHelpId( TBI_COPY, ".uno:Copy" );
2640*b1cdbd2cSJim Jagielski aMenu.EnableItem( TBI_COPY, HasSelection() );
2641*b1cdbd2cSJim Jagielski
2642*b1cdbd2cSJim Jagielski if ( bIsDebug )
2643*b1cdbd2cSJim Jagielski {
2644*b1cdbd2cSJim Jagielski aMenu.InsertSeparator();
2645*b1cdbd2cSJim Jagielski aMenu.InsertItem( TBI_SOURCEVIEW, String( SfxResId( STR_HELP_BUTTON_SOURCEVIEW ) ) );
2646*b1cdbd2cSJim Jagielski }
2647*b1cdbd2cSJim Jagielski
2648*b1cdbd2cSJim Jagielski if( SvtMenuOptions().IsEntryHidingEnabled() == sal_False )
2649*b1cdbd2cSJim Jagielski aMenu.SetMenuFlags( aMenu.GetMenuFlags() | MENU_FLAG_HIDEDISABLEDENTRIES );
2650*b1cdbd2cSJim Jagielski
2651*b1cdbd2cSJim Jagielski sal_uInt16 nId = aMenu.Execute( this, aPos );
2652*b1cdbd2cSJim Jagielski pHelpWin->DoAction( nId );
2653*b1cdbd2cSJim Jagielski nDone = 1;
2654*b1cdbd2cSJim Jagielski }
2655*b1cdbd2cSJim Jagielski }
2656*b1cdbd2cSJim Jagielski else if ( EVENT_KEYINPUT == nType && rNEvt.GetKeyEvent() )
2657*b1cdbd2cSJim Jagielski {
2658*b1cdbd2cSJim Jagielski const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
2659*b1cdbd2cSJim Jagielski const KeyCode& rKeyCode = pKEvt->GetKeyCode();
2660*b1cdbd2cSJim Jagielski sal_uInt16 nKeyGroup = rKeyCode.GetGroup();
2661*b1cdbd2cSJim Jagielski sal_uInt16 nKey = rKeyCode.GetCode();
2662*b1cdbd2cSJim Jagielski if ( KEYGROUP_ALPHA == nKeyGroup && !isHandledKey( rKeyCode ) )
2663*b1cdbd2cSJim Jagielski {
2664*b1cdbd2cSJim Jagielski // do nothing disables the writer accelerators
2665*b1cdbd2cSJim Jagielski nDone = 1;
2666*b1cdbd2cSJim Jagielski }
2667*b1cdbd2cSJim Jagielski else if ( rKeyCode.IsMod1() && ( KEY_F4 == nKey || KEY_W == nKey ) )
2668*b1cdbd2cSJim Jagielski {
2669*b1cdbd2cSJim Jagielski // <STRG><F4> or <STRG><W> -> close top frame
2670*b1cdbd2cSJim Jagielski pHelpWin->CloseWindow();
2671*b1cdbd2cSJim Jagielski nDone = 1;
2672*b1cdbd2cSJim Jagielski }
2673*b1cdbd2cSJim Jagielski else if ( KEY_TAB == nKey && aOnStartupCB.HasChildPathFocus() )
2674*b1cdbd2cSJim Jagielski {
2675*b1cdbd2cSJim Jagielski aToolBox.GrabFocus();
2676*b1cdbd2cSJim Jagielski nDone = 1;
2677*b1cdbd2cSJim Jagielski }
2678*b1cdbd2cSJim Jagielski }
2679*b1cdbd2cSJim Jagielski
2680*b1cdbd2cSJim Jagielski return nDone ? nDone : Window::PreNotify( rNEvt );
2681*b1cdbd2cSJim Jagielski }
2682*b1cdbd2cSJim Jagielski
2683*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2684*b1cdbd2cSJim Jagielski
GetFocus()2685*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::GetFocus()
2686*b1cdbd2cSJim Jagielski {
2687*b1cdbd2cSJim Jagielski if ( !bIsInClose )
2688*b1cdbd2cSJim Jagielski {
2689*b1cdbd2cSJim Jagielski try
2690*b1cdbd2cSJim Jagielski {
2691*b1cdbd2cSJim Jagielski if( xFrame.is() )
2692*b1cdbd2cSJim Jagielski {
2693*b1cdbd2cSJim Jagielski Reference< ::com::sun::star::awt::XWindow > xWindow = xFrame->getComponentWindow();
2694*b1cdbd2cSJim Jagielski if( xWindow.is() )
2695*b1cdbd2cSJim Jagielski xWindow->setFocus();
2696*b1cdbd2cSJim Jagielski }
2697*b1cdbd2cSJim Jagielski }
2698*b1cdbd2cSJim Jagielski catch( Exception& )
2699*b1cdbd2cSJim Jagielski {
2700*b1cdbd2cSJim Jagielski DBG_ERRORFILE( "SfxHelpTextWindow_Impl::GetFocus(): unexpected exception" );
2701*b1cdbd2cSJim Jagielski }
2702*b1cdbd2cSJim Jagielski }
2703*b1cdbd2cSJim Jagielski }
2704*b1cdbd2cSJim Jagielski
2705*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2706*b1cdbd2cSJim Jagielski
DataChanged(const DataChangedEvent & rDCEvt)2707*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::DataChanged( const DataChangedEvent& rDCEvt )
2708*b1cdbd2cSJim Jagielski {
2709*b1cdbd2cSJim Jagielski Window::DataChanged( rDCEvt );
2710*b1cdbd2cSJim Jagielski
2711*b1cdbd2cSJim Jagielski if ( ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) ||
2712*b1cdbd2cSJim Jagielski ( rDCEvt.GetType() == DATACHANGED_DISPLAY ) ) &&
2713*b1cdbd2cSJim Jagielski ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
2714*b1cdbd2cSJim Jagielski {
2715*b1cdbd2cSJim Jagielski SetBackground( Wallpaper( GetSettings().GetStyleSettings().GetFaceColor() ) );
2716*b1cdbd2cSJim Jagielski InitToolBoxImages();
2717*b1cdbd2cSJim Jagielski }
2718*b1cdbd2cSJim Jagielski }
2719*b1cdbd2cSJim Jagielski
2720*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2721*b1cdbd2cSJim Jagielski
ToggleIndex(sal_Bool bOn)2722*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::ToggleIndex( sal_Bool bOn )
2723*b1cdbd2cSJim Jagielski {
2724*b1cdbd2cSJim Jagielski bIsIndexOn = bOn;
2725*b1cdbd2cSJim Jagielski if ( bIsIndexOn )
2726*b1cdbd2cSJim Jagielski {
2727*b1cdbd2cSJim Jagielski aToolBox.SetItemImage( TBI_INDEX, aIndexOffImage );
2728*b1cdbd2cSJim Jagielski aToolBox.SetItemText( TBI_INDEX, aIndexOffText );
2729*b1cdbd2cSJim Jagielski }
2730*b1cdbd2cSJim Jagielski else
2731*b1cdbd2cSJim Jagielski {
2732*b1cdbd2cSJim Jagielski aToolBox.SetItemImage( TBI_INDEX, aIndexOnImage );
2733*b1cdbd2cSJim Jagielski aToolBox.SetItemText( TBI_INDEX, aIndexOnText );
2734*b1cdbd2cSJim Jagielski }
2735*b1cdbd2cSJim Jagielski }
2736*b1cdbd2cSJim Jagielski
2737*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2738*b1cdbd2cSJim Jagielski
SelectSearchText(const String & rSearchText,sal_Bool _bIsFullWordSearch)2739*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::SelectSearchText( const String& rSearchText, sal_Bool _bIsFullWordSearch )
2740*b1cdbd2cSJim Jagielski {
2741*b1cdbd2cSJim Jagielski aSearchText = rSearchText;
2742*b1cdbd2cSJim Jagielski bIsFullWordSearch = _bIsFullWordSearch;
2743*b1cdbd2cSJim Jagielski aSelectTimer.Start();
2744*b1cdbd2cSJim Jagielski }
2745*b1cdbd2cSJim Jagielski
2746*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2747*b1cdbd2cSJim Jagielski
SetPageStyleHeaderOff() const2748*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::SetPageStyleHeaderOff() const
2749*b1cdbd2cSJim Jagielski {
2750*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
2751*b1cdbd2cSJim Jagielski sal_Bool bSetOff = sal_False;
2752*b1cdbd2cSJim Jagielski #endif
2753*b1cdbd2cSJim Jagielski // set off the pagestyle header to prevent print output of the help URL
2754*b1cdbd2cSJim Jagielski try
2755*b1cdbd2cSJim Jagielski {
2756*b1cdbd2cSJim Jagielski Reference < XController > xController = xFrame->getController();
2757*b1cdbd2cSJim Jagielski Reference < XSelectionSupplier > xSelSup( xController, UNO_QUERY );
2758*b1cdbd2cSJim Jagielski if ( xSelSup.is() )
2759*b1cdbd2cSJim Jagielski {
2760*b1cdbd2cSJim Jagielski Reference < XIndexAccess > xSelection;
2761*b1cdbd2cSJim Jagielski if ( xSelSup->getSelection() >>= xSelection )
2762*b1cdbd2cSJim Jagielski {
2763*b1cdbd2cSJim Jagielski Reference < XTextRange > xRange;
2764*b1cdbd2cSJim Jagielski if ( xSelection->getByIndex(0) >>= xRange )
2765*b1cdbd2cSJim Jagielski {
2766*b1cdbd2cSJim Jagielski Reference < XText > xText = xRange->getText();
2767*b1cdbd2cSJim Jagielski Reference < XPropertySet > xProps( xText->createTextCursorByRange( xRange ), UNO_QUERY );
2768*b1cdbd2cSJim Jagielski ::rtl::OUString sStyleName;
2769*b1cdbd2cSJim Jagielski if ( xProps->getPropertyValue( DEFINE_CONST_OUSTRING("PageStyleName") ) >>= sStyleName )
2770*b1cdbd2cSJim Jagielski {
2771*b1cdbd2cSJim Jagielski Reference < XStyleFamiliesSupplier > xStyles( xController->getModel(), UNO_QUERY );
2772*b1cdbd2cSJim Jagielski Reference < XNameContainer > xContainer;
2773*b1cdbd2cSJim Jagielski if ( xStyles->getStyleFamilies()->getByName( DEFINE_CONST_OUSTRING("PageStyles") )
2774*b1cdbd2cSJim Jagielski >>= xContainer )
2775*b1cdbd2cSJim Jagielski {
2776*b1cdbd2cSJim Jagielski Reference < XStyle > xStyle;
2777*b1cdbd2cSJim Jagielski if ( xContainer->getByName( sStyleName ) >>= xStyle )
2778*b1cdbd2cSJim Jagielski {
2779*b1cdbd2cSJim Jagielski Reference < XPropertySet > xPropSet( xStyle, UNO_QUERY );
2780*b1cdbd2cSJim Jagielski xPropSet->setPropertyValue( DEFINE_CONST_OUSTRING("HeaderIsOn"),
2781*b1cdbd2cSJim Jagielski makeAny( sal_Bool( sal_False ) ) );
2782*b1cdbd2cSJim Jagielski
2783*b1cdbd2cSJim Jagielski Reference< XModifiable > xReset(xStyles, UNO_QUERY);
2784*b1cdbd2cSJim Jagielski xReset->setModified(sal_False);
2785*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
2786*b1cdbd2cSJim Jagielski bSetOff = sal_True;
2787*b1cdbd2cSJim Jagielski #endif
2788*b1cdbd2cSJim Jagielski }
2789*b1cdbd2cSJim Jagielski }
2790*b1cdbd2cSJim Jagielski }
2791*b1cdbd2cSJim Jagielski }
2792*b1cdbd2cSJim Jagielski }
2793*b1cdbd2cSJim Jagielski }
2794*b1cdbd2cSJim Jagielski }
2795*b1cdbd2cSJim Jagielski catch( Exception& )
2796*b1cdbd2cSJim Jagielski {
2797*b1cdbd2cSJim Jagielski DBG_ERRORFILE( "SfxHelpTextWindow_Impl::SetPageStyleHeaderOff(): unexpected exception" );
2798*b1cdbd2cSJim Jagielski }
2799*b1cdbd2cSJim Jagielski
2800*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
2801*b1cdbd2cSJim Jagielski if ( !bSetOff )
2802*b1cdbd2cSJim Jagielski {
2803*b1cdbd2cSJim Jagielski DBG_ERRORFILE( "SfxHelpTextWindow_Impl::SetPageStyleHeaderOff(): set off failed" );
2804*b1cdbd2cSJim Jagielski }
2805*b1cdbd2cSJim Jagielski #endif
2806*b1cdbd2cSJim Jagielski }
2807*b1cdbd2cSJim Jagielski
2808*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2809*b1cdbd2cSJim Jagielski
CloseFrame()2810*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::CloseFrame()
2811*b1cdbd2cSJim Jagielski {
2812*b1cdbd2cSJim Jagielski bIsInClose = sal_True;
2813*b1cdbd2cSJim Jagielski try
2814*b1cdbd2cSJim Jagielski {
2815*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloseable > xCloseable ( xFrame, ::com::sun::star::uno::UNO_QUERY );
2816*b1cdbd2cSJim Jagielski if (xCloseable.is())
2817*b1cdbd2cSJim Jagielski xCloseable->close(sal_True);
2818*b1cdbd2cSJim Jagielski }
2819*b1cdbd2cSJim Jagielski catch( ::com::sun::star::util::CloseVetoException& )
2820*b1cdbd2cSJim Jagielski {
2821*b1cdbd2cSJim Jagielski }
2822*b1cdbd2cSJim Jagielski }
2823*b1cdbd2cSJim Jagielski
2824*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2825*b1cdbd2cSJim Jagielski
DoSearch()2826*b1cdbd2cSJim Jagielski void SfxHelpTextWindow_Impl::DoSearch()
2827*b1cdbd2cSJim Jagielski {
2828*b1cdbd2cSJim Jagielski if ( !pSrchDlg )
2829*b1cdbd2cSJim Jagielski {
2830*b1cdbd2cSJim Jagielski // create the search dialog
2831*b1cdbd2cSJim Jagielski pSrchDlg = new sfx2::SearchDialog( pTextWin, DEFINE_CONST_UNICODE("HelpSearchDialog") );
2832*b1cdbd2cSJim Jagielski // set handler
2833*b1cdbd2cSJim Jagielski pSrchDlg->SetFindHdl( LINK( this, SfxHelpTextWindow_Impl, FindHdl ) );
2834*b1cdbd2cSJim Jagielski pSrchDlg->SetCloseHdl( LINK( this, SfxHelpTextWindow_Impl, CloseHdl ) );
2835*b1cdbd2cSJim Jagielski // get selected text of the help page to set it as the search text
2836*b1cdbd2cSJim Jagielski Reference< XTextRange > xCursor = getCursor();
2837*b1cdbd2cSJim Jagielski if ( xCursor.is() )
2838*b1cdbd2cSJim Jagielski {
2839*b1cdbd2cSJim Jagielski String sText = xCursor->getString();
2840*b1cdbd2cSJim Jagielski if ( sText.Len() > 0 )
2841*b1cdbd2cSJim Jagielski pSrchDlg->SetSearchText( sText );
2842*b1cdbd2cSJim Jagielski }
2843*b1cdbd2cSJim Jagielski pSrchDlg->Show();
2844*b1cdbd2cSJim Jagielski }
2845*b1cdbd2cSJim Jagielski }
2846*b1cdbd2cSJim Jagielski
2847*b1cdbd2cSJim Jagielski // class SfxHelpWindow_Impl ----------------------------------------------
2848*b1cdbd2cSJim Jagielski
Resize()2849*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::Resize()
2850*b1cdbd2cSJim Jagielski {
2851*b1cdbd2cSJim Jagielski SplitWindow::Resize();
2852*b1cdbd2cSJim Jagielski InitSizes();
2853*b1cdbd2cSJim Jagielski }
2854*b1cdbd2cSJim Jagielski
2855*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2856*b1cdbd2cSJim Jagielski
Split()2857*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::Split()
2858*b1cdbd2cSJim Jagielski {
2859*b1cdbd2cSJim Jagielski static long nMinSplitSize = 5;
2860*b1cdbd2cSJim Jagielski static long nMaxSplitSize = 99 - nMinSplitSize;
2861*b1cdbd2cSJim Jagielski
2862*b1cdbd2cSJim Jagielski SplitWindow::Split();
2863*b1cdbd2cSJim Jagielski
2864*b1cdbd2cSJim Jagielski nIndexSize = GetItemSize( INDEXWIN_ID );
2865*b1cdbd2cSJim Jagielski nTextSize = GetItemSize( TEXTWIN_ID );
2866*b1cdbd2cSJim Jagielski
2867*b1cdbd2cSJim Jagielski sal_Bool bMod = sal_False;
2868*b1cdbd2cSJim Jagielski if( nIndexSize < nMinSplitSize )
2869*b1cdbd2cSJim Jagielski {
2870*b1cdbd2cSJim Jagielski nIndexSize = nMinSplitSize;
2871*b1cdbd2cSJim Jagielski nTextSize = nMaxSplitSize;
2872*b1cdbd2cSJim Jagielski
2873*b1cdbd2cSJim Jagielski bMod = sal_True;
2874*b1cdbd2cSJim Jagielski }
2875*b1cdbd2cSJim Jagielski else if( nTextSize < nMinSplitSize )
2876*b1cdbd2cSJim Jagielski {
2877*b1cdbd2cSJim Jagielski nTextSize = nMinSplitSize;
2878*b1cdbd2cSJim Jagielski nIndexSize = nMaxSplitSize;
2879*b1cdbd2cSJim Jagielski
2880*b1cdbd2cSJim Jagielski bMod = sal_True;
2881*b1cdbd2cSJim Jagielski }
2882*b1cdbd2cSJim Jagielski else
2883*b1cdbd2cSJim Jagielski bMod = sal_False;
2884*b1cdbd2cSJim Jagielski
2885*b1cdbd2cSJim Jagielski if( bMod )
2886*b1cdbd2cSJim Jagielski {
2887*b1cdbd2cSJim Jagielski SetItemSize( INDEXWIN_ID, nIndexSize );
2888*b1cdbd2cSJim Jagielski SetItemSize( TEXTWIN_ID, nTextSize );
2889*b1cdbd2cSJim Jagielski }
2890*b1cdbd2cSJim Jagielski
2891*b1cdbd2cSJim Jagielski InitSizes();
2892*b1cdbd2cSJim Jagielski }
2893*b1cdbd2cSJim Jagielski
2894*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2895*b1cdbd2cSJim Jagielski
GetFocus()2896*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::GetFocus()
2897*b1cdbd2cSJim Jagielski {
2898*b1cdbd2cSJim Jagielski pTextWin->GrabFocus();
2899*b1cdbd2cSJim Jagielski }
2900*b1cdbd2cSJim Jagielski
2901*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2902*b1cdbd2cSJim Jagielski
MakeLayout()2903*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::MakeLayout()
2904*b1cdbd2cSJim Jagielski {
2905*b1cdbd2cSJim Jagielski if ( nHeight > 0 && xWindow.is() )
2906*b1cdbd2cSJim Jagielski {
2907*b1cdbd2cSJim Jagielski Window* pScreenWin = VCLUnoHelper::GetWindow( xWindow );
2908*b1cdbd2cSJim Jagielski
2909*b1cdbd2cSJim Jagielski /* #i55528#
2910*b1cdbd2cSJim Jagielski Hide() / Show() will produce starnge effects.
2911*b1cdbd2cSJim Jagielski The returned size (used later to be written back into the configuration)
2912*b1cdbd2cSJim Jagielski isnt the right after a resize during the window is hidden.
2913*b1cdbd2cSJim Jagielski If this resize is done if the window is visible evyrthing works as aspected.
2914*b1cdbd2cSJim Jagielski Some VCL-patches could not solve this problem so I've established the
2915*b1cdbd2cSJim Jagielski workaround: resize the help window if it's visible .-)
2916*b1cdbd2cSJim Jagielski */
2917*b1cdbd2cSJim Jagielski // pScreenWin->Hide();
2918*b1cdbd2cSJim Jagielski
2919*b1cdbd2cSJim Jagielski ::com::sun::star::awt::Rectangle aRect = xWindow->getPosSize();
2920*b1cdbd2cSJim Jagielski sal_Int32 nOldWidth = bIndex ? nCollapseWidth : nExpandWidth;
2921*b1cdbd2cSJim Jagielski sal_Int32 nWidth = bIndex ? nExpandWidth : nCollapseWidth;
2922*b1cdbd2cSJim Jagielski xWindow->setPosSize( aRect.X, aRect.Y, nWidth, nHeight, ::com::sun::star::awt::PosSize::SIZE );
2923*b1cdbd2cSJim Jagielski
2924*b1cdbd2cSJim Jagielski if ( aRect.Width > 0 && aRect.Height > 0 )
2925*b1cdbd2cSJim Jagielski {
2926*b1cdbd2cSJim Jagielski Rectangle aScreenRect = pScreenWin->GetClientWindowExtentsRelative( NULL );
2927*b1cdbd2cSJim Jagielski Point aNewPos = aScreenRect.TopLeft();
2928*b1cdbd2cSJim Jagielski sal_Int32 nDiffWidth = nOldWidth - nWidth;
2929*b1cdbd2cSJim Jagielski aNewPos.X() += nDiffWidth;
2930*b1cdbd2cSJim Jagielski pScreenWin->SetPosPixel( aNewPos );
2931*b1cdbd2cSJim Jagielski }
2932*b1cdbd2cSJim Jagielski else if ( aWinPos.X() > 0 && aWinPos.Y() > 0 )
2933*b1cdbd2cSJim Jagielski pScreenWin->SetPosPixel( aWinPos );
2934*b1cdbd2cSJim Jagielski
2935*b1cdbd2cSJim Jagielski // pScreenWin->Show();
2936*b1cdbd2cSJim Jagielski }
2937*b1cdbd2cSJim Jagielski
2938*b1cdbd2cSJim Jagielski Clear();
2939*b1cdbd2cSJim Jagielski
2940*b1cdbd2cSJim Jagielski if ( bIndex )
2941*b1cdbd2cSJim Jagielski {
2942*b1cdbd2cSJim Jagielski pIndexWin->Show();
2943*b1cdbd2cSJim Jagielski InsertItem( COLSET_ID, 100, SPLITWINDOW_APPEND, SPLITSET_ID, SWIB_PERCENTSIZE | SWIB_COLSET );
2944*b1cdbd2cSJim Jagielski InsertItem( INDEXWIN_ID, pIndexWin, nIndexSize, SPLITWINDOW_APPEND, COLSET_ID, SWIB_PERCENTSIZE );
2945*b1cdbd2cSJim Jagielski InsertItem( TEXTWIN_ID, pTextWin, nTextSize, SPLITWINDOW_APPEND, COLSET_ID, SWIB_PERCENTSIZE );
2946*b1cdbd2cSJim Jagielski }
2947*b1cdbd2cSJim Jagielski else
2948*b1cdbd2cSJim Jagielski {
2949*b1cdbd2cSJim Jagielski pIndexWin->Hide();
2950*b1cdbd2cSJim Jagielski InsertItem( COLSET_ID, 100, SPLITWINDOW_APPEND, SPLITSET_ID, SWIB_PERCENTSIZE | SWIB_COLSET );
2951*b1cdbd2cSJim Jagielski InsertItem( TEXTWIN_ID, pTextWin, 100, SPLITWINDOW_APPEND, 1, SWIB_PERCENTSIZE );
2952*b1cdbd2cSJim Jagielski }
2953*b1cdbd2cSJim Jagielski }
2954*b1cdbd2cSJim Jagielski
2955*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2956*b1cdbd2cSJim Jagielski
InitSizes()2957*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::InitSizes()
2958*b1cdbd2cSJim Jagielski {
2959*b1cdbd2cSJim Jagielski if ( xWindow.is() )
2960*b1cdbd2cSJim Jagielski {
2961*b1cdbd2cSJim Jagielski ::com::sun::star::awt::Rectangle aRect = xWindow->getPosSize();
2962*b1cdbd2cSJim Jagielski nHeight = aRect.Height;
2963*b1cdbd2cSJim Jagielski
2964*b1cdbd2cSJim Jagielski if ( bIndex )
2965*b1cdbd2cSJim Jagielski {
2966*b1cdbd2cSJim Jagielski nExpandWidth = aRect.Width;
2967*b1cdbd2cSJim Jagielski nCollapseWidth = nExpandWidth * nTextSize / 100;
2968*b1cdbd2cSJim Jagielski }
2969*b1cdbd2cSJim Jagielski else
2970*b1cdbd2cSJim Jagielski {
2971*b1cdbd2cSJim Jagielski nCollapseWidth = aRect.Width;
2972*b1cdbd2cSJim Jagielski nExpandWidth = nCollapseWidth * 100 / nTextSize;
2973*b1cdbd2cSJim Jagielski }
2974*b1cdbd2cSJim Jagielski }
2975*b1cdbd2cSJim Jagielski }
2976*b1cdbd2cSJim Jagielski
2977*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2978*b1cdbd2cSJim Jagielski
LoadConfig()2979*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::LoadConfig()
2980*b1cdbd2cSJim Jagielski {
2981*b1cdbd2cSJim Jagielski SvtViewOptions aViewOpt( E_WINDOW, CONFIGNAME_HELPWIN );
2982*b1cdbd2cSJim Jagielski if ( aViewOpt.Exists() )
2983*b1cdbd2cSJim Jagielski {
2984*b1cdbd2cSJim Jagielski bIndex = aViewOpt.IsVisible();
2985*b1cdbd2cSJim Jagielski String aUserData;
2986*b1cdbd2cSJim Jagielski Any aUserItem = aViewOpt.GetUserItem( USERITEM_NAME );
2987*b1cdbd2cSJim Jagielski rtl::OUString aTemp;
2988*b1cdbd2cSJim Jagielski if ( aUserItem >>= aTemp )
2989*b1cdbd2cSJim Jagielski {
2990*b1cdbd2cSJim Jagielski aUserData = String( aTemp );
2991*b1cdbd2cSJim Jagielski DBG_ASSERT( aUserData.GetTokenCount() == 6, "invalid user data" );
2992*b1cdbd2cSJim Jagielski sal_uInt16 nIdx = 0;
2993*b1cdbd2cSJim Jagielski nIndexSize = aUserData.GetToken( 0, ';', nIdx ).ToInt32();
2994*b1cdbd2cSJim Jagielski nTextSize = aUserData.GetToken( 0, ';', nIdx ).ToInt32();
2995*b1cdbd2cSJim Jagielski sal_Int32 nWidth = aUserData.GetToken( 0, ';', nIdx ).ToInt32();
2996*b1cdbd2cSJim Jagielski nHeight = aUserData.GetToken( 0, ';', nIdx ).ToInt32();
2997*b1cdbd2cSJim Jagielski aWinPos.X() = aUserData.GetToken( 0, ';', nIdx ).ToInt32();
2998*b1cdbd2cSJim Jagielski aWinPos.Y() = aUserData.GetToken( 0, ';', nIdx ).ToInt32();
2999*b1cdbd2cSJim Jagielski if ( bIndex )
3000*b1cdbd2cSJim Jagielski {
3001*b1cdbd2cSJim Jagielski nExpandWidth = nWidth;
3002*b1cdbd2cSJim Jagielski nCollapseWidth = nExpandWidth * nTextSize / 100;
3003*b1cdbd2cSJim Jagielski }
3004*b1cdbd2cSJim Jagielski else
3005*b1cdbd2cSJim Jagielski {
3006*b1cdbd2cSJim Jagielski nCollapseWidth = nWidth;
3007*b1cdbd2cSJim Jagielski nExpandWidth = nCollapseWidth * 100 / nTextSize;
3008*b1cdbd2cSJim Jagielski }
3009*b1cdbd2cSJim Jagielski }
3010*b1cdbd2cSJim Jagielski
3011*b1cdbd2cSJim Jagielski pTextWin->ToggleIndex( bIndex );
3012*b1cdbd2cSJim Jagielski }
3013*b1cdbd2cSJim Jagielski }
3014*b1cdbd2cSJim Jagielski
3015*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3016*b1cdbd2cSJim Jagielski
SaveConfig()3017*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::SaveConfig()
3018*b1cdbd2cSJim Jagielski {
3019*b1cdbd2cSJim Jagielski SvtViewOptions aViewOpt( E_WINDOW, CONFIGNAME_HELPWIN );
3020*b1cdbd2cSJim Jagielski sal_Int32 nW = 0, nH = 0;
3021*b1cdbd2cSJim Jagielski
3022*b1cdbd2cSJim Jagielski if ( xWindow.is() )
3023*b1cdbd2cSJim Jagielski {
3024*b1cdbd2cSJim Jagielski ::com::sun::star::awt::Rectangle aRect = xWindow->getPosSize();
3025*b1cdbd2cSJim Jagielski nW = aRect.Width;
3026*b1cdbd2cSJim Jagielski nH = aRect.Height;
3027*b1cdbd2cSJim Jagielski }
3028*b1cdbd2cSJim Jagielski
3029*b1cdbd2cSJim Jagielski aViewOpt.SetVisible( bIndex );
3030*b1cdbd2cSJim Jagielski String aUserData = String::CreateFromInt32( nIndexSize );
3031*b1cdbd2cSJim Jagielski aUserData += ';';
3032*b1cdbd2cSJim Jagielski aUserData += String::CreateFromInt32( nTextSize );
3033*b1cdbd2cSJim Jagielski aUserData += ';';
3034*b1cdbd2cSJim Jagielski aUserData += String::CreateFromInt32( nW );
3035*b1cdbd2cSJim Jagielski aUserData += ';';
3036*b1cdbd2cSJim Jagielski aUserData += String::CreateFromInt32( nH );
3037*b1cdbd2cSJim Jagielski
3038*b1cdbd2cSJim Jagielski Window* pScreenWin = VCLUnoHelper::GetWindow( xWindow );
3039*b1cdbd2cSJim Jagielski aWinPos = pScreenWin->GetWindowExtentsRelative( NULL ).TopLeft();
3040*b1cdbd2cSJim Jagielski aUserData += ';';
3041*b1cdbd2cSJim Jagielski aUserData += String::CreateFromInt32( aWinPos.X() );
3042*b1cdbd2cSJim Jagielski aUserData += ';';
3043*b1cdbd2cSJim Jagielski aUserData += String::CreateFromInt32( aWinPos.Y() );
3044*b1cdbd2cSJim Jagielski
3045*b1cdbd2cSJim Jagielski aViewOpt.SetUserItem( USERITEM_NAME, makeAny( rtl::OUString( aUserData ) ) );
3046*b1cdbd2cSJim Jagielski }
3047*b1cdbd2cSJim Jagielski
3048*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3049*b1cdbd2cSJim Jagielski
ShowStartPage()3050*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::ShowStartPage()
3051*b1cdbd2cSJim Jagielski {
3052*b1cdbd2cSJim Jagielski ::rtl::OUString sHelpURL = SfxHelpWindow_Impl::buildHelpURL(pIndexWin->GetFactory(),
3053*b1cdbd2cSJim Jagielski DEFINE_CONST_UNICODE("/start"),
3054*b1cdbd2cSJim Jagielski ::rtl::OUString(),
3055*b1cdbd2cSJim Jagielski sal_True);
3056*b1cdbd2cSJim Jagielski loadHelpContent(sHelpURL);
3057*b1cdbd2cSJim Jagielski }
3058*b1cdbd2cSJim Jagielski
3059*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3060*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpWindow_Impl,SelectHdl,ToolBox *,pToolBox)3061*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpWindow_Impl, SelectHdl, ToolBox* , pToolBox )
3062*b1cdbd2cSJim Jagielski {
3063*b1cdbd2cSJim Jagielski if ( pToolBox )
3064*b1cdbd2cSJim Jagielski {
3065*b1cdbd2cSJim Jagielski bGrabFocusToToolBox = pToolBox->HasChildPathFocus();
3066*b1cdbd2cSJim Jagielski DoAction( pToolBox->GetCurItemId() );
3067*b1cdbd2cSJim Jagielski }
3068*b1cdbd2cSJim Jagielski
3069*b1cdbd2cSJim Jagielski return 1;
3070*b1cdbd2cSJim Jagielski }
3071*b1cdbd2cSJim Jagielski
3072*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
3073*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpWindow_Impl,OpenHdl,SfxHelpIndexWindow_Impl *,EMPTYARG)3074*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpWindow_Impl, OpenHdl, SfxHelpIndexWindow_Impl* , EMPTYARG )
3075*b1cdbd2cSJim Jagielski {
3076*b1cdbd2cSJim Jagielski pIndexWin->SelectExecutableEntry();
3077*b1cdbd2cSJim Jagielski String aEntry = pIndexWin->GetSelectEntry();
3078*b1cdbd2cSJim Jagielski
3079*b1cdbd2cSJim Jagielski if ( aEntry.Len() < 1 )
3080*b1cdbd2cSJim Jagielski return 0;
3081*b1cdbd2cSJim Jagielski
3082*b1cdbd2cSJim Jagielski ::rtl::OUString sHelpURL;
3083*b1cdbd2cSJim Jagielski
3084*b1cdbd2cSJim Jagielski // INetURLObject aObj(aEntry);
3085*b1cdbd2cSJim Jagielski // sal_Bool bComplete = ( aObj.GetProtocol() == INET_PROT_VND_SUN_STAR_HELP );
3086*b1cdbd2cSJim Jagielski
3087*b1cdbd2cSJim Jagielski sal_Bool bComplete = rtl::OUString(aEntry).toAsciiLowerCase().match(rtl::OUString::createFromAscii("vnd.sun.star.help"),0);
3088*b1cdbd2cSJim Jagielski
3089*b1cdbd2cSJim Jagielski if (bComplete)
3090*b1cdbd2cSJim Jagielski sHelpURL = ::rtl::OUString(aEntry);
3091*b1cdbd2cSJim Jagielski else
3092*b1cdbd2cSJim Jagielski {
3093*b1cdbd2cSJim Jagielski String aId;
3094*b1cdbd2cSJim Jagielski String aAnchor = String('#');
3095*b1cdbd2cSJim Jagielski if ( aEntry.GetTokenCount( '#' ) == 2 )
3096*b1cdbd2cSJim Jagielski {
3097*b1cdbd2cSJim Jagielski aId = aEntry.GetToken( 0, '#' );
3098*b1cdbd2cSJim Jagielski aAnchor += aEntry.GetToken( 1, '#' );
3099*b1cdbd2cSJim Jagielski }
3100*b1cdbd2cSJim Jagielski else
3101*b1cdbd2cSJim Jagielski aId = aEntry;
3102*b1cdbd2cSJim Jagielski
3103*b1cdbd2cSJim Jagielski aEntry = '/';
3104*b1cdbd2cSJim Jagielski aEntry += aId;
3105*b1cdbd2cSJim Jagielski
3106*b1cdbd2cSJim Jagielski sHelpURL = SfxHelpWindow_Impl::buildHelpURL(pIndexWin->GetFactory(),
3107*b1cdbd2cSJim Jagielski aEntry,
3108*b1cdbd2cSJim Jagielski aAnchor,
3109*b1cdbd2cSJim Jagielski sal_True);
3110*b1cdbd2cSJim Jagielski }
3111*b1cdbd2cSJim Jagielski
3112*b1cdbd2cSJim Jagielski loadHelpContent(sHelpURL);
3113*b1cdbd2cSJim Jagielski
3114*b1cdbd2cSJim Jagielski return 0;
3115*b1cdbd2cSJim Jagielski }
3116*b1cdbd2cSJim Jagielski
3117*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
3118*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpWindow_Impl,SelectFactoryHdl,SfxHelpIndexWindow_Impl *,pWin)3119*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpWindow_Impl, SelectFactoryHdl, SfxHelpIndexWindow_Impl* , pWin )
3120*b1cdbd2cSJim Jagielski {
3121*b1cdbd2cSJim Jagielski if ( sTitle.Len() == 0 )
3122*b1cdbd2cSJim Jagielski sTitle = GetParent()->GetText();
3123*b1cdbd2cSJim Jagielski
3124*b1cdbd2cSJim Jagielski String aNewTitle = sTitle;
3125*b1cdbd2cSJim Jagielski aNewTitle += DEFINE_CONST_UNICODE(" - ");
3126*b1cdbd2cSJim Jagielski aNewTitle += pIndexWin->GetActiveFactoryTitle();
3127*b1cdbd2cSJim Jagielski
3128*b1cdbd2cSJim Jagielski Reference< XTitle > xTitle(xFrame, UNO_QUERY);
3129*b1cdbd2cSJim Jagielski if (xTitle.is ())
3130*b1cdbd2cSJim Jagielski xTitle->setTitle (aNewTitle);
3131*b1cdbd2cSJim Jagielski
3132*b1cdbd2cSJim Jagielski if ( pWin )
3133*b1cdbd2cSJim Jagielski ShowStartPage();
3134*b1cdbd2cSJim Jagielski pIndexWin->ClearSearchPage();
3135*b1cdbd2cSJim Jagielski
3136*b1cdbd2cSJim Jagielski return 0;
3137*b1cdbd2cSJim Jagielski }
3138*b1cdbd2cSJim Jagielski
3139*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3140*b1cdbd2cSJim Jagielski
IMPL_LINK(SfxHelpWindow_Impl,ChangeHdl,HelpListener_Impl *,pListener)3141*b1cdbd2cSJim Jagielski IMPL_LINK( SfxHelpWindow_Impl, ChangeHdl, HelpListener_Impl*, pListener )
3142*b1cdbd2cSJim Jagielski {
3143*b1cdbd2cSJim Jagielski SetFactory( pListener->GetFactory() );
3144*b1cdbd2cSJim Jagielski return 0;
3145*b1cdbd2cSJim Jagielski }
3146*b1cdbd2cSJim Jagielski
3147*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3148*b1cdbd2cSJim Jagielski
openDone(const::rtl::OUString & sURL,sal_Bool bSuccess)3149*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::openDone(const ::rtl::OUString& sURL ,
3150*b1cdbd2cSJim Jagielski sal_Bool bSuccess)
3151*b1cdbd2cSJim Jagielski {
3152*b1cdbd2cSJim Jagielski INetURLObject aObj( sURL );
3153*b1cdbd2cSJim Jagielski if ( aObj.GetProtocol() == INET_PROT_VND_SUN_STAR_HELP )
3154*b1cdbd2cSJim Jagielski SetFactory( aObj.GetHost() );
3155*b1cdbd2cSJim Jagielski if ( IsWait() )
3156*b1cdbd2cSJim Jagielski LeaveWait();
3157*b1cdbd2cSJim Jagielski if ( bGrabFocusToToolBox )
3158*b1cdbd2cSJim Jagielski {
3159*b1cdbd2cSJim Jagielski pTextWin->GetToolBox().GrabFocus();
3160*b1cdbd2cSJim Jagielski bGrabFocusToToolBox = sal_False;
3161*b1cdbd2cSJim Jagielski }
3162*b1cdbd2cSJim Jagielski else
3163*b1cdbd2cSJim Jagielski pIndexWin->GrabFocusBack();
3164*b1cdbd2cSJim Jagielski if ( bSuccess )
3165*b1cdbd2cSJim Jagielski {
3166*b1cdbd2cSJim Jagielski // set some view settings: "prevent help tips" and "helpid == 68245"
3167*b1cdbd2cSJim Jagielski try
3168*b1cdbd2cSJim Jagielski {
3169*b1cdbd2cSJim Jagielski Reference < XController > xController = pTextWin->getFrame()->getController();
3170*b1cdbd2cSJim Jagielski if ( xController.is() )
3171*b1cdbd2cSJim Jagielski {
3172*b1cdbd2cSJim Jagielski Reference < XViewSettingsSupplier > xSettings( xController, UNO_QUERY );
3173*b1cdbd2cSJim Jagielski Reference < XPropertySet > xViewProps = xSettings->getViewSettings();
3174*b1cdbd2cSJim Jagielski Reference< XPropertySetInfo > xInfo = xViewProps->getPropertySetInfo();
3175*b1cdbd2cSJim Jagielski Any aBoolAny = makeAny( sal_Bool( sal_True ) );
3176*b1cdbd2cSJim Jagielski xViewProps->setPropertyValue( DEFINE_CONST_OUSTRING("ShowContentTips"), makeAny( sal_Bool( sal_False ) ) );
3177*b1cdbd2cSJim Jagielski xViewProps->setPropertyValue( DEFINE_CONST_OUSTRING("ShowGraphics"), aBoolAny );
3178*b1cdbd2cSJim Jagielski xViewProps->setPropertyValue( DEFINE_CONST_OUSTRING("ShowTables"), aBoolAny );
3179*b1cdbd2cSJim Jagielski xViewProps->setPropertyValue( DEFINE_CONST_OUSTRING("HelpURL"), makeAny( DEFINE_CONST_OUSTRING("HID:SFX2_HID_HELP_ONHELP") ) );
3180*b1cdbd2cSJim Jagielski ::rtl::OUString sProperty( DEFINE_CONST_OUSTRING("IsExecuteHyperlinks") );
3181*b1cdbd2cSJim Jagielski if ( xInfo->hasPropertyByName( sProperty ) )
3182*b1cdbd2cSJim Jagielski xViewProps->setPropertyValue( sProperty, aBoolAny );
3183*b1cdbd2cSJim Jagielski xController->restoreViewData(pHelpInterceptor->GetViewData());
3184*b1cdbd2cSJim Jagielski }
3185*b1cdbd2cSJim Jagielski }
3186*b1cdbd2cSJim Jagielski catch( Exception& )
3187*b1cdbd2cSJim Jagielski {
3188*b1cdbd2cSJim Jagielski DBG_ERROR( "SfxHelpWindow_Impl::OpenDoneHdl(): unexpected exception" );
3189*b1cdbd2cSJim Jagielski }
3190*b1cdbd2cSJim Jagielski
3191*b1cdbd2cSJim Jagielski // When the SearchPage opens the help doc, then select all words, which are equal to its text
3192*b1cdbd2cSJim Jagielski String sSearchText = TRIM( pIndexWin->GetSearchText() );
3193*b1cdbd2cSJim Jagielski if ( sSearchText.Len() > 0 )
3194*b1cdbd2cSJim Jagielski pTextWin->SelectSearchText( sSearchText, pIndexWin->IsFullWordSearch() );
3195*b1cdbd2cSJim Jagielski
3196*b1cdbd2cSJim Jagielski // no page style header -> this prevents a print output of the URL
3197*b1cdbd2cSJim Jagielski pTextWin->SetPageStyleHeaderOff();
3198*b1cdbd2cSJim Jagielski }
3199*b1cdbd2cSJim Jagielski }
3200*b1cdbd2cSJim Jagielski
3201*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3202*b1cdbd2cSJim Jagielski
SfxHelpWindow_Impl(const::com::sun::star::uno::Reference<::com::sun::star::frame::XFrame> & rFrame,Window * pParent,WinBits)3203*b1cdbd2cSJim Jagielski SfxHelpWindow_Impl::SfxHelpWindow_Impl(
3204*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference < ::com::sun::star::frame::XFrame >& rFrame,
3205*b1cdbd2cSJim Jagielski Window* pParent, WinBits ) :
3206*b1cdbd2cSJim Jagielski
3207*b1cdbd2cSJim Jagielski SplitWindow( pParent, WB_3DLOOK | WB_NOSPLITDRAW ),
3208*b1cdbd2cSJim Jagielski
3209*b1cdbd2cSJim Jagielski xFrame ( rFrame ),
3210*b1cdbd2cSJim Jagielski pIndexWin ( NULL ),
3211*b1cdbd2cSJim Jagielski pTextWin ( NULL ),
3212*b1cdbd2cSJim Jagielski pHelpInterceptor ( new HelpInterceptor_Impl() ),
3213*b1cdbd2cSJim Jagielski pHelpListener ( new HelpListener_Impl( pHelpInterceptor ) ),
3214*b1cdbd2cSJim Jagielski nExpandWidth ( 0 ),
3215*b1cdbd2cSJim Jagielski nCollapseWidth ( 0 ),
3216*b1cdbd2cSJim Jagielski nHeight ( 0 ),
3217*b1cdbd2cSJim Jagielski nIndexSize ( 40 ),
3218*b1cdbd2cSJim Jagielski nTextSize ( 60 ),
3219*b1cdbd2cSJim Jagielski bIndex ( sal_True ),
3220*b1cdbd2cSJim Jagielski bGrabFocusToToolBox ( sal_False ),
3221*b1cdbd2cSJim Jagielski aWinPos ( 0, 0 ),
3222*b1cdbd2cSJim Jagielski sTitle ( pParent->GetText() )
3223*b1cdbd2cSJim Jagielski {
3224*b1cdbd2cSJim Jagielski SetHelpId( HID_HELP_WINDOW );
3225*b1cdbd2cSJim Jagielski SetStyle( GetStyle() | WB_DIALOGCONTROL );
3226*b1cdbd2cSJim Jagielski
3227*b1cdbd2cSJim Jagielski pHelpInterceptor->InitWaiter( this );
3228*b1cdbd2cSJim Jagielski pIndexWin = new SfxHelpIndexWindow_Impl( this );
3229*b1cdbd2cSJim Jagielski pIndexWin->SetDoubleClickHdl( LINK( this, SfxHelpWindow_Impl, OpenHdl ) );
3230*b1cdbd2cSJim Jagielski pIndexWin->SetSelectFactoryHdl( LINK( this, SfxHelpWindow_Impl, SelectFactoryHdl ) );
3231*b1cdbd2cSJim Jagielski pIndexWin->Show();
3232*b1cdbd2cSJim Jagielski pTextWin = new SfxHelpTextWindow_Impl( this );
3233*b1cdbd2cSJim Jagielski Reference < XFramesSupplier > xSup( rFrame, UNO_QUERY );
3234*b1cdbd2cSJim Jagielski Reference < XFrames > xFrames = xSup->getFrames();
3235*b1cdbd2cSJim Jagielski xFrames->append( pTextWin->getFrame() );
3236*b1cdbd2cSJim Jagielski pTextWin->SetSelectHdl( LINK( this, SfxHelpWindow_Impl, SelectHdl ) );
3237*b1cdbd2cSJim Jagielski pTextWin->Show();
3238*b1cdbd2cSJim Jagielski pHelpInterceptor->setInterception( pTextWin->getFrame() );
3239*b1cdbd2cSJim Jagielski pHelpListener->SetChangeHdl( LINK( this, SfxHelpWindow_Impl, ChangeHdl ) );
3240*b1cdbd2cSJim Jagielski LoadConfig();
3241*b1cdbd2cSJim Jagielski }
3242*b1cdbd2cSJim Jagielski
3243*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3244*b1cdbd2cSJim Jagielski
~SfxHelpWindow_Impl()3245*b1cdbd2cSJim Jagielski SfxHelpWindow_Impl::~SfxHelpWindow_Impl()
3246*b1cdbd2cSJim Jagielski {
3247*b1cdbd2cSJim Jagielski SaveConfig();
3248*b1cdbd2cSJim Jagielski Window* pDel = pIndexWin;
3249*b1cdbd2cSJim Jagielski pIndexWin = NULL;
3250*b1cdbd2cSJim Jagielski delete pDel;
3251*b1cdbd2cSJim Jagielski
3252*b1cdbd2cSJim Jagielski pTextWin->CloseFrame();
3253*b1cdbd2cSJim Jagielski delete pTextWin;
3254*b1cdbd2cSJim Jagielski }
3255*b1cdbd2cSJim Jagielski
3256*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3257*b1cdbd2cSJim Jagielski
PreNotify(NotifyEvent & rNEvt)3258*b1cdbd2cSJim Jagielski long SfxHelpWindow_Impl::PreNotify( NotifyEvent& rNEvt )
3259*b1cdbd2cSJim Jagielski {
3260*b1cdbd2cSJim Jagielski sal_Bool bHandled = sal_False;
3261*b1cdbd2cSJim Jagielski if ( rNEvt.GetType() == EVENT_KEYINPUT )
3262*b1cdbd2cSJim Jagielski {
3263*b1cdbd2cSJim Jagielski // Backward == <ALT><LEFT> or <BACKSPACE> Forward == <ALT><RIGHT>
3264*b1cdbd2cSJim Jagielski const KeyCode& rKeyCode = rNEvt.GetKeyEvent()->GetKeyCode();
3265*b1cdbd2cSJim Jagielski sal_uInt16 nKey = rKeyCode.GetCode();
3266*b1cdbd2cSJim Jagielski if ( ( rKeyCode.IsMod2() && ( KEY_LEFT == nKey || KEY_RIGHT == nKey ) ) ||
3267*b1cdbd2cSJim Jagielski ( !rKeyCode.GetModifier() && KEY_BACKSPACE == nKey && !pIndexWin->HasFocusOnEdit() ) )
3268*b1cdbd2cSJim Jagielski {
3269*b1cdbd2cSJim Jagielski DoAction( rKeyCode.GetCode() == KEY_RIGHT ? TBI_FORWARD : TBI_BACKWARD );
3270*b1cdbd2cSJim Jagielski bHandled = sal_True;
3271*b1cdbd2cSJim Jagielski }
3272*b1cdbd2cSJim Jagielski else if ( rKeyCode.IsMod1() && ( KEY_F4 == nKey || KEY_W == nKey ) )
3273*b1cdbd2cSJim Jagielski {
3274*b1cdbd2cSJim Jagielski // <STRG><F4> or <STRG><W> -> close top frame
3275*b1cdbd2cSJim Jagielski CloseWindow();
3276*b1cdbd2cSJim Jagielski bHandled = sal_True;
3277*b1cdbd2cSJim Jagielski }
3278*b1cdbd2cSJim Jagielski }
3279*b1cdbd2cSJim Jagielski return bHandled ? 1 : Window::PreNotify( rNEvt );
3280*b1cdbd2cSJim Jagielski }
3281*b1cdbd2cSJim Jagielski
3282*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3283*b1cdbd2cSJim Jagielski
setContainerWindow(Reference<::com::sun::star::awt::XWindow> xWin)3284*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::setContainerWindow( Reference < ::com::sun::star::awt::XWindow > xWin )
3285*b1cdbd2cSJim Jagielski {
3286*b1cdbd2cSJim Jagielski xWindow = xWin;
3287*b1cdbd2cSJim Jagielski MakeLayout();
3288*b1cdbd2cSJim Jagielski }
3289*b1cdbd2cSJim Jagielski
3290*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3291*b1cdbd2cSJim Jagielski
SetFactory(const String & rFactory)3292*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::SetFactory( const String& rFactory )
3293*b1cdbd2cSJim Jagielski {
3294*b1cdbd2cSJim Jagielski pIndexWin->SetFactory( rFactory, sal_True );
3295*b1cdbd2cSJim Jagielski }
3296*b1cdbd2cSJim Jagielski
3297*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3298*b1cdbd2cSJim Jagielski
SetHelpURL(const String & rURL)3299*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::SetHelpURL( const String& rURL )
3300*b1cdbd2cSJim Jagielski {
3301*b1cdbd2cSJim Jagielski INetURLObject aObj( rURL );
3302*b1cdbd2cSJim Jagielski if ( aObj.GetProtocol() == INET_PROT_VND_SUN_STAR_HELP )
3303*b1cdbd2cSJim Jagielski SetFactory( aObj.GetHost() );
3304*b1cdbd2cSJim Jagielski }
3305*b1cdbd2cSJim Jagielski
3306*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3307*b1cdbd2cSJim Jagielski
DoAction(sal_uInt16 nActionId)3308*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::DoAction( sal_uInt16 nActionId )
3309*b1cdbd2cSJim Jagielski {
3310*b1cdbd2cSJim Jagielski switch ( nActionId )
3311*b1cdbd2cSJim Jagielski {
3312*b1cdbd2cSJim Jagielski case TBI_INDEX :
3313*b1cdbd2cSJim Jagielski {
3314*b1cdbd2cSJim Jagielski bIndex = !bIndex;
3315*b1cdbd2cSJim Jagielski MakeLayout();
3316*b1cdbd2cSJim Jagielski pTextWin->ToggleIndex( bIndex );
3317*b1cdbd2cSJim Jagielski break;
3318*b1cdbd2cSJim Jagielski }
3319*b1cdbd2cSJim Jagielski
3320*b1cdbd2cSJim Jagielski case TBI_START :
3321*b1cdbd2cSJim Jagielski {
3322*b1cdbd2cSJim Jagielski ShowStartPage();
3323*b1cdbd2cSJim Jagielski break;
3324*b1cdbd2cSJim Jagielski }
3325*b1cdbd2cSJim Jagielski
3326*b1cdbd2cSJim Jagielski case TBI_BACKWARD :
3327*b1cdbd2cSJim Jagielski case TBI_FORWARD :
3328*b1cdbd2cSJim Jagielski {
3329*b1cdbd2cSJim Jagielski URL aURL;
3330*b1cdbd2cSJim Jagielski aURL.Complete = DEFINE_CONST_UNICODE(".uno:Backward");
3331*b1cdbd2cSJim Jagielski if ( TBI_FORWARD == nActionId )
3332*b1cdbd2cSJim Jagielski aURL.Complete = DEFINE_CONST_UNICODE(".uno:Forward");
3333*b1cdbd2cSJim Jagielski PARSE_URL( aURL );
3334*b1cdbd2cSJim Jagielski pHelpInterceptor->dispatch( aURL, Sequence < PropertyValue >() );
3335*b1cdbd2cSJim Jagielski break;
3336*b1cdbd2cSJim Jagielski }
3337*b1cdbd2cSJim Jagielski
3338*b1cdbd2cSJim Jagielski case TBI_SEARCHDIALOG :
3339*b1cdbd2cSJim Jagielski {
3340*b1cdbd2cSJim Jagielski pTextWin->DoSearch();
3341*b1cdbd2cSJim Jagielski break;
3342*b1cdbd2cSJim Jagielski }
3343*b1cdbd2cSJim Jagielski
3344*b1cdbd2cSJim Jagielski case TBI_PRINT :
3345*b1cdbd2cSJim Jagielski case TBI_SOURCEVIEW :
3346*b1cdbd2cSJim Jagielski case TBI_COPY :
3347*b1cdbd2cSJim Jagielski case TBI_SELECTIONMODE:
3348*b1cdbd2cSJim Jagielski {
3349*b1cdbd2cSJim Jagielski Reference < XDispatchProvider > xProv( pTextWin->getFrame(), UNO_QUERY );
3350*b1cdbd2cSJim Jagielski if ( xProv.is() )
3351*b1cdbd2cSJim Jagielski {
3352*b1cdbd2cSJim Jagielski URL aURL;
3353*b1cdbd2cSJim Jagielski if ( TBI_PRINT == nActionId )
3354*b1cdbd2cSJim Jagielski aURL.Complete = DEFINE_CONST_UNICODE(".uno:Print");
3355*b1cdbd2cSJim Jagielski else if ( TBI_SOURCEVIEW == nActionId )
3356*b1cdbd2cSJim Jagielski aURL.Complete = DEFINE_CONST_UNICODE(".uno:SourceView");
3357*b1cdbd2cSJim Jagielski else if ( TBI_COPY == nActionId )
3358*b1cdbd2cSJim Jagielski aURL.Complete = DEFINE_CONST_UNICODE(".uno:Copy");
3359*b1cdbd2cSJim Jagielski else if ( TBI_SELECTIONMODE == nActionId )
3360*b1cdbd2cSJim Jagielski aURL.Complete = DEFINE_CONST_UNICODE(".uno:SelectTextMode");
3361*b1cdbd2cSJim Jagielski else
3362*b1cdbd2cSJim Jagielski aURL.Complete = DEFINE_CONST_UNICODE(".uno:SearchDialog");
3363*b1cdbd2cSJim Jagielski PARSE_URL( aURL );
3364*b1cdbd2cSJim Jagielski Reference < XDispatch > xDisp = xProv->queryDispatch( aURL, String(), 0 );
3365*b1cdbd2cSJim Jagielski if ( xDisp.is() )
3366*b1cdbd2cSJim Jagielski xDisp->dispatch( aURL, Sequence < PropertyValue >() );
3367*b1cdbd2cSJim Jagielski }
3368*b1cdbd2cSJim Jagielski break;
3369*b1cdbd2cSJim Jagielski }
3370*b1cdbd2cSJim Jagielski
3371*b1cdbd2cSJim Jagielski case TBI_BOOKMARKS :
3372*b1cdbd2cSJim Jagielski {
3373*b1cdbd2cSJim Jagielski String aURL = pHelpInterceptor->GetCurrentURL();
3374*b1cdbd2cSJim Jagielski if ( aURL.Len() > 0 )
3375*b1cdbd2cSJim Jagielski {
3376*b1cdbd2cSJim Jagielski try
3377*b1cdbd2cSJim Jagielski {
3378*b1cdbd2cSJim Jagielski Content aCnt( aURL, Reference< ::com::sun::star::ucb::XCommandEnvironment > () );
3379*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > xInfo = aCnt.getProperties();
3380*b1cdbd2cSJim Jagielski if ( xInfo->hasPropertyByName( PROPERTY_TITLE ) )
3381*b1cdbd2cSJim Jagielski {
3382*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any aAny = aCnt.getPropertyValue( PROPERTY_TITLE );
3383*b1cdbd2cSJim Jagielski rtl::OUString aValue;
3384*b1cdbd2cSJim Jagielski if ( aAny >>= aValue )
3385*b1cdbd2cSJim Jagielski {
3386*b1cdbd2cSJim Jagielski String aTitle( aValue );
3387*b1cdbd2cSJim Jagielski SfxAddHelpBookmarkDialog_Impl aDlg( this, sal_False );
3388*b1cdbd2cSJim Jagielski aDlg.SetTitle( aTitle );
3389*b1cdbd2cSJim Jagielski if ( aDlg.Execute() == RET_OK )
3390*b1cdbd2cSJim Jagielski {
3391*b1cdbd2cSJim Jagielski aTitle = aDlg.GetTitle();
3392*b1cdbd2cSJim Jagielski pIndexWin->AddBookmarks( aTitle, aURL );
3393*b1cdbd2cSJim Jagielski }
3394*b1cdbd2cSJim Jagielski }
3395*b1cdbd2cSJim Jagielski }
3396*b1cdbd2cSJim Jagielski }
3397*b1cdbd2cSJim Jagielski catch( Exception& )
3398*b1cdbd2cSJim Jagielski {
3399*b1cdbd2cSJim Jagielski DBG_ERROR( "SfxHelpWindow_Impl::DoAction(): unexpected exception" );
3400*b1cdbd2cSJim Jagielski }
3401*b1cdbd2cSJim Jagielski }
3402*b1cdbd2cSJim Jagielski break;
3403*b1cdbd2cSJim Jagielski }
3404*b1cdbd2cSJim Jagielski }
3405*b1cdbd2cSJim Jagielski }
3406*b1cdbd2cSJim Jagielski
3407*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3408*b1cdbd2cSJim Jagielski
CloseWindow()3409*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::CloseWindow()
3410*b1cdbd2cSJim Jagielski {
3411*b1cdbd2cSJim Jagielski try
3412*b1cdbd2cSJim Jagielski {
3413*b1cdbd2cSJim Jagielski // search for top frame
3414*b1cdbd2cSJim Jagielski Reference< XFramesSupplier > xCreator = getTextFrame()->getCreator();
3415*b1cdbd2cSJim Jagielski while ( xCreator.is() && !xCreator->isTop() )
3416*b1cdbd2cSJim Jagielski {
3417*b1cdbd2cSJim Jagielski xCreator = xCreator->getCreator();
3418*b1cdbd2cSJim Jagielski }
3419*b1cdbd2cSJim Jagielski
3420*b1cdbd2cSJim Jagielski // when found, close it
3421*b1cdbd2cSJim Jagielski if ( xCreator.is() && xCreator->isTop() )
3422*b1cdbd2cSJim Jagielski {
3423*b1cdbd2cSJim Jagielski Reference < XCloseable > xCloser( xCreator, UNO_QUERY );
3424*b1cdbd2cSJim Jagielski if ( xCloser.is() )
3425*b1cdbd2cSJim Jagielski xCloser->close( sal_False );
3426*b1cdbd2cSJim Jagielski }
3427*b1cdbd2cSJim Jagielski }
3428*b1cdbd2cSJim Jagielski catch( Exception& )
3429*b1cdbd2cSJim Jagielski {
3430*b1cdbd2cSJim Jagielski DBG_ERRORFILE( "SfxHelpWindow_Impl::CloseWindow(): caught an exception" );
3431*b1cdbd2cSJim Jagielski }
3432*b1cdbd2cSJim Jagielski }
3433*b1cdbd2cSJim Jagielski
3434*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3435*b1cdbd2cSJim Jagielski
UpdateToolbox()3436*b1cdbd2cSJim Jagielski void SfxHelpWindow_Impl::UpdateToolbox()
3437*b1cdbd2cSJim Jagielski {
3438*b1cdbd2cSJim Jagielski pTextWin->GetToolBox().EnableItem( TBI_BACKWARD, pHelpInterceptor->HasHistoryPred() );
3439*b1cdbd2cSJim Jagielski pTextWin->GetToolBox().EnableItem( TBI_FORWARD, pHelpInterceptor->HasHistorySucc() );
3440*b1cdbd2cSJim Jagielski }
3441*b1cdbd2cSJim Jagielski
3442*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3443*b1cdbd2cSJim Jagielski
HasHistoryPredecessor() const3444*b1cdbd2cSJim Jagielski sal_Bool SfxHelpWindow_Impl::HasHistoryPredecessor() const
3445*b1cdbd2cSJim Jagielski {
3446*b1cdbd2cSJim Jagielski return pHelpInterceptor->HasHistoryPred();
3447*b1cdbd2cSJim Jagielski }
3448*b1cdbd2cSJim Jagielski
3449*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3450*b1cdbd2cSJim Jagielski
HasHistorySuccessor() const3451*b1cdbd2cSJim Jagielski sal_Bool SfxHelpWindow_Impl::HasHistorySuccessor() const
3452*b1cdbd2cSJim Jagielski {
3453*b1cdbd2cSJim Jagielski return pHelpInterceptor->HasHistorySucc();
3454*b1cdbd2cSJim Jagielski }
3455*b1cdbd2cSJim Jagielski
3456*b1cdbd2cSJim Jagielski // class SfxAddHelpBookmarkDialog_Impl -----------------------------------
3457*b1cdbd2cSJim Jagielski
SfxAddHelpBookmarkDialog_Impl(Window * pParent,sal_Bool bRename)3458*b1cdbd2cSJim Jagielski SfxAddHelpBookmarkDialog_Impl::SfxAddHelpBookmarkDialog_Impl( Window* pParent, sal_Bool bRename ) :
3459*b1cdbd2cSJim Jagielski
3460*b1cdbd2cSJim Jagielski ModalDialog( pParent, SfxResId( DLG_HELP_ADDBOOKMARK ) ),
3461*b1cdbd2cSJim Jagielski
3462*b1cdbd2cSJim Jagielski aTitleFT ( this, SfxResId( FT_BOOKMARK_TITLE ) ),
3463*b1cdbd2cSJim Jagielski aTitleED ( this, SfxResId( ED_BOOKMARK_TITLE ) ),
3464*b1cdbd2cSJim Jagielski aOKBtn ( this, SfxResId( PB_BOOKMARK_OK ) ),
3465*b1cdbd2cSJim Jagielski aEscBtn ( this, SfxResId( PB_BOOKMARK_CANCEL ) ),
3466*b1cdbd2cSJim Jagielski aHelpBtn ( this, SfxResId( PB_BOOKMARK_HELP ) )
3467*b1cdbd2cSJim Jagielski
3468*b1cdbd2cSJim Jagielski {
3469*b1cdbd2cSJim Jagielski if ( bRename )
3470*b1cdbd2cSJim Jagielski SetText( String( SfxResId( STR_BOOKMARK_RENAME ) ) );
3471*b1cdbd2cSJim Jagielski
3472*b1cdbd2cSJim Jagielski FreeResource();
3473*b1cdbd2cSJim Jagielski }
3474*b1cdbd2cSJim Jagielski
3475*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3476*b1cdbd2cSJim Jagielski
~SfxAddHelpBookmarkDialog_Impl()3477*b1cdbd2cSJim Jagielski SfxAddHelpBookmarkDialog_Impl::~SfxAddHelpBookmarkDialog_Impl()
3478*b1cdbd2cSJim Jagielski {
3479*b1cdbd2cSJim Jagielski }
3480*b1cdbd2cSJim Jagielski
3481*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
3482*b1cdbd2cSJim Jagielski
SetTitle(const String & rTitle)3483*b1cdbd2cSJim Jagielski void SfxAddHelpBookmarkDialog_Impl::SetTitle( const String& rTitle )
3484*b1cdbd2cSJim Jagielski {
3485*b1cdbd2cSJim Jagielski aTitleED.SetText( rTitle );
3486*b1cdbd2cSJim Jagielski aTitleED.SetSelection( Selection( 0, rTitle.Len() ) );
3487*b1cdbd2cSJim Jagielski }
3488*b1cdbd2cSJim Jagielski
3489