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