xref: /AOO41X/main/svtools/source/contnr/templwin.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_svtools.hxx"
30*cdf0e10cSrcweir #include "templwin.hxx"
31*cdf0e10cSrcweir #include <svtools/templdlg.hxx>
32*cdf0e10cSrcweir #include <svtools/svtdata.hxx>
33*cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
34*cdf0e10cSrcweir #include <unotools/dynamicmenuoptions.hxx>
35*cdf0e10cSrcweir #include <unotools/extendedsecurityoptions.hxx>
36*cdf0e10cSrcweir #include <svtools/xtextedt.hxx>
37*cdf0e10cSrcweir #include <svl/inettype.hxx>
38*cdf0e10cSrcweir #include <svtools/imagemgr.hxx>
39*cdf0e10cSrcweir #include <svtools/miscopt.hxx>
40*cdf0e10cSrcweir #include <svtools/templatefoldercache.hxx>
41*cdf0e10cSrcweir #include <svtools/imgdef.hxx>
42*cdf0e10cSrcweir #include <svtools/txtattr.hxx>
43*cdf0e10cSrcweir #include <svtools/svtools.hrc>
44*cdf0e10cSrcweir #include "templwin.hrc"
45*cdf0e10cSrcweir #include <svtools/helpid.hrc>
46*cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
47*cdf0e10cSrcweir #include <unotools/viewoptions.hxx>
48*cdf0e10cSrcweir #include <unotools/ucbhelper.hxx>
49*cdf0e10cSrcweir #include "unotools/configmgr.hxx"
50*cdf0e10cSrcweir #include <com/sun/star/awt/XWindow.hpp>
51*cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
52*cdf0e10cSrcweir #include <com/sun/star/frame/XFrame.hpp>
53*cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx>
54*cdf0e10cSrcweir #include <com/sun/star/util/URL.hpp>
55*cdf0e10cSrcweir #include <com/sun/star/util/XURLTransformer.hpp>
56*cdf0e10cSrcweir #include <com/sun/star/util/XOfficeInstallationDirectories.hpp>
57*cdf0e10cSrcweir #include <com/sun/star/frame/XDispatchProvider.hpp>
58*cdf0e10cSrcweir #include <com/sun/star/frame/XDocumentTemplates.hpp>
59*cdf0e10cSrcweir #include <com/sun/star/frame/XComponentLoader.hpp>
60*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
61*cdf0e10cSrcweir #include <com/sun/star/ucb/XContent.hpp>
62*cdf0e10cSrcweir #include <com/sun/star/ucb/XCommandEnvironment.hpp>
63*cdf0e10cSrcweir #include <com/sun/star/view/XPrintable.hpp>
64*cdf0e10cSrcweir #include <com/sun/star/awt/XWindow.hpp>
65*cdf0e10cSrcweir #include <com/sun/star/document/XDocumentProperties.hpp>
66*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
67*cdf0e10cSrcweir #include <com/sun/star/beans/XMultiPropertySet.hpp>
68*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp>
69*cdf0e10cSrcweir #include <com/sun/star/io/IOException.hpp>
70*cdf0e10cSrcweir #include <com/sun/star/util/DateTime.hpp>
71*cdf0e10cSrcweir #include <com/sun/star/script/XTypeConverter.hpp>
72*cdf0e10cSrcweir #include <com/sun/star/system/XSystemShellExecute.hpp>
73*cdf0e10cSrcweir #include <com/sun/star/system/SystemShellExecuteFlags.hpp>
74*cdf0e10cSrcweir #include <unotools/localedatawrapper.hxx>
75*cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp>
76*cdf0e10cSrcweir #include <vcl/waitobj.hxx>
77*cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
78*cdf0e10cSrcweir #include <tools/urlobj.hxx>
79*cdf0e10cSrcweir #include <tools/datetime.hxx>
80*cdf0e10cSrcweir #include <vcl/svapp.hxx>
81*cdf0e10cSrcweir #include <vcl/split.hxx>
82*cdf0e10cSrcweir #include <vcl/msgbox.hxx>
83*cdf0e10cSrcweir #include <svtools/DocumentInfoPreview.hxx>
84*cdf0e10cSrcweir #include <vcl/mnemonic.hxx>
85*cdf0e10cSrcweir 
86*cdf0e10cSrcweir #include <ucbhelper/content.hxx>
87*cdf0e10cSrcweir #include <comphelper/string.hxx>
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir 
90*cdf0e10cSrcweir using namespace ::com::sun::star;
91*cdf0e10cSrcweir using namespace ::com::sun::star::beans;
92*cdf0e10cSrcweir using namespace ::com::sun::star::container;
93*cdf0e10cSrcweir using namespace ::com::sun::star::frame;
94*cdf0e10cSrcweir using namespace ::com::sun::star::document;
95*cdf0e10cSrcweir using namespace ::com::sun::star::lang;
96*cdf0e10cSrcweir using namespace ::com::sun::star::ucb;
97*cdf0e10cSrcweir using namespace ::com::sun::star::uno;
98*cdf0e10cSrcweir using namespace ::com::sun::star::view;
99*cdf0e10cSrcweir using namespace svtools;
100*cdf0e10cSrcweir 
101*cdf0e10cSrcweir extern ::rtl::OUString CreateExactSizeText_Impl( sal_Int64 nSize ); // fileview.cxx
102*cdf0e10cSrcweir 
103*cdf0e10cSrcweir #define SPLITSET_ID			0
104*cdf0e10cSrcweir #define COLSET_ID			1
105*cdf0e10cSrcweir #define ICONWIN_ID			2
106*cdf0e10cSrcweir #define FILEWIN_ID			3
107*cdf0e10cSrcweir #define FRAMEWIN_ID			4
108*cdf0e10cSrcweir 
109*cdf0e10cSrcweir #define ICON_POS_NEWDOC		0
110*cdf0e10cSrcweir #define ICON_POS_TEMPLATES	1
111*cdf0e10cSrcweir #define ICON_POS_MYDOCS		2
112*cdf0e10cSrcweir #define ICON_POS_SAMPLES	3
113*cdf0e10cSrcweir 
114*cdf0e10cSrcweir #define ASCII_STR(s)					::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(s) )
115*cdf0e10cSrcweir #define VIEWSETTING_NEWFROMTEMPLATE		ASCII_STR("NewFromTemplate")
116*cdf0e10cSrcweir #define VIEWSETTING_SELECTEDGROUP		ASCII_STR("SelectedGroup")
117*cdf0e10cSrcweir #define VIEWSETTING_SELECTEDVIEW		ASCII_STR("SelectedView")
118*cdf0e10cSrcweir #define VIEWSETTING_SPLITRATIO			ASCII_STR("SplitRatio")
119*cdf0e10cSrcweir #define VIEWSETTING_LASTFOLDER			ASCII_STR("LastFolder")
120*cdf0e10cSrcweir 
121*cdf0e10cSrcweir struct FolderHistory
122*cdf0e10cSrcweir {
123*cdf0e10cSrcweir 	String		m_sURL;
124*cdf0e10cSrcweir 	sal_uLong		m_nGroup;
125*cdf0e10cSrcweir 
126*cdf0e10cSrcweir 	FolderHistory( const String& _rURL, sal_Int32 _nGroup ) :
127*cdf0e10cSrcweir 		m_sURL( _rURL ), m_nGroup( _nGroup ) {}
128*cdf0e10cSrcweir };
129*cdf0e10cSrcweir 
130*cdf0e10cSrcweir DECLARE_LIST( HistoryList_Impl, FolderHistory* )
131*cdf0e10cSrcweir DECLARE_LIST( NewDocList_Impl, ::rtl::OUString* )
132*cdf0e10cSrcweir 
133*cdf0e10cSrcweir ODocumentInfoPreview::ODocumentInfoPreview( Window* pParent ,WinBits _nBits) : Window(pParent,WB_DIALOGCONTROL)
134*cdf0e10cSrcweir {
135*cdf0e10cSrcweir 	m_pEditWin = new SvtExtendedMultiLineEdit_Impl(this,_nBits);
136*cdf0e10cSrcweir 	m_pEditWin->Show();
137*cdf0e10cSrcweir 	m_pEditWin->EnableCursor( sal_False );
138*cdf0e10cSrcweir 	m_pInfoTable = new SvtDocInfoTable_Impl();
139*cdf0e10cSrcweir 	// detect application language
140*cdf0e10cSrcweir 	m_aLocale = SvtPathOptions().GetLocale();
141*cdf0e10cSrcweir }
142*cdf0e10cSrcweir // -----------------------------------------------------------------------------
143*cdf0e10cSrcweir ODocumentInfoPreview::~ODocumentInfoPreview()
144*cdf0e10cSrcweir {
145*cdf0e10cSrcweir 	delete m_pEditWin;
146*cdf0e10cSrcweir 	delete m_pInfoTable;
147*cdf0e10cSrcweir }
148*cdf0e10cSrcweir // -----------------------------------------------------------------------------
149*cdf0e10cSrcweir void ODocumentInfoPreview::Resize()
150*cdf0e10cSrcweir {
151*cdf0e10cSrcweir 	Size aOutputSize( GetOutputSize() );
152*cdf0e10cSrcweir 	m_pEditWin->SetPosSizePixel( Point(0,0),aOutputSize);
153*cdf0e10cSrcweir }
154*cdf0e10cSrcweir // -----------------------------------------------------------------------------
155*cdf0e10cSrcweir void ODocumentInfoPreview::Clear()
156*cdf0e10cSrcweir {
157*cdf0e10cSrcweir 	m_pEditWin->Clear();
158*cdf0e10cSrcweir }
159*cdf0e10cSrcweir // -----------------------------------------------------------------------------
160*cdf0e10cSrcweir 
161*cdf0e10cSrcweir void lcl_insertDateTimeEntry(SvtExtendedMultiLineEdit_Impl* i_pEditWin,
162*cdf0e10cSrcweir     const ::rtl::OUString & i_rName, const util::DateTime & i_rUDT)
163*cdf0e10cSrcweir {
164*cdf0e10cSrcweir     DateTime aToolsDT =
165*cdf0e10cSrcweir         DateTime( Date( i_rUDT.Day, i_rUDT.Month, i_rUDT.Year ),
166*cdf0e10cSrcweir                 Time( i_rUDT.Hours, i_rUDT.Minutes,
167*cdf0e10cSrcweir                       i_rUDT.Seconds, i_rUDT.HundredthSeconds ) );
168*cdf0e10cSrcweir     if ( aToolsDT.IsValid() )
169*cdf0e10cSrcweir     {
170*cdf0e10cSrcweir         LocaleDataWrapper aLocaleWrapper(
171*cdf0e10cSrcweir             ::comphelper::getProcessServiceFactory(),
172*cdf0e10cSrcweir             Application::GetSettings().GetLocale() );
173*cdf0e10cSrcweir         String aDateStr = aLocaleWrapper.getDate( aToolsDT );
174*cdf0e10cSrcweir         aDateStr += String( RTL_CONSTASCII_STRINGPARAM(", ") );
175*cdf0e10cSrcweir         aDateStr += aLocaleWrapper.getTime( aToolsDT );
176*cdf0e10cSrcweir         i_pEditWin->InsertEntry( i_rName, aDateStr );
177*cdf0e10cSrcweir     }
178*cdf0e10cSrcweir }
179*cdf0e10cSrcweir 
180*cdf0e10cSrcweir void ODocumentInfoPreview::fill(
181*cdf0e10cSrcweir     const Reference< XDocumentProperties >& i_xDocProps, const String& i_rURL)
182*cdf0e10cSrcweir {
183*cdf0e10cSrcweir     if (!i_xDocProps.is()) throw RuntimeException();
184*cdf0e10cSrcweir 
185*cdf0e10cSrcweir     ::rtl::OUString aStr;
186*cdf0e10cSrcweir     m_pEditWin->SetAutoScroll( sal_False );
187*cdf0e10cSrcweir 
188*cdf0e10cSrcweir     aStr = i_xDocProps->getTitle();
189*cdf0e10cSrcweir     if (aStr.getLength()) {
190*cdf0e10cSrcweir         m_pEditWin->InsertEntry( m_pInfoTable->GetString( DI_TITLE ), aStr );
191*cdf0e10cSrcweir     }
192*cdf0e10cSrcweir 
193*cdf0e10cSrcweir     aStr = i_xDocProps->getAuthor();
194*cdf0e10cSrcweir     if (aStr.getLength()) {
195*cdf0e10cSrcweir         m_pEditWin->InsertEntry( m_pInfoTable->GetString( DI_FROM ), aStr );
196*cdf0e10cSrcweir     }
197*cdf0e10cSrcweir 
198*cdf0e10cSrcweir     lcl_insertDateTimeEntry(m_pEditWin,
199*cdf0e10cSrcweir             m_pInfoTable->GetString( DI_DATE ),
200*cdf0e10cSrcweir             i_xDocProps->getCreationDate());
201*cdf0e10cSrcweir 
202*cdf0e10cSrcweir     aStr = i_xDocProps->getModifiedBy();
203*cdf0e10cSrcweir     if (aStr.getLength()) {
204*cdf0e10cSrcweir         m_pEditWin->InsertEntry( m_pInfoTable->GetString(DI_MODIFIEDBY), aStr );
205*cdf0e10cSrcweir     }
206*cdf0e10cSrcweir 
207*cdf0e10cSrcweir     lcl_insertDateTimeEntry(m_pEditWin,
208*cdf0e10cSrcweir             m_pInfoTable->GetString( DI_MODIFIEDDATE ),
209*cdf0e10cSrcweir             i_xDocProps->getModificationDate());
210*cdf0e10cSrcweir 
211*cdf0e10cSrcweir     aStr = i_xDocProps->getPrintedBy();
212*cdf0e10cSrcweir     if (aStr.getLength()) {
213*cdf0e10cSrcweir         m_pEditWin->InsertEntry( m_pInfoTable->GetString( DI_PRINTBY ), aStr );
214*cdf0e10cSrcweir     }
215*cdf0e10cSrcweir 
216*cdf0e10cSrcweir     lcl_insertDateTimeEntry(m_pEditWin,
217*cdf0e10cSrcweir             m_pInfoTable->GetString( DI_PRINTDATE ),
218*cdf0e10cSrcweir             i_xDocProps->getPrintDate());
219*cdf0e10cSrcweir 
220*cdf0e10cSrcweir     aStr = i_xDocProps->getSubject();
221*cdf0e10cSrcweir     if (aStr.getLength()) {
222*cdf0e10cSrcweir         m_pEditWin->InsertEntry( m_pInfoTable->GetString( DI_THEME ), aStr );
223*cdf0e10cSrcweir     }
224*cdf0e10cSrcweir 
225*cdf0e10cSrcweir     aStr =
226*cdf0e10cSrcweir         ::comphelper::string::convertCommaSeparated(i_xDocProps->getKeywords());
227*cdf0e10cSrcweir     if (aStr.getLength()) {
228*cdf0e10cSrcweir         m_pEditWin->InsertEntry( m_pInfoTable->GetString( DI_KEYWORDS ), aStr );
229*cdf0e10cSrcweir     }
230*cdf0e10cSrcweir 
231*cdf0e10cSrcweir     aStr = i_xDocProps->getDescription();
232*cdf0e10cSrcweir     if (aStr.getLength()) {
233*cdf0e10cSrcweir         m_pEditWin->InsertEntry( m_pInfoTable->GetString( DI_DESCRIPTION ),
234*cdf0e10cSrcweir             aStr );
235*cdf0e10cSrcweir     }
236*cdf0e10cSrcweir 
237*cdf0e10cSrcweir     // size
238*cdf0e10cSrcweir     if ( i_rURL.Len() > 0 )
239*cdf0e10cSrcweir     {
240*cdf0e10cSrcweir         sal_uLong nDocSize = ::utl::UCBContentHelper::GetSize( i_rURL );
241*cdf0e10cSrcweir         m_pEditWin->InsertEntry(
242*cdf0e10cSrcweir             m_pInfoTable->GetString( DI_SIZE ),
243*cdf0e10cSrcweir             CreateExactSizeText_Impl( nDocSize ) );
244*cdf0e10cSrcweir     }
245*cdf0e10cSrcweir 
246*cdf0e10cSrcweir     // MIMEType
247*cdf0e10cSrcweir     if ( i_rURL.Len() > 0 )
248*cdf0e10cSrcweir     {
249*cdf0e10cSrcweir         INetContentType eTypeID =
250*cdf0e10cSrcweir             INetContentTypes::GetContentTypeFromURL( i_rURL );
251*cdf0e10cSrcweir         if ( eTypeID != CONTENT_TYPE_APP_OCTSTREAM ) {
252*cdf0e10cSrcweir             aStr = INetContentTypes::GetPresentation( eTypeID, m_aLocale );
253*cdf0e10cSrcweir         } else {
254*cdf0e10cSrcweir             aStr = SvFileInformationManager::GetDescription(
255*cdf0e10cSrcweir                         INetURLObject(i_rURL) );
256*cdf0e10cSrcweir         }
257*cdf0e10cSrcweir         if (aStr.getLength()) {
258*cdf0e10cSrcweir             m_pEditWin->InsertEntry( m_pInfoTable->GetString( DI_MIMETYPE ),
259*cdf0e10cSrcweir                 aStr );
260*cdf0e10cSrcweir         }
261*cdf0e10cSrcweir 	}
262*cdf0e10cSrcweir 
263*cdf0e10cSrcweir     // user-defined (custom) properties
264*cdf0e10cSrcweir     Reference< XPropertySet > xUserDefined(
265*cdf0e10cSrcweir         i_xDocProps->getUserDefinedProperties(), UNO_QUERY_THROW );
266*cdf0e10cSrcweir     Reference< XPropertySetInfo > xUDInfo = xUserDefined->getPropertySetInfo();
267*cdf0e10cSrcweir     Sequence< Property > props = xUDInfo->getProperties();
268*cdf0e10cSrcweir     for (sal_Int32 i = 0; i < props.getLength(); ++i) {
269*cdf0e10cSrcweir         const ::rtl::OUString name = props[i].Name;
270*cdf0e10cSrcweir         uno::Any aAny;
271*cdf0e10cSrcweir         try {
272*cdf0e10cSrcweir             aAny = xUserDefined->getPropertyValue(name);
273*cdf0e10cSrcweir             uno::Reference < script::XTypeConverter > xConverter(
274*cdf0e10cSrcweir                 comphelper::getProcessServiceFactory()->createInstance(
275*cdf0e10cSrcweir                     ASCII_STR("com.sun.star.script.Converter")),
276*cdf0e10cSrcweir                 UNO_QUERY );
277*cdf0e10cSrcweir             uno::Any aNew;
278*cdf0e10cSrcweir             aNew = xConverter->convertToSimpleType( aAny, TypeClass_STRING );
279*cdf0e10cSrcweir             if ((aNew >>= aStr) && aStr.getLength()) {
280*cdf0e10cSrcweir                 m_pEditWin->InsertEntry( name, aStr);
281*cdf0e10cSrcweir             }
282*cdf0e10cSrcweir         } catch (uno::Exception &) {
283*cdf0e10cSrcweir             // ignore
284*cdf0e10cSrcweir         }
285*cdf0e10cSrcweir     }
286*cdf0e10cSrcweir 
287*cdf0e10cSrcweir     m_pEditWin->SetSelection( Selection( 0, 0 ) );
288*cdf0e10cSrcweir     m_pEditWin->SetAutoScroll( sal_True );
289*cdf0e10cSrcweir }
290*cdf0e10cSrcweir 
291*cdf0e10cSrcweir // -----------------------------------------------------------------------------
292*cdf0e10cSrcweir void ODocumentInfoPreview::InsertEntry( const String& rTitle, const String& rValue )
293*cdf0e10cSrcweir {
294*cdf0e10cSrcweir 	m_pEditWin->InsertEntry( rTitle, rValue);
295*cdf0e10cSrcweir }
296*cdf0e10cSrcweir // -----------------------------------------------------------------------------
297*cdf0e10cSrcweir 
298*cdf0e10cSrcweir // class SvtDummyHeaderBar_Impl ------------------------------------------
299*cdf0e10cSrcweir 
300*cdf0e10cSrcweir void SvtDummyHeaderBar_Impl::UpdateBackgroundColor()
301*cdf0e10cSrcweir {
302*cdf0e10cSrcweir 	SetBackground( Wallpaper( GetSettings().GetStyleSettings().GetWindowColor() ) );
303*cdf0e10cSrcweir }
304*cdf0e10cSrcweir 
305*cdf0e10cSrcweir SvtDummyHeaderBar_Impl::SvtDummyHeaderBar_Impl( Window* pPar ) : Window( pPar )
306*cdf0e10cSrcweir {
307*cdf0e10cSrcweir 	SetSizePixel( HeaderBar( this, 0 ).CalcWindowSizePixel() );	// HeaderBar used only to calculate size
308*cdf0e10cSrcweir 
309*cdf0e10cSrcweir 	UpdateBackgroundColor();
310*cdf0e10cSrcweir }
311*cdf0e10cSrcweir 
312*cdf0e10cSrcweir SvtDummyHeaderBar_Impl::~SvtDummyHeaderBar_Impl()
313*cdf0e10cSrcweir {
314*cdf0e10cSrcweir }
315*cdf0e10cSrcweir 
316*cdf0e10cSrcweir void SvtDummyHeaderBar_Impl::DataChanged( const DataChangedEvent& r )
317*cdf0e10cSrcweir {
318*cdf0e10cSrcweir 	Window::DataChanged( r );
319*cdf0e10cSrcweir 	if( r.GetType() == DATACHANGED_SETTINGS )
320*cdf0e10cSrcweir 		UpdateBackgroundColor();
321*cdf0e10cSrcweir }
322*cdf0e10cSrcweir 
323*cdf0e10cSrcweir // class SvtIconWindow_Impl ----------------------------------------------
324*cdf0e10cSrcweir 
325*cdf0e10cSrcweir SvtIconWindow_Impl::SvtIconWindow_Impl( Window* pParent ) :
326*cdf0e10cSrcweir 
327*cdf0e10cSrcweir 	Window( pParent, WB_DIALOGCONTROL | WB_BORDER | WB_3DLOOK ),
328*cdf0e10cSrcweir 
329*cdf0e10cSrcweir 	aDummyHeaderBar( this ),
330*cdf0e10cSrcweir 	aIconCtrl( this, WB_ICON | WB_NOCOLUMNHEADER | WB_HIGHLIGHTFRAME | /*!WB_NOSELECTION |*/
331*cdf0e10cSrcweir 					 WB_NODRAGSELECTION | WB_TABSTOP | WB_CLIPCHILDREN ),
332*cdf0e10cSrcweir 	aNewDocumentRootURL( ASCII_STR("private:newdoc") ),
333*cdf0e10cSrcweir 	aMyDocumentsRootURL( SvtPathOptions().GetWorkPath() ),
334*cdf0e10cSrcweir 	aSamplesFolderRootURL( SvtPathOptions().
335*cdf0e10cSrcweir 		SubstituteVariable( String( ASCII_STR("$(insturl)/share/samples/$(vlang)") ) ) ),
336*cdf0e10cSrcweir 	nMaxTextLength( 0 )
337*cdf0e10cSrcweir 
338*cdf0e10cSrcweir {
339*cdf0e10cSrcweir 	aDummyHeaderBar.Show();
340*cdf0e10cSrcweir 
341*cdf0e10cSrcweir     aIconCtrl.SetAccessibleName( String( RTL_CONSTASCII_USTRINGPARAM("Groups") ) );
342*cdf0e10cSrcweir   	aIconCtrl.SetHelpId( HID_TEMPLATEDLG_ICONCTRL );
343*cdf0e10cSrcweir 	aIconCtrl.SetChoiceWithCursor( sal_True );
344*cdf0e10cSrcweir 	aIconCtrl.SetSelectionMode( SINGLE_SELECTION );
345*cdf0e10cSrcweir 	aIconCtrl.Show();
346*cdf0e10cSrcweir 
347*cdf0e10cSrcweir 	// detect the root URL of templates
348*cdf0e10cSrcweir 	Reference< XDocumentTemplates > xTemplates( ::comphelper::getProcessServiceFactory()->
349*cdf0e10cSrcweir 		createInstance( ASCII_STR("com.sun.star.frame.DocumentTemplates") ), UNO_QUERY );
350*cdf0e10cSrcweir 
351*cdf0e10cSrcweir 	if ( xTemplates.is() )
352*cdf0e10cSrcweir 	{
353*cdf0e10cSrcweir 		Reference < XContent > aRootContent = xTemplates->getContent();
354*cdf0e10cSrcweir 		Reference < XCommandEnvironment > aCmdEnv;
355*cdf0e10cSrcweir 
356*cdf0e10cSrcweir 		if ( aRootContent.is() )
357*cdf0e10cSrcweir 			aTemplateRootURL = aRootContent->getIdentifier()->getContentIdentifier();
358*cdf0e10cSrcweir 	}
359*cdf0e10cSrcweir 
360*cdf0e10cSrcweir 	// insert the categories
361*cdf0e10cSrcweir 	// "New Document"
362*cdf0e10cSrcweir 	sal_Bool bHiContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
363*cdf0e10cSrcweir     Image aImage( SvtResId( bHiContrast ? IMG_SVT_NEWDOC_HC : IMG_SVT_NEWDOC ) );
364*cdf0e10cSrcweir     nMaxTextLength = aImage.GetSizePixel().Width();
365*cdf0e10cSrcweir 	String aEntryStr = String( SvtResId( STR_SVT_NEWDOC ) );
366*cdf0e10cSrcweir 	SvxIconChoiceCtrlEntry*	pEntry =
367*cdf0e10cSrcweir         aIconCtrl.InsertEntry( aEntryStr, aImage, ICON_POS_NEWDOC );
368*cdf0e10cSrcweir 	pEntry->SetUserData( new String( aNewDocumentRootURL ) );
369*cdf0e10cSrcweir 	pEntry->SetQuickHelpText( String( SvtResId( STR_SVT_NEWDOC_HELP ) ) );
370*cdf0e10cSrcweir     DBG_ASSERT( !pEntry->GetBoundRect().IsEmpty(), "empty rectangle" );
371*cdf0e10cSrcweir     long nTemp = pEntry->GetBoundRect().GetSize().Width();
372*cdf0e10cSrcweir     if (nTemp > nMaxTextLength)
373*cdf0e10cSrcweir         nMaxTextLength = nTemp;
374*cdf0e10cSrcweir 
375*cdf0e10cSrcweir 	// "Templates"
376*cdf0e10cSrcweir 	if( aTemplateRootURL.Len() > 0 )
377*cdf0e10cSrcweir 	{
378*cdf0e10cSrcweir 		aEntryStr = String( SvtResId( STR_SVT_TEMPLATES ) );
379*cdf0e10cSrcweir 		pEntry = aIconCtrl.InsertEntry(
380*cdf0e10cSrcweir 			aEntryStr, Image( SvtResId( bHiContrast ? IMG_SVT_TEMPLATES_HC : IMG_SVT_TEMPLATES ) ), ICON_POS_TEMPLATES );
381*cdf0e10cSrcweir 		pEntry->SetUserData( new String( aTemplateRootURL ) );
382*cdf0e10cSrcweir 		pEntry->SetQuickHelpText( String( SvtResId( STR_SVT_TEMPLATES_HELP ) ) );
383*cdf0e10cSrcweir         DBG_ASSERT( !pEntry->GetBoundRect().IsEmpty(), "empty rectangle" );
384*cdf0e10cSrcweir         nTemp = pEntry->GetBoundRect().GetSize().Width();
385*cdf0e10cSrcweir         if (nTemp > nMaxTextLength)
386*cdf0e10cSrcweir             nMaxTextLength = nTemp;
387*cdf0e10cSrcweir 	}
388*cdf0e10cSrcweir 
389*cdf0e10cSrcweir 	// "My Documents"
390*cdf0e10cSrcweir 	aEntryStr = String( SvtResId( STR_SVT_MYDOCS ) );
391*cdf0e10cSrcweir 	pEntry = aIconCtrl.InsertEntry(
392*cdf0e10cSrcweir 		aEntryStr, Image( SvtResId( bHiContrast ? IMG_SVT_MYDOCS_HC : IMG_SVT_MYDOCS ) ), ICON_POS_MYDOCS );
393*cdf0e10cSrcweir 	pEntry->SetUserData( new String( aMyDocumentsRootURL ) );
394*cdf0e10cSrcweir 	pEntry->SetQuickHelpText( String( SvtResId( STR_SVT_MYDOCS_HELP ) ) );
395*cdf0e10cSrcweir     DBG_ASSERT( !pEntry->GetBoundRect().IsEmpty(), "empty rectangle" );
396*cdf0e10cSrcweir     nTemp = pEntry->GetBoundRect().GetSize().Width();
397*cdf0e10cSrcweir     if( nTemp > nMaxTextLength )
398*cdf0e10cSrcweir         nMaxTextLength = nTemp;
399*cdf0e10cSrcweir 
400*cdf0e10cSrcweir 	// "Samples"
401*cdf0e10cSrcweir 	aEntryStr = String( SvtResId( STR_SVT_SAMPLES ) );
402*cdf0e10cSrcweir 	pEntry = aIconCtrl.InsertEntry(
403*cdf0e10cSrcweir 		aEntryStr, Image( SvtResId( bHiContrast ? IMG_SVT_SAMPLES_HC : IMG_SVT_SAMPLES ) ), ICON_POS_SAMPLES );
404*cdf0e10cSrcweir 	pEntry->SetUserData( new String( aSamplesFolderRootURL ) );
405*cdf0e10cSrcweir 	pEntry->SetQuickHelpText( String( SvtResId( STR_SVT_SAMPLES_HELP ) ) );
406*cdf0e10cSrcweir     DBG_ASSERT( !pEntry->GetBoundRect().IsEmpty(), "empty rectangle" );
407*cdf0e10cSrcweir     nTemp = pEntry->GetBoundRect().GetSize().Width();
408*cdf0e10cSrcweir     if (nTemp > nMaxTextLength)
409*cdf0e10cSrcweir         nMaxTextLength = nTemp;
410*cdf0e10cSrcweir 
411*cdf0e10cSrcweir 	aIconCtrl.CreateAutoMnemonics();
412*cdf0e10cSrcweir }
413*cdf0e10cSrcweir 
414*cdf0e10cSrcweir SvtIconWindow_Impl::~SvtIconWindow_Impl()
415*cdf0e10cSrcweir {
416*cdf0e10cSrcweir 	for ( sal_uLong i = 0; i < aIconCtrl.GetEntryCount(); ++i )
417*cdf0e10cSrcweir 	{
418*cdf0e10cSrcweir 		SvxIconChoiceCtrlEntry* pEntry = aIconCtrl.GetEntry( i );
419*cdf0e10cSrcweir 		delete (String*)pEntry->GetUserData();
420*cdf0e10cSrcweir 	}
421*cdf0e10cSrcweir }
422*cdf0e10cSrcweir 
423*cdf0e10cSrcweir SvxIconChoiceCtrlEntry*	SvtIconWindow_Impl::GetEntry( const String& rURL ) const
424*cdf0e10cSrcweir {
425*cdf0e10cSrcweir 	SvxIconChoiceCtrlEntry* pEntry = NULL;
426*cdf0e10cSrcweir 	for ( sal_uLong i = 0; i < aIconCtrl.GetEntryCount(); ++i )
427*cdf0e10cSrcweir 	{
428*cdf0e10cSrcweir 		SvxIconChoiceCtrlEntry* pTemp = aIconCtrl.GetEntry( i );
429*cdf0e10cSrcweir 		String aURL( *( (String*)pTemp->GetUserData() ) );
430*cdf0e10cSrcweir 		if ( aURL == rURL )
431*cdf0e10cSrcweir 		{
432*cdf0e10cSrcweir 			pEntry = pTemp;
433*cdf0e10cSrcweir 			break;
434*cdf0e10cSrcweir 		}
435*cdf0e10cSrcweir 	}
436*cdf0e10cSrcweir 
437*cdf0e10cSrcweir 	return pEntry;
438*cdf0e10cSrcweir }
439*cdf0e10cSrcweir 
440*cdf0e10cSrcweir void SvtIconWindow_Impl::Resize()
441*cdf0e10cSrcweir {
442*cdf0e10cSrcweir 	Size aWinSize = GetOutputSizePixel();
443*cdf0e10cSrcweir 	Size aHeaderSize = aDummyHeaderBar.GetSizePixel();
444*cdf0e10cSrcweir 	aHeaderSize.Width() = aWinSize.Width();
445*cdf0e10cSrcweir 	aDummyHeaderBar.SetSizePixel( aHeaderSize );
446*cdf0e10cSrcweir 	long nHeaderHeight = aHeaderSize.Height();
447*cdf0e10cSrcweir 	aWinSize.Height() -= nHeaderHeight;
448*cdf0e10cSrcweir 	aIconCtrl.SetPosSizePixel( Point( 0, nHeaderHeight ), aWinSize );
449*cdf0e10cSrcweir 	aIconCtrl.ArrangeIcons();
450*cdf0e10cSrcweir }
451*cdf0e10cSrcweir 
452*cdf0e10cSrcweir String SvtIconWindow_Impl::GetCursorPosIconURL() const
453*cdf0e10cSrcweir {
454*cdf0e10cSrcweir 	String aURL;
455*cdf0e10cSrcweir 	SvxIconChoiceCtrlEntry* pEntry = aIconCtrl.GetCursor( );
456*cdf0e10cSrcweir 	if ( pEntry )
457*cdf0e10cSrcweir 		aURL = *static_cast<String*>(pEntry->GetUserData());
458*cdf0e10cSrcweir 	return aURL;
459*cdf0e10cSrcweir 
460*cdf0e10cSrcweir }
461*cdf0e10cSrcweir 
462*cdf0e10cSrcweir String SvtIconWindow_Impl::GetSelectedIconURL() const
463*cdf0e10cSrcweir {
464*cdf0e10cSrcweir 	sal_uLong nPos;
465*cdf0e10cSrcweir 	SvxIconChoiceCtrlEntry* pEntry = aIconCtrl.GetSelectedEntry( nPos );
466*cdf0e10cSrcweir 	String aURL;
467*cdf0e10cSrcweir 	if ( pEntry )
468*cdf0e10cSrcweir 		aURL = *static_cast<String*>(pEntry->GetUserData());
469*cdf0e10cSrcweir 	return aURL;
470*cdf0e10cSrcweir }
471*cdf0e10cSrcweir 
472*cdf0e10cSrcweir String SvtIconWindow_Impl::GetSelectedIconText() const
473*cdf0e10cSrcweir {
474*cdf0e10cSrcweir 	sal_uLong nPos;
475*cdf0e10cSrcweir 	return MnemonicGenerator::EraseAllMnemonicChars( aIconCtrl.GetSelectedEntry( nPos )->GetText() );
476*cdf0e10cSrcweir }
477*cdf0e10cSrcweir 
478*cdf0e10cSrcweir String SvtIconWindow_Impl::GetIconText( const String& rURL ) const
479*cdf0e10cSrcweir {
480*cdf0e10cSrcweir 	String aText;
481*cdf0e10cSrcweir 	SvxIconChoiceCtrlEntry* pEntry = GetEntry( rURL );
482*cdf0e10cSrcweir 	if ( pEntry )
483*cdf0e10cSrcweir 		aText = MnemonicGenerator::EraseAllMnemonicChars( pEntry->GetText() );
484*cdf0e10cSrcweir 	return aText;
485*cdf0e10cSrcweir }
486*cdf0e10cSrcweir 
487*cdf0e10cSrcweir void SvtIconWindow_Impl::InvalidateIconControl()
488*cdf0e10cSrcweir {
489*cdf0e10cSrcweir 	aIconCtrl.Invalidate();
490*cdf0e10cSrcweir }
491*cdf0e10cSrcweir 
492*cdf0e10cSrcweir sal_uLong SvtIconWindow_Impl::GetCursorPos() const
493*cdf0e10cSrcweir {
494*cdf0e10cSrcweir 	sal_uLong nPos = ~sal_uLong(0);
495*cdf0e10cSrcweir 
496*cdf0e10cSrcweir 	SvxIconChoiceCtrlEntry* pCursorEntry = aIconCtrl.GetCursor( );
497*cdf0e10cSrcweir 	if ( pCursorEntry )
498*cdf0e10cSrcweir 		nPos = aIconCtrl.GetEntryListPos( pCursorEntry );
499*cdf0e10cSrcweir 
500*cdf0e10cSrcweir 	return nPos;
501*cdf0e10cSrcweir }
502*cdf0e10cSrcweir 
503*cdf0e10cSrcweir sal_uLong SvtIconWindow_Impl::GetSelectEntryPos() const
504*cdf0e10cSrcweir {
505*cdf0e10cSrcweir 	sal_uLong nPos;
506*cdf0e10cSrcweir 	if ( !aIconCtrl.GetSelectedEntry( nPos ) )
507*cdf0e10cSrcweir 		nPos = ~sal_uLong(0);
508*cdf0e10cSrcweir 	return nPos;
509*cdf0e10cSrcweir }
510*cdf0e10cSrcweir 
511*cdf0e10cSrcweir void SvtIconWindow_Impl::SetCursorPos( sal_uLong nPos )
512*cdf0e10cSrcweir {
513*cdf0e10cSrcweir 	SvxIconChoiceCtrlEntry*	pEntry = aIconCtrl.GetEntry( nPos );
514*cdf0e10cSrcweir 	aIconCtrl.SetCursor( pEntry );
515*cdf0e10cSrcweir 	aIconCtrl.Invalidate();
516*cdf0e10cSrcweir 	aIconCtrl.Update();
517*cdf0e10cSrcweir }
518*cdf0e10cSrcweir 
519*cdf0e10cSrcweir void SvtIconWindow_Impl::SetFocus()
520*cdf0e10cSrcweir {
521*cdf0e10cSrcweir 	aIconCtrl.GrabFocus();
522*cdf0e10cSrcweir }
523*cdf0e10cSrcweir 
524*cdf0e10cSrcweir long SvtIconWindow_Impl::CalcHeight() const
525*cdf0e10cSrcweir {
526*cdf0e10cSrcweir 	// calculate the required height of the IconControl
527*cdf0e10cSrcweir 	long nHeight = 0;
528*cdf0e10cSrcweir 	sal_uLong nCount = aIconCtrl.GetEntryCount();
529*cdf0e10cSrcweir 	if ( nCount > 0 )
530*cdf0e10cSrcweir 		// bottom of the last icon
531*cdf0e10cSrcweir 		nHeight = aIconCtrl.GetEntry(nCount-1)->GetBoundRect().Bottom();
532*cdf0e10cSrcweir 
533*cdf0e10cSrcweir 	// + headerbar height
534*cdf0e10cSrcweir 	nHeight += aDummyHeaderBar.GetSizePixel().Height();
535*cdf0e10cSrcweir 
536*cdf0e10cSrcweir 	return nHeight;
537*cdf0e10cSrcweir }
538*cdf0e10cSrcweir 
539*cdf0e10cSrcweir sal_Bool SvtIconWindow_Impl::IsRootURL( const String& rURL ) const
540*cdf0e10cSrcweir {
541*cdf0e10cSrcweir 	return	rURL == aNewDocumentRootURL ||
542*cdf0e10cSrcweir 			rURL == aTemplateRootURL ||
543*cdf0e10cSrcweir 			rURL == aMyDocumentsRootURL ||
544*cdf0e10cSrcweir 			rURL == aSamplesFolderRootURL;
545*cdf0e10cSrcweir }
546*cdf0e10cSrcweir 
547*cdf0e10cSrcweir sal_uLong SvtIconWindow_Impl::GetRootPos( const String& rURL ) const
548*cdf0e10cSrcweir {
549*cdf0e10cSrcweir 	sal_uLong nPos = ~sal_uLong(0);
550*cdf0e10cSrcweir 	if ( aNewDocumentRootURL.Match( rURL ) == STRING_MATCH )
551*cdf0e10cSrcweir 		nPos = 0;
552*cdf0e10cSrcweir 	else if ( aTemplateRootURL.Match( rURL ) == STRING_MATCH )
553*cdf0e10cSrcweir 		nPos = 1;
554*cdf0e10cSrcweir 	else if ( aMyDocumentsRootURL.Match( rURL ) == STRING_MATCH )
555*cdf0e10cSrcweir 		nPos = 2;
556*cdf0e10cSrcweir 	else if ( aSamplesFolderRootURL.Match( rURL ) == STRING_MATCH )
557*cdf0e10cSrcweir 		nPos = 3;
558*cdf0e10cSrcweir     else if ( rURL.Match( aMyDocumentsRootURL ) == STRING_MATCH )
559*cdf0e10cSrcweir         nPos = 2;
560*cdf0e10cSrcweir 	else
561*cdf0e10cSrcweir 	{
562*cdf0e10cSrcweir         DBG_WARNING( "SvtIconWindow_Impl::GetRootPos(): invalid position" );
563*cdf0e10cSrcweir         nPos = 2;
564*cdf0e10cSrcweir 	}
565*cdf0e10cSrcweir 
566*cdf0e10cSrcweir 	return nPos;
567*cdf0e10cSrcweir }
568*cdf0e10cSrcweir 
569*cdf0e10cSrcweir void SvtIconWindow_Impl::UpdateIcons( sal_Bool _bHiContrast )
570*cdf0e10cSrcweir {
571*cdf0e10cSrcweir 	aIconCtrl.GetEntry( ICON_POS_NEWDOC )->SetImage(
572*cdf0e10cSrcweir 		Image( SvtResId( _bHiContrast ? IMG_SVT_NEWDOC_HC : IMG_SVT_NEWDOC ) ) );
573*cdf0e10cSrcweir 	aIconCtrl.GetEntry( ICON_POS_TEMPLATES )->SetImage(
574*cdf0e10cSrcweir 		Image( SvtResId( _bHiContrast ? IMG_SVT_TEMPLATES_HC : IMG_SVT_TEMPLATES ) ) );
575*cdf0e10cSrcweir 	aIconCtrl.GetEntry( ICON_POS_MYDOCS )->SetImage(
576*cdf0e10cSrcweir 		Image( SvtResId( _bHiContrast ? IMG_SVT_MYDOCS_HC : IMG_SVT_MYDOCS ) ) );
577*cdf0e10cSrcweir 	aIconCtrl.GetEntry( ICON_POS_SAMPLES )->SetImage(
578*cdf0e10cSrcweir 		Image( SvtResId( _bHiContrast ? IMG_SVT_SAMPLES_HC : IMG_SVT_SAMPLES ) ) );
579*cdf0e10cSrcweir }
580*cdf0e10cSrcweir /* -----------------27.11.2002 16:58-----------------
581*cdf0e10cSrcweir  *
582*cdf0e10cSrcweir  * --------------------------------------------------*/
583*cdf0e10cSrcweir void SvtIconWindow_Impl::SelectFolder(sal_Int32 nFolderPosition)
584*cdf0e10cSrcweir {
585*cdf0e10cSrcweir     SvxIconChoiceCtrlEntry* pEntry = aIconCtrl.GetEntry( nFolderPosition );
586*cdf0e10cSrcweir     if(pEntry)
587*cdf0e10cSrcweir     {
588*cdf0e10cSrcweir         aIconCtrl.SetCursor( pEntry );
589*cdf0e10cSrcweir         aIconCtrl.GetClickHdl().Call(&aIconCtrl);
590*cdf0e10cSrcweir     }
591*cdf0e10cSrcweir }
592*cdf0e10cSrcweir 
593*cdf0e10cSrcweir // class SvtFileViewWindow_Impl -----------------------------------------_
594*cdf0e10cSrcweir 
595*cdf0e10cSrcweir SvtFileViewWindow_Impl::SvtFileViewWindow_Impl( SvtTemplateWindow* pParent ) :
596*cdf0e10cSrcweir 
597*cdf0e10cSrcweir 	Window( pParent, WB_DIALOGCONTROL | WB_TABSTOP | WB_BORDER | WB_3DLOOK ),
598*cdf0e10cSrcweir 
599*cdf0e10cSrcweir 	rParent				( *pParent ),
600*cdf0e10cSrcweir 	aFileView			( this, SvtResId( CTRL_FILEVIEW ), FILEVIEW_SHOW_TITLE ),
601*cdf0e10cSrcweir 	bIsTemplateFolder	( sal_False )
602*cdf0e10cSrcweir 
603*cdf0e10cSrcweir {
604*cdf0e10cSrcweir 	aFileView.SetStyle( aFileView.GetStyle() | WB_DIALOGCONTROL | WB_TABSTOP );
605*cdf0e10cSrcweir 	aFileView.SetHelpId( HID_TEMPLATEDLG_FILEVIEW );
606*cdf0e10cSrcweir 	aFileView.Show();
607*cdf0e10cSrcweir 	aFileView.SetPosPixel( Point( 0, 0 ) );
608*cdf0e10cSrcweir 	aFileView.EnableAutoResize();
609*cdf0e10cSrcweir     aFileView.EnableContextMenu( sal_False );
610*cdf0e10cSrcweir     aFileView.EnableDelete( sal_False );
611*cdf0e10cSrcweir }
612*cdf0e10cSrcweir 
613*cdf0e10cSrcweir SvtFileViewWindow_Impl::~SvtFileViewWindow_Impl()
614*cdf0e10cSrcweir {
615*cdf0e10cSrcweir }
616*cdf0e10cSrcweir 
617*cdf0e10cSrcweir void GetMenuEntry_Impl
618*cdf0e10cSrcweir (
619*cdf0e10cSrcweir 	Sequence< PropertyValue >& aDynamicMenuEntry,
620*cdf0e10cSrcweir 	::rtl::OUString& rTitle,
621*cdf0e10cSrcweir 	::rtl::OUString& rURL,
622*cdf0e10cSrcweir     ::rtl::OUString& rFrame,
623*cdf0e10cSrcweir 	::rtl::OUString& rImageId
624*cdf0e10cSrcweir )
625*cdf0e10cSrcweir {
626*cdf0e10cSrcweir 	for ( int i = 0; i < aDynamicMenuEntry.getLength(); i++ )
627*cdf0e10cSrcweir 	{
628*cdf0e10cSrcweir 		if ( aDynamicMenuEntry[i].Name == DYNAMICMENU_PROPERTYNAME_URL )
629*cdf0e10cSrcweir 			aDynamicMenuEntry[i].Value >>= rURL;
630*cdf0e10cSrcweir 		else if ( aDynamicMenuEntry[i].Name == DYNAMICMENU_PROPERTYNAME_TITLE )
631*cdf0e10cSrcweir 			aDynamicMenuEntry[i].Value >>= rTitle;
632*cdf0e10cSrcweir 		else if ( aDynamicMenuEntry[i].Name == DYNAMICMENU_PROPERTYNAME_IMAGEIDENTIFIER )
633*cdf0e10cSrcweir 			aDynamicMenuEntry[i].Value >>= rImageId;
634*cdf0e10cSrcweir 		else if ( aDynamicMenuEntry[i].Name == DYNAMICMENU_PROPERTYNAME_TARGETNAME )
635*cdf0e10cSrcweir 			aDynamicMenuEntry[i].Value >>= rFrame;
636*cdf0e10cSrcweir 	}
637*cdf0e10cSrcweir }
638*cdf0e10cSrcweir Sequence< ::rtl::OUString > SvtFileViewWindow_Impl::GetNewDocContents() const
639*cdf0e10cSrcweir {
640*cdf0e10cSrcweir 	NewDocList_Impl aNewDocs;
641*cdf0e10cSrcweir 	Sequence< Sequence< PropertyValue > > aDynamicMenuEntries;
642*cdf0e10cSrcweir 	aDynamicMenuEntries = SvtDynamicMenuOptions().GetMenu( E_NEWMENU );
643*cdf0e10cSrcweir 
644*cdf0e10cSrcweir 	::rtl::OUString aTitle;
645*cdf0e10cSrcweir 	::rtl::OUString aURL;
646*cdf0e10cSrcweir 	::rtl::OUString aImageURL;
647*cdf0e10cSrcweir 	::rtl::OUString aTargetFrame;
648*cdf0e10cSrcweir 
649*cdf0e10cSrcweir 	sal_uInt32 i, nCount = aDynamicMenuEntries.getLength();
650*cdf0e10cSrcweir 	::rtl::OUString sSeparator( ASCII_STR("private:separator") );
651*cdf0e10cSrcweir 	::rtl::OUString sSlotURL( ASCII_STR("slot:5500") );
652*cdf0e10cSrcweir 
653*cdf0e10cSrcweir 	for ( i = 0; i < nCount; ++i )
654*cdf0e10cSrcweir 	{
655*cdf0e10cSrcweir 		GetMenuEntry_Impl( aDynamicMenuEntries[i], aTitle, aURL, aTargetFrame, aImageURL );
656*cdf0e10cSrcweir 
657*cdf0e10cSrcweir         if ( aURL == sSeparator || aURL == sSlotURL )
658*cdf0e10cSrcweir 			continue;
659*cdf0e10cSrcweir 		else
660*cdf0e10cSrcweir 		{
661*cdf0e10cSrcweir 			// title
662*cdf0e10cSrcweir 			String aRow = MnemonicGenerator::EraseAllMnemonicChars( String( aTitle ) );
663*cdf0e10cSrcweir 			aRow += '\t';
664*cdf0e10cSrcweir 			// no type
665*cdf0e10cSrcweir 			aRow += '\t';
666*cdf0e10cSrcweir 			// no size
667*cdf0e10cSrcweir 			aRow += '\t';
668*cdf0e10cSrcweir 			// no date
669*cdf0e10cSrcweir 			aRow += '\t';
670*cdf0e10cSrcweir 			// url
671*cdf0e10cSrcweir 			aRow += String( aURL );
672*cdf0e10cSrcweir 			aRow += '\t';
673*cdf0e10cSrcweir 			// folder == false
674*cdf0e10cSrcweir 			aRow += '0';
675*cdf0e10cSrcweir 			// image url?
676*cdf0e10cSrcweir 			if ( aImageURL.getLength() > 0 )
677*cdf0e10cSrcweir 			{
678*cdf0e10cSrcweir 				aRow += '\t';
679*cdf0e10cSrcweir 				aRow += String( aImageURL );
680*cdf0e10cSrcweir 			}
681*cdf0e10cSrcweir 
682*cdf0e10cSrcweir 			::rtl::OUString* pRow = new ::rtl::OUString( aRow );
683*cdf0e10cSrcweir 			aNewDocs.Insert( pRow, LIST_APPEND );
684*cdf0e10cSrcweir 		}
685*cdf0e10cSrcweir 	}
686*cdf0e10cSrcweir 
687*cdf0e10cSrcweir     nCount = aNewDocs.Count();
688*cdf0e10cSrcweir 	Sequence < ::rtl::OUString > aRet( nCount );
689*cdf0e10cSrcweir 	::rtl::OUString* pRet = aRet.getArray();
690*cdf0e10cSrcweir 	for ( i = 0; i < nCount; ++i )
691*cdf0e10cSrcweir 	{
692*cdf0e10cSrcweir 		::rtl::OUString* pNewDoc = aNewDocs.GetObject(i);
693*cdf0e10cSrcweir 		pRet[i] = *( pNewDoc );
694*cdf0e10cSrcweir 		delete pNewDoc;
695*cdf0e10cSrcweir 	}
696*cdf0e10cSrcweir 
697*cdf0e10cSrcweir 	return aRet;
698*cdf0e10cSrcweir }
699*cdf0e10cSrcweir 
700*cdf0e10cSrcweir void SvtFileViewWindow_Impl::Resize()
701*cdf0e10cSrcweir {
702*cdf0e10cSrcweir 	Size aWinSize = GetOutputSizePixel();
703*cdf0e10cSrcweir 
704*cdf0e10cSrcweir 	static int	x = 0;
705*cdf0e10cSrcweir 	static int	y = 0;
706*cdf0e10cSrcweir 
707*cdf0e10cSrcweir 	aWinSize.nA += x;
708*cdf0e10cSrcweir 	aWinSize.nB += y;
709*cdf0e10cSrcweir 	aFileView.SetSizePixel( aWinSize );
710*cdf0e10cSrcweir }
711*cdf0e10cSrcweir 
712*cdf0e10cSrcweir String SvtFileViewWindow_Impl::GetSelectedFile() const
713*cdf0e10cSrcweir {
714*cdf0e10cSrcweir 	return aFileView.GetCurrentURL();
715*cdf0e10cSrcweir }
716*cdf0e10cSrcweir 
717*cdf0e10cSrcweir void SvtFileViewWindow_Impl::OpenFolder( const String& rURL )
718*cdf0e10cSrcweir {
719*cdf0e10cSrcweir 	aFolderURL = rURL;
720*cdf0e10cSrcweir 
721*cdf0e10cSrcweir 	rParent.SetPrevLevelButtonState( rURL );
722*cdf0e10cSrcweir 
723*cdf0e10cSrcweir     aFileView.SetUrlFilter( &aURLFilter );
724*cdf0e10cSrcweir 
725*cdf0e10cSrcweir 	INetProtocol eProt = INetURLObject( rURL ).GetProtocol();
726*cdf0e10cSrcweir 	bIsTemplateFolder = ( eProt == INET_PROT_VND_SUN_STAR_HIER );
727*cdf0e10cSrcweir     bool isNewDocumentFolder = ( eProt == INET_PROT_PRIVATE );
728*cdf0e10cSrcweir 
729*cdf0e10cSrcweir     aURLFilter.enableFilter( !bIsTemplateFolder && !isNewDocumentFolder );
730*cdf0e10cSrcweir 
731*cdf0e10cSrcweir     if ( isNewDocumentFolder )
732*cdf0e10cSrcweir 	{
733*cdf0e10cSrcweir 		aFileView.EnableNameReplacing( sal_False );
734*cdf0e10cSrcweir 		aFileView.Initialize( GetNewDocContents() );
735*cdf0e10cSrcweir 	}
736*cdf0e10cSrcweir 	else
737*cdf0e10cSrcweir 	{
738*cdf0e10cSrcweir 		xub_StrLen nSampFoldLen = aSamplesFolderURL.Len();
739*cdf0e10cSrcweir 		aFileView.EnableNameReplacing(
740*cdf0e10cSrcweir 					nSampFoldLen && rURL.CompareTo( aSamplesFolderURL, nSampFoldLen ) == COMPARE_EQUAL );
741*cdf0e10cSrcweir 		aFileView.Initialize( rURL, String(), NULL );
742*cdf0e10cSrcweir 	}
743*cdf0e10cSrcweir 	aNewFolderLink.Call( this );
744*cdf0e10cSrcweir }
745*cdf0e10cSrcweir 
746*cdf0e10cSrcweir sal_Bool SvtFileViewWindow_Impl::HasPreviousLevel( String& rURL ) const
747*cdf0e10cSrcweir {
748*cdf0e10cSrcweir 	INetURLObject aViewObj( aFileView.GetViewURL() );
749*cdf0e10cSrcweir 	INetURLObject aRootObj( aCurrentRootURL );
750*cdf0e10cSrcweir 	INetURLObject aMyDocObj( aMyDocumentsURL );
751*cdf0e10cSrcweir 
752*cdf0e10cSrcweir     return ( ( aViewObj != aRootObj || aRootObj == aMyDocObj ) && aFileView.GetParentURL( rURL ) );
753*cdf0e10cSrcweir }
754*cdf0e10cSrcweir 
755*cdf0e10cSrcweir String SvtFileViewWindow_Impl::GetFolderTitle() const
756*cdf0e10cSrcweir {
757*cdf0e10cSrcweir 	String aTitle;
758*cdf0e10cSrcweir 	::utl::UCBContentHelper::GetTitle( aFolderURL, aTitle );
759*cdf0e10cSrcweir 	return aTitle;
760*cdf0e10cSrcweir }
761*cdf0e10cSrcweir 
762*cdf0e10cSrcweir void SvtFileViewWindow_Impl::SetFocus()
763*cdf0e10cSrcweir {
764*cdf0e10cSrcweir 	aFileView.SetFocus();
765*cdf0e10cSrcweir }
766*cdf0e10cSrcweir 
767*cdf0e10cSrcweir // class SvtDocInfoTable_Impl --------------------------------------------
768*cdf0e10cSrcweir 
769*cdf0e10cSrcweir SvtDocInfoTable_Impl::SvtDocInfoTable_Impl() :
770*cdf0e10cSrcweir 
771*cdf0e10cSrcweir 	ResStringArray( SvtResId( STRARY_SVT_DOCINFO ) )
772*cdf0e10cSrcweir 
773*cdf0e10cSrcweir {
774*cdf0e10cSrcweir }
775*cdf0e10cSrcweir // -----------------------------------------------------------------------------
776*cdf0e10cSrcweir // class SvtExtendedMultiLineEdit_Impl --------------------------------------------
777*cdf0e10cSrcweir SvtExtendedMultiLineEdit_Impl::SvtExtendedMultiLineEdit_Impl( Window* pParent,WinBits _nBits ) :
778*cdf0e10cSrcweir 
779*cdf0e10cSrcweir 	ExtMultiLineEdit( pParent, _nBits )
780*cdf0e10cSrcweir 
781*cdf0e10cSrcweir {
782*cdf0e10cSrcweir 	SetLeftMargin( 10 );
783*cdf0e10cSrcweir }
784*cdf0e10cSrcweir // -----------------------------------------------------------------------------
785*cdf0e10cSrcweir void SvtExtendedMultiLineEdit_Impl::InsertEntry( const String& rTitle, const String& rValue )
786*cdf0e10cSrcweir {
787*cdf0e10cSrcweir 	String aText( '\n' );
788*cdf0e10cSrcweir 	aText += rTitle;
789*cdf0e10cSrcweir 	aText += ':';
790*cdf0e10cSrcweir 	InsertText( aText );
791*cdf0e10cSrcweir 	sal_uLong nPara = GetParagraphCount() - 1;
792*cdf0e10cSrcweir 	SetAttrib( TextAttribFontWeight( WEIGHT_BOLD ), nPara, 0, aText.Len() );
793*cdf0e10cSrcweir 
794*cdf0e10cSrcweir 	aText = '\n';
795*cdf0e10cSrcweir 	aText += rValue;
796*cdf0e10cSrcweir 	InsertText( aText );
797*cdf0e10cSrcweir 	nPara = GetParagraphCount() - 1;
798*cdf0e10cSrcweir 	SetAttrib( TextAttribFontWeight( WEIGHT_NORMAL ), nPara, 0, aText.Len() );
799*cdf0e10cSrcweir 
800*cdf0e10cSrcweir 	InsertText( String( '\n' ) );
801*cdf0e10cSrcweir }
802*cdf0e10cSrcweir // -----------------------------------------------------------------------------
803*cdf0e10cSrcweir 
804*cdf0e10cSrcweir // -----------------------------------------------------------------------
805*cdf0e10cSrcweir 
806*cdf0e10cSrcweir const String& SvtDocInfoTable_Impl::GetString( long nId ) const
807*cdf0e10cSrcweir {
808*cdf0e10cSrcweir     sal_uInt32 nPos( FindIndex( nId ) );
809*cdf0e10cSrcweir 
810*cdf0e10cSrcweir 	if ( RESARRAY_INDEX_NOTFOUND != nPos )
811*cdf0e10cSrcweir 		return ResStringArray::GetString( nPos );
812*cdf0e10cSrcweir 	else
813*cdf0e10cSrcweir 		return aEmptyString;
814*cdf0e10cSrcweir }
815*cdf0e10cSrcweir 
816*cdf0e10cSrcweir // class SvtFrameWindow_Impl ---------------------------------------------
817*cdf0e10cSrcweir 
818*cdf0e10cSrcweir SvtFrameWindow_Impl::SvtFrameWindow_Impl( Window* pParent ) :
819*cdf0e10cSrcweir 
820*cdf0e10cSrcweir 	Window( pParent )
821*cdf0e10cSrcweir 
822*cdf0e10cSrcweir {
823*cdf0e10cSrcweir 	// detect application language
824*cdf0e10cSrcweir 	aLocale= SvtPathOptions().GetLocale();
825*cdf0e10cSrcweir 
826*cdf0e10cSrcweir 	// create windows and frame
827*cdf0e10cSrcweir 	pEditWin = new ODocumentInfoPreview( this ,WB_LEFT | WB_VSCROLL | WB_READONLY | WB_BORDER | WB_3DLOOK);
828*cdf0e10cSrcweir 	pTextWin = new Window( this );
829*cdf0e10cSrcweir     xFrame = Reference < XFrame > ( ::comphelper::getProcessServiceFactory()->
830*cdf0e10cSrcweir 		createInstance( ASCII_STR("com.sun.star.frame.Frame") ), UNO_QUERY );
831*cdf0e10cSrcweir 	xWindow = VCLUnoHelper::GetInterface( pTextWin );
832*cdf0e10cSrcweir 	xFrame->initialize( xWindow );
833*cdf0e10cSrcweir 
834*cdf0e10cSrcweir 	// create docinfo instance
835*cdf0e10cSrcweir     m_xDocProps.set( ::comphelper::getProcessServiceFactory()->createInstance(
836*cdf0e10cSrcweir             ASCII_STR("com.sun.star.document.DocumentProperties") ),
837*cdf0e10cSrcweir         UNO_QUERY );
838*cdf0e10cSrcweir 
839*cdf0e10cSrcweir 	pEmptyWin = new Window( this, WB_BORDER | WB_3DLOOK );
840*cdf0e10cSrcweir }
841*cdf0e10cSrcweir 
842*cdf0e10cSrcweir SvtFrameWindow_Impl::~SvtFrameWindow_Impl()
843*cdf0e10cSrcweir {
844*cdf0e10cSrcweir 	delete pEditWin;
845*cdf0e10cSrcweir 	delete pEmptyWin;
846*cdf0e10cSrcweir 	xFrame->dispose();
847*cdf0e10cSrcweir }
848*cdf0e10cSrcweir 
849*cdf0e10cSrcweir void SvtFrameWindow_Impl::ViewEditWin()
850*cdf0e10cSrcweir {
851*cdf0e10cSrcweir 	pEmptyWin->Hide();
852*cdf0e10cSrcweir 	xWindow->setVisible( sal_False );
853*cdf0e10cSrcweir 	pTextWin->Hide();
854*cdf0e10cSrcweir 	pEditWin->Show();
855*cdf0e10cSrcweir }
856*cdf0e10cSrcweir 
857*cdf0e10cSrcweir void SvtFrameWindow_Impl::ViewTextWin()
858*cdf0e10cSrcweir {
859*cdf0e10cSrcweir 	pEmptyWin->Hide();
860*cdf0e10cSrcweir 	pEditWin->Hide();
861*cdf0e10cSrcweir 	xWindow->setVisible( sal_True );
862*cdf0e10cSrcweir 	pTextWin->Show();
863*cdf0e10cSrcweir }
864*cdf0e10cSrcweir 
865*cdf0e10cSrcweir void SvtFrameWindow_Impl::ViewEmptyWin()
866*cdf0e10cSrcweir {
867*cdf0e10cSrcweir 	xWindow->setVisible( sal_False );
868*cdf0e10cSrcweir 	pTextWin->Hide();
869*cdf0e10cSrcweir 	pEditWin->Hide();
870*cdf0e10cSrcweir 	pEmptyWin->Show();
871*cdf0e10cSrcweir }
872*cdf0e10cSrcweir 
873*cdf0e10cSrcweir void SvtFrameWindow_Impl::ViewNonEmptyWin()
874*cdf0e10cSrcweir {
875*cdf0e10cSrcweir 	if( bDocInfo )
876*cdf0e10cSrcweir 		ViewEditWin();
877*cdf0e10cSrcweir 	else
878*cdf0e10cSrcweir 		ViewTextWin();
879*cdf0e10cSrcweir }
880*cdf0e10cSrcweir 
881*cdf0e10cSrcweir IMPL_STATIC_LINK_NOINSTANCE( SvtFrameWindow_Impl, ExecuteHdl_Impl, SvtExecuteInfo*, pExecuteInfo )
882*cdf0e10cSrcweir {
883*cdf0e10cSrcweir     try
884*cdf0e10cSrcweir     {
885*cdf0e10cSrcweir         pExecuteInfo->xDispatch->dispatch( pExecuteInfo->aTargetURL, Sequence < PropertyValue >() );
886*cdf0e10cSrcweir     }
887*cdf0e10cSrcweir     catch ( Exception& )
888*cdf0e10cSrcweir     {
889*cdf0e10cSrcweir     }
890*cdf0e10cSrcweir 
891*cdf0e10cSrcweir     delete pExecuteInfo;
892*cdf0e10cSrcweir     return 0;
893*cdf0e10cSrcweir }
894*cdf0e10cSrcweir 
895*cdf0e10cSrcweir void SvtFrameWindow_Impl::ShowDocInfo( const String& rURL )
896*cdf0e10cSrcweir {
897*cdf0e10cSrcweir 	try
898*cdf0e10cSrcweir 	{
899*cdf0e10cSrcweir 		uno::Reference < task::XInteractionHandler > xInteractionHandler( ::comphelper::getProcessServiceFactory()->createInstance(
900*cdf0e10cSrcweir 			::rtl::OUString::createFromAscii("com.sun.star.task.InteractionHandler") ), uno::UNO_QUERY );
901*cdf0e10cSrcweir 		uno::Sequence < beans::PropertyValue> aProps(1);
902*cdf0e10cSrcweir 		aProps[0].Name = ::rtl::OUString::createFromAscii("InteractionHandler");
903*cdf0e10cSrcweir 		aProps[0].Value <<= xInteractionHandler;
904*cdf0e10cSrcweir 		m_xDocProps->loadFromMedium( rURL, aProps );
905*cdf0e10cSrcweir         pEditWin->fill( m_xDocProps, rURL );
906*cdf0e10cSrcweir 	}
907*cdf0e10cSrcweir 	catch ( UnknownPropertyException& ) {}
908*cdf0e10cSrcweir 	catch ( Exception& ) {}
909*cdf0e10cSrcweir }
910*cdf0e10cSrcweir 
911*cdf0e10cSrcweir void SvtFrameWindow_Impl::Resize()
912*cdf0e10cSrcweir {
913*cdf0e10cSrcweir 	Size aWinSize = GetOutputSizePixel();
914*cdf0e10cSrcweir 	pEditWin->SetSizePixel( aWinSize );
915*cdf0e10cSrcweir 	pTextWin->SetSizePixel( aWinSize );
916*cdf0e10cSrcweir 	pEmptyWin->SetSizePixel( aWinSize );
917*cdf0e10cSrcweir }
918*cdf0e10cSrcweir 
919*cdf0e10cSrcweir void SvtFrameWindow_Impl::OpenFile( const String& rURL, sal_Bool bPreview, sal_Bool bIsTemplate, sal_Bool bAsTemplate )
920*cdf0e10cSrcweir {
921*cdf0e10cSrcweir 	if ( bPreview )
922*cdf0e10cSrcweir 		aCurrentURL = rURL;
923*cdf0e10cSrcweir 
924*cdf0e10cSrcweir 	ViewNonEmptyWin();
925*cdf0e10cSrcweir 	pEditWin->Clear();
926*cdf0e10cSrcweir 
927*cdf0e10cSrcweir     if ( rURL.Len() > 0 && bPreview && m_xDocProps.is() )
928*cdf0e10cSrcweir         ShowDocInfo( rURL );
929*cdf0e10cSrcweir 
930*cdf0e10cSrcweir 	if ( rURL.Len() == 0 )
931*cdf0e10cSrcweir 	{
932*cdf0e10cSrcweir 		xFrame->setComponent( Reference < com::sun::star::awt::XWindow >(), Reference < XController >() );
933*cdf0e10cSrcweir 		ViewEmptyWin();
934*cdf0e10cSrcweir 	}
935*cdf0e10cSrcweir 	else if ( !::utl::UCBContentHelper::IsFolder( rURL ) )
936*cdf0e10cSrcweir 	{
937*cdf0e10cSrcweir 		com::sun::star::util::URL aURL;
938*cdf0e10cSrcweir 		aURL.Complete = rURL;
939*cdf0e10cSrcweir     	Reference < com::sun::star::util::XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->
940*cdf0e10cSrcweir 			createInstance( ASCII_STR("com.sun.star.util.URLTransformer" ) ), UNO_QUERY );
941*cdf0e10cSrcweir     	xTrans->parseStrict( aURL );
942*cdf0e10cSrcweir 
943*cdf0e10cSrcweir 		String aTarget;
944*cdf0e10cSrcweir     	Reference < XDispatchProvider > xProv( xFrame, UNO_QUERY );
945*cdf0e10cSrcweir 		if ( bPreview )
946*cdf0e10cSrcweir 			aTarget = ASCII_STR("_self");
947*cdf0e10cSrcweir 		else
948*cdf0e10cSrcweir 		{
949*cdf0e10cSrcweir             // can be removed if the database application change its URL
950*cdf0e10cSrcweir             String sServiceScheme( RTL_CONSTASCII_STRINGPARAM( "service:" ) );
951*cdf0e10cSrcweir             if ( rURL.Match( sServiceScheme ) != sServiceScheme.Len() )
952*cdf0e10cSrcweir                 // service URL has no default target
953*cdf0e10cSrcweir                 aTarget = ASCII_STR("_default");
954*cdf0e10cSrcweir 			xProv = Reference < XDispatchProvider >( ::comphelper::getProcessServiceFactory()->
955*cdf0e10cSrcweir 				createInstance( ASCII_STR("com.sun.star.frame.Desktop") ), UNO_QUERY );
956*cdf0e10cSrcweir 		}
957*cdf0e10cSrcweir 
958*cdf0e10cSrcweir     	Reference < XDispatch > xDisp = xProv.is() ?
959*cdf0e10cSrcweir 			xProv->queryDispatch( aURL, aTarget, 0 ) : Reference < XDispatch >();
960*cdf0e10cSrcweir 
961*cdf0e10cSrcweir 		if ( xDisp.is() )
962*cdf0e10cSrcweir 		{
963*cdf0e10cSrcweir 			if ( bPreview )
964*cdf0e10cSrcweir 			{
965*cdf0e10cSrcweir 				if ( m_aOpenURL != aURL.Complete )
966*cdf0e10cSrcweir 				{
967*cdf0e10cSrcweir 					WaitObject aWaitCursor( GetParent() );
968*cdf0e10cSrcweir 	                // disabling must be done here, does not work in ctor because
969*cdf0e10cSrcweir 	                // execute of the dialog will overwrite it
970*cdf0e10cSrcweir 	                // ( own execute method would help )
971*cdf0e10cSrcweir 	                pTextWin->EnableInput( sal_False, sal_True );
972*cdf0e10cSrcweir 					if ( pTextWin->IsReallyVisible() )
973*cdf0e10cSrcweir 					{
974*cdf0e10cSrcweir 						sal_Bool	b = sal_True;
975*cdf0e10cSrcweir 						Sequence < PropertyValue > aArgs( 4 );
976*cdf0e10cSrcweir 	        			aArgs[0].Name = ASCII_STR("Preview");
977*cdf0e10cSrcweir 						aArgs[0].Value.setValue( &b, ::getBooleanCppuType() );
978*cdf0e10cSrcweir 	        			aArgs[1].Name = ASCII_STR("ReadOnly");
979*cdf0e10cSrcweir 						aArgs[1].Value.setValue( &b, ::getBooleanCppuType() );
980*cdf0e10cSrcweir 	        			aArgs[2].Name = ASCII_STR("AsTemplate");	// prevents getting an empty URL with getURL()!
981*cdf0e10cSrcweir 
982*cdf0e10cSrcweir 						uno::Reference < task::XInteractionHandler > xInteractionHandler( ::comphelper::getProcessServiceFactory()->createInstance(
983*cdf0e10cSrcweir 							::rtl::OUString::createFromAscii("com.sun.star.task.InteractionHandler") ), uno::UNO_QUERY );
984*cdf0e10cSrcweir 						aArgs[3].Name = ::rtl::OUString::createFromAscii("InteractionHandler");
985*cdf0e10cSrcweir 						aArgs[3].Value <<= xInteractionHandler;
986*cdf0e10cSrcweir 
987*cdf0e10cSrcweir 						b = sal_False;
988*cdf0e10cSrcweir 	        			aArgs[2].Value.setValue( &b, ::getBooleanCppuType() );
989*cdf0e10cSrcweir 	        			xDisp->dispatch( aURL, aArgs );
990*cdf0e10cSrcweir 
991*cdf0e10cSrcweir 						::rtl::OUString											aDispURL;
992*cdf0e10cSrcweir 						Reference< ::com::sun::star::frame::XController >		xCtrl = xFrame->getController();
993*cdf0e10cSrcweir 						if( xCtrl.is() )
994*cdf0e10cSrcweir 						{
995*cdf0e10cSrcweir 							Reference< ::com::sun::star::frame::XModel >		xMdl = xCtrl->getModel();
996*cdf0e10cSrcweir 							if( xMdl.is() )
997*cdf0e10cSrcweir 								aDispURL = xMdl->getURL();
998*cdf0e10cSrcweir 						}
999*cdf0e10cSrcweir 
1000*cdf0e10cSrcweir 						if( aDispURL != aURL.Complete )
1001*cdf0e10cSrcweir 						{
1002*cdf0e10cSrcweir 							xFrame->setComponent( Reference < com::sun::star::awt::XWindow >(), Reference < XController >() );
1003*cdf0e10cSrcweir 							ViewEmptyWin();
1004*cdf0e10cSrcweir 							m_aOpenURL = rtl::OUString();
1005*cdf0e10cSrcweir 						}
1006*cdf0e10cSrcweir 						else
1007*cdf0e10cSrcweir 							m_aOpenURL = aDispURL;
1008*cdf0e10cSrcweir 					}
1009*cdf0e10cSrcweir 				}
1010*cdf0e10cSrcweir 			}
1011*cdf0e10cSrcweir 			else if ( bIsTemplate )
1012*cdf0e10cSrcweir 			{
1013*cdf0e10cSrcweir 				Sequence < PropertyValue > aArgs( 1 );
1014*cdf0e10cSrcweir         		aArgs[0].Name = ASCII_STR("AsTemplate");
1015*cdf0e10cSrcweir         		aArgs[0].Value <<= bAsTemplate;
1016*cdf0e10cSrcweir         		xDisp->dispatch( aURL, aArgs );
1017*cdf0e10cSrcweir 				m_aOpenURL = rtl::OUString();
1018*cdf0e10cSrcweir 			}
1019*cdf0e10cSrcweir 			else
1020*cdf0e10cSrcweir 			{
1021*cdf0e10cSrcweir 			/*
1022*cdf0e10cSrcweir                 SvtExecuteInfo* pExecuteInfo = new SvtExecuteInfo;
1023*cdf0e10cSrcweir                 pExecuteInfo->xDispatch = xDisp;
1024*cdf0e10cSrcweir                 pExecuteInfo->aTargetURL = aURL;
1025*cdf0e10cSrcweir                 Application::PostUserEvent(
1026*cdf0e10cSrcweir                     STATIC_LINK(0, SvtFrameWindow_Impl, ExecuteHdl_Impl), pExecuteInfo );
1027*cdf0e10cSrcweir             */
1028*cdf0e10cSrcweir 				Sequence < PropertyValue > aArgs;
1029*cdf0e10cSrcweir         		xDisp->dispatch( aURL, aArgs );
1030*cdf0e10cSrcweir 				m_aOpenURL = rtl::OUString();
1031*cdf0e10cSrcweir 			}
1032*cdf0e10cSrcweir 		}
1033*cdf0e10cSrcweir 	}
1034*cdf0e10cSrcweir }
1035*cdf0e10cSrcweir 
1036*cdf0e10cSrcweir void SvtFrameWindow_Impl::ToggleView( sal_Bool bDI )
1037*cdf0e10cSrcweir {
1038*cdf0e10cSrcweir 	bDocInfo = bDI;
1039*cdf0e10cSrcweir 
1040*cdf0e10cSrcweir 	// view is set properly in OpenFile()
1041*cdf0e10cSrcweir 
1042*cdf0e10cSrcweir 	OpenFile( aCurrentURL, sal_True, sal_False, sal_False );
1043*cdf0e10cSrcweir }
1044*cdf0e10cSrcweir 
1045*cdf0e10cSrcweir // class SvtTemplateWindow -----------------------------------------------
1046*cdf0e10cSrcweir 
1047*cdf0e10cSrcweir SvtTemplateWindow::SvtTemplateWindow( Window* pParent ) :
1048*cdf0e10cSrcweir 
1049*cdf0e10cSrcweir 	Window( pParent, WB_DIALOGCONTROL ),
1050*cdf0e10cSrcweir 
1051*cdf0e10cSrcweir 	aFileViewTB				( this, SvtResId( TB_SVT_FILEVIEW ) ),
1052*cdf0e10cSrcweir 	aFrameWinTB				( this, SvtResId( TB_SVT_FRAMEWIN ) ),
1053*cdf0e10cSrcweir 	aSplitWin				( this, WB_DIALOGCONTROL | WB_NOSPLITDRAW ),
1054*cdf0e10cSrcweir 	pHistoryList			( NULL )
1055*cdf0e10cSrcweir 
1056*cdf0e10cSrcweir {
1057*cdf0e10cSrcweir 	// create windows
1058*cdf0e10cSrcweir 	pIconWin = new SvtIconWindow_Impl( this );
1059*cdf0e10cSrcweir 	pFileWin = new SvtFileViewWindow_Impl( this );
1060*cdf0e10cSrcweir 	pFileWin->SetMyDocumentsURL( pIconWin->GetMyDocumentsRootURL() );
1061*cdf0e10cSrcweir 	pFileWin->SetSamplesFolderURL( pIconWin->GetSamplesFolderURL() );
1062*cdf0e10cSrcweir 	pFrameWin = new SvtFrameWindow_Impl( this );
1063*cdf0e10cSrcweir 
1064*cdf0e10cSrcweir 	// set handlers
1065*cdf0e10cSrcweir 	pIconWin->SetClickHdl( LINK( this, SvtTemplateWindow, IconClickHdl_Impl ) );
1066*cdf0e10cSrcweir 	pFileWin->SetSelectHdl( LINK( this, SvtTemplateWindow, FileSelectHdl_Impl ) );
1067*cdf0e10cSrcweir 	pFileWin->SetDoubleClickHdl( LINK( this, SvtTemplateWindow, FileDblClickHdl_Impl ) );
1068*cdf0e10cSrcweir 	pFileWin->SetNewFolderHdl( LINK( this, SvtTemplateWindow, NewFolderHdl_Impl ) );
1069*cdf0e10cSrcweir 
1070*cdf0e10cSrcweir 	// create the split items
1071*cdf0e10cSrcweir 	aSplitWin.SetAlign( WINDOWALIGN_LEFT );
1072*cdf0e10cSrcweir     long nWidth = pIconWin->GetMaxTextLength() * 8 / 7 + 1;	// extra space for border
1073*cdf0e10cSrcweir 	aSplitWin.InsertItem( ICONWIN_ID, pIconWin, nWidth, SPLITWINDOW_APPEND, 0, SWIB_FIXED );
1074*cdf0e10cSrcweir 	aSplitWin.InsertItem( FILEWIN_ID, pFileWin, 50, SPLITWINDOW_APPEND, 0, SWIB_PERCENTSIZE );
1075*cdf0e10cSrcweir 	aSplitWin.InsertItem( FRAMEWIN_ID, pFrameWin, 50, SPLITWINDOW_APPEND, 0, SWIB_PERCENTSIZE );
1076*cdf0e10cSrcweir 	aSplitWin.SetSplitHdl( LINK( this, SvtTemplateWindow, ResizeHdl_Impl ) );
1077*cdf0e10cSrcweir 
1078*cdf0e10cSrcweir 	// show the windows
1079*cdf0e10cSrcweir 	pIconWin->Show();
1080*cdf0e10cSrcweir 	pFileWin->Show();
1081*cdf0e10cSrcweir 	pFrameWin->Show();
1082*cdf0e10cSrcweir 	aSplitWin.Show();
1083*cdf0e10cSrcweir 
1084*cdf0e10cSrcweir 	// initialize the timers
1085*cdf0e10cSrcweir 	aSelectTimer.SetTimeout( 200 );
1086*cdf0e10cSrcweir 	aSelectTimer.SetTimeoutHdl( LINK( this, SvtTemplateWindow, TimeoutHdl_Impl ) );
1087*cdf0e10cSrcweir 
1088*cdf0e10cSrcweir 	// initialize the toolboxes and then show them
1089*cdf0e10cSrcweir 	InitToolBoxes();
1090*cdf0e10cSrcweir 	aFileViewTB.Show();
1091*cdf0e10cSrcweir 	aFrameWinTB.Show();
1092*cdf0e10cSrcweir 
1093*cdf0e10cSrcweir 	ReadViewSettings( );
1094*cdf0e10cSrcweir 
1095*cdf0e10cSrcweir 	Application::PostUserEvent( LINK( this, SvtTemplateWindow, ResizeHdl_Impl ) );
1096*cdf0e10cSrcweir }
1097*cdf0e10cSrcweir 
1098*cdf0e10cSrcweir // ------------------------------------------------------------------------
1099*cdf0e10cSrcweir 
1100*cdf0e10cSrcweir SvtTemplateWindow::~SvtTemplateWindow()
1101*cdf0e10cSrcweir {
1102*cdf0e10cSrcweir 	WriteViewSettings( );
1103*cdf0e10cSrcweir 
1104*cdf0e10cSrcweir 	delete pIconWin;
1105*cdf0e10cSrcweir 	delete pFileWin;
1106*cdf0e10cSrcweir 	delete pFrameWin;
1107*cdf0e10cSrcweir 	if ( pHistoryList )
1108*cdf0e10cSrcweir 	{
1109*cdf0e10cSrcweir 		for ( sal_uInt32 i = 0; i < pHistoryList->Count(); ++i )
1110*cdf0e10cSrcweir 			delete pHistoryList->GetObject(i);
1111*cdf0e10cSrcweir 		delete pHistoryList;
1112*cdf0e10cSrcweir 	}
1113*cdf0e10cSrcweir }
1114*cdf0e10cSrcweir 
1115*cdf0e10cSrcweir // ------------------------------------------------------------------------
1116*cdf0e10cSrcweir 
1117*cdf0e10cSrcweir IMPL_LINK ( SvtTemplateWindow , IconClickHdl_Impl, SvtIconChoiceCtrl *, EMPTYARG )
1118*cdf0e10cSrcweir {
1119*cdf0e10cSrcweir 	String aURL = pIconWin->GetSelectedIconURL();
1120*cdf0e10cSrcweir 	if ( !aURL.Len() )
1121*cdf0e10cSrcweir 		aURL = pIconWin->GetCursorPosIconURL();
1122*cdf0e10cSrcweir 	if ( pFileWin->GetRootURL() != aURL )
1123*cdf0e10cSrcweir 	{
1124*cdf0e10cSrcweir 		pFileWin->OpenRoot( aURL );
1125*cdf0e10cSrcweir 		pIconWin->InvalidateIconControl();
1126*cdf0e10cSrcweir 		aFileViewTB.EnableItem( TI_DOCTEMPLATE_PRINT, sal_False );
1127*cdf0e10cSrcweir 	}
1128*cdf0e10cSrcweir 	return 0;
1129*cdf0e10cSrcweir }
1130*cdf0e10cSrcweir 
1131*cdf0e10cSrcweir // ------------------------------------------------------------------------
1132*cdf0e10cSrcweir 
1133*cdf0e10cSrcweir IMPL_LINK ( SvtTemplateWindow , FileSelectHdl_Impl, SvtFileView *, EMPTYARG )
1134*cdf0e10cSrcweir {
1135*cdf0e10cSrcweir 	aSelectTimer.Start();
1136*cdf0e10cSrcweir 	return 0;
1137*cdf0e10cSrcweir }
1138*cdf0e10cSrcweir 
1139*cdf0e10cSrcweir // ------------------------------------------------------------------------
1140*cdf0e10cSrcweir 
1141*cdf0e10cSrcweir IMPL_LINK ( SvtTemplateWindow , FileDblClickHdl_Impl, SvtFileView *, EMPTYARG )
1142*cdf0e10cSrcweir {
1143*cdf0e10cSrcweir 	if ( aSelectTimer.IsActive() )
1144*cdf0e10cSrcweir 		aSelectTimer.Stop();
1145*cdf0e10cSrcweir 
1146*cdf0e10cSrcweir 	String aURL = pFileWin->GetSelectedFile();
1147*cdf0e10cSrcweir     if ( aURL.Len() > 0 )
1148*cdf0e10cSrcweir     {
1149*cdf0e10cSrcweir         if ( ::utl::UCBContentHelper::IsFolder( aURL ) )
1150*cdf0e10cSrcweir             pFileWin->OpenFolder( aURL );
1151*cdf0e10cSrcweir         else
1152*cdf0e10cSrcweir             aDoubleClickHdl.Call( this );
1153*cdf0e10cSrcweir     }
1154*cdf0e10cSrcweir 
1155*cdf0e10cSrcweir     return 0;
1156*cdf0e10cSrcweir }
1157*cdf0e10cSrcweir 
1158*cdf0e10cSrcweir // ------------------------------------------------------------------------
1159*cdf0e10cSrcweir 
1160*cdf0e10cSrcweir IMPL_LINK ( SvtTemplateWindow , NewFolderHdl_Impl, SvtFileView *, EMPTYARG )
1161*cdf0e10cSrcweir {
1162*cdf0e10cSrcweir 	pFrameWin->OpenFile( String(), sal_True, sal_False, sal_False );
1163*cdf0e10cSrcweir 	aFileViewTB.EnableItem( TI_DOCTEMPLATE_PRINT, sal_False );
1164*cdf0e10cSrcweir 
1165*cdf0e10cSrcweir 	String sURL = pFileWin->GetFolderURL();
1166*cdf0e10cSrcweir 	sal_uLong nPos = pIconWin->GetRootPos( sURL );
1167*cdf0e10cSrcweir 	AppendHistoryURL( sURL, nPos );
1168*cdf0e10cSrcweir 
1169*cdf0e10cSrcweir 	aNewFolderHdl.Call( this );
1170*cdf0e10cSrcweir 	return 0;
1171*cdf0e10cSrcweir }
1172*cdf0e10cSrcweir 
1173*cdf0e10cSrcweir // ------------------------------------------------------------------------
1174*cdf0e10cSrcweir 
1175*cdf0e10cSrcweir IMPL_LINK ( SvtTemplateWindow , TimeoutHdl_Impl, Timer *, EMPTYARG )
1176*cdf0e10cSrcweir {
1177*cdf0e10cSrcweir     aSelectHdl.Call( this );
1178*cdf0e10cSrcweir     String sURL = pFileWin->GetSelectedFile();
1179*cdf0e10cSrcweir     sal_Bool bIsNewDoc = ( pIconWin->GetSelectEntryPos() == ICON_POS_NEWDOC );
1180*cdf0e10cSrcweir     sal_Bool bIsFile = ( sURL.Len() != 0 && !::utl::UCBContentHelper::IsFolder( sURL ) &&
1181*cdf0e10cSrcweir                          INetURLObject( sURL ).GetProtocol() != INET_PROT_PRIVATE && !bIsNewDoc );
1182*cdf0e10cSrcweir     aFileViewTB.EnableItem( TI_DOCTEMPLATE_PRINT, bIsFile );
1183*cdf0e10cSrcweir     aFrameWinTB.EnableItem( TI_DOCTEMPLATE_PREVIEW, !bIsNewDoc );
1184*cdf0e10cSrcweir 
1185*cdf0e10cSrcweir     if ( bIsFile )
1186*cdf0e10cSrcweir         pFrameWin->OpenFile( sURL, sal_True, sal_False, sal_False );
1187*cdf0e10cSrcweir     else if ( bIsNewDoc && aFrameWinTB.IsItemChecked( TI_DOCTEMPLATE_PREVIEW ) )
1188*cdf0e10cSrcweir     {
1189*cdf0e10cSrcweir         aFrameWinTB.CheckItem( TI_DOCTEMPLATE_DOCINFO );
1190*cdf0e10cSrcweir         DoAction( TI_DOCTEMPLATE_DOCINFO );
1191*cdf0e10cSrcweir     }
1192*cdf0e10cSrcweir     return 0;
1193*cdf0e10cSrcweir }
1194*cdf0e10cSrcweir 
1195*cdf0e10cSrcweir // ------------------------------------------------------------------------
1196*cdf0e10cSrcweir 
1197*cdf0e10cSrcweir IMPL_LINK ( SvtTemplateWindow , ClickHdl_Impl, ToolBox *, pToolBox )
1198*cdf0e10cSrcweir {
1199*cdf0e10cSrcweir 	DoAction( pToolBox->GetCurItemId() );
1200*cdf0e10cSrcweir 	return 0;
1201*cdf0e10cSrcweir }
1202*cdf0e10cSrcweir 
1203*cdf0e10cSrcweir // ------------------------------------------------------------------------
1204*cdf0e10cSrcweir 
1205*cdf0e10cSrcweir IMPL_LINK ( SvtTemplateWindow , ResizeHdl_Impl, SplitWindow *, EMPTYARG )
1206*cdf0e10cSrcweir {
1207*cdf0e10cSrcweir 	Resize();
1208*cdf0e10cSrcweir 	return 0;
1209*cdf0e10cSrcweir }
1210*cdf0e10cSrcweir 
1211*cdf0e10cSrcweir // ------------------------------------------------------------------------
1212*cdf0e10cSrcweir 
1213*cdf0e10cSrcweir void SvtTemplateWindow::PrintFile( const String& rURL )
1214*cdf0e10cSrcweir {
1215*cdf0e10cSrcweir 	// open the file readonly and hidden
1216*cdf0e10cSrcweir 	Sequence < PropertyValue > aArgs( 2 );
1217*cdf0e10cSrcweir     aArgs[0].Name = ASCII_STR("ReadOnly");
1218*cdf0e10cSrcweir     aArgs[0].Value <<= sal_True;
1219*cdf0e10cSrcweir 	aArgs[1].Name = ASCII_STR("Hidden");
1220*cdf0e10cSrcweir     aArgs[1].Value <<= sal_True;
1221*cdf0e10cSrcweir 
1222*cdf0e10cSrcweir 	Reference < XComponentLoader > xDesktop( ::comphelper::getProcessServiceFactory()->
1223*cdf0e10cSrcweir 		createInstance( ASCII_STR("com.sun.star.frame.Desktop") ), UNO_QUERY );
1224*cdf0e10cSrcweir     Reference < XModel > xModel( xDesktop->loadComponentFromURL(
1225*cdf0e10cSrcweir 		rURL, ASCII_STR("_blank"), 0, aArgs ), UNO_QUERY );
1226*cdf0e10cSrcweir     if ( xModel.is() )
1227*cdf0e10cSrcweir 	{
1228*cdf0e10cSrcweir 		// print
1229*cdf0e10cSrcweir     	Reference < XPrintable > xPrintable( xModel, UNO_QUERY );
1230*cdf0e10cSrcweir 		if ( xPrintable.is() )
1231*cdf0e10cSrcweir 			xPrintable->print( Sequence < PropertyValue >() );
1232*cdf0e10cSrcweir 	}
1233*cdf0e10cSrcweir }
1234*cdf0e10cSrcweir 
1235*cdf0e10cSrcweir // ------------------------------------------------------------------------
1236*cdf0e10cSrcweir 
1237*cdf0e10cSrcweir void SvtTemplateWindow::AppendHistoryURL( const String& rURL, sal_uLong nGroup )
1238*cdf0e10cSrcweir {
1239*cdf0e10cSrcweir 	sal_Bool bInsert = sal_True;
1240*cdf0e10cSrcweir 	if ( !pHistoryList )
1241*cdf0e10cSrcweir 		pHistoryList = new HistoryList_Impl;
1242*cdf0e10cSrcweir 	else if ( pHistoryList->Count() > 0 )
1243*cdf0e10cSrcweir 	{
1244*cdf0e10cSrcweir 		FolderHistory* pLastEntry = pHistoryList->GetObject( pHistoryList->Count() - 1 );
1245*cdf0e10cSrcweir 		bInsert = ( rURL != pLastEntry->m_sURL);
1246*cdf0e10cSrcweir 	}
1247*cdf0e10cSrcweir 
1248*cdf0e10cSrcweir 	if ( bInsert )
1249*cdf0e10cSrcweir 	{
1250*cdf0e10cSrcweir 		FolderHistory* pEntry = new FolderHistory( rURL, nGroup );
1251*cdf0e10cSrcweir 		pHistoryList->Insert( pEntry, LIST_APPEND );
1252*cdf0e10cSrcweir 		aFileViewTB.EnableItem( TI_DOCTEMPLATE_BACK, pHistoryList->Count() > 1 );
1253*cdf0e10cSrcweir 	}
1254*cdf0e10cSrcweir }
1255*cdf0e10cSrcweir 
1256*cdf0e10cSrcweir // ------------------------------------------------------------------------
1257*cdf0e10cSrcweir 
1258*cdf0e10cSrcweir void SvtTemplateWindow::OpenHistory()
1259*cdf0e10cSrcweir {
1260*cdf0e10cSrcweir 	FolderHistory* pEntry = pHistoryList->Remove( pHistoryList->Count() - 1 );
1261*cdf0e10cSrcweir 	pEntry = pHistoryList->Remove( pHistoryList->Count() - 1 );
1262*cdf0e10cSrcweir 	aFileViewTB.EnableItem( TI_DOCTEMPLATE_BACK, pHistoryList->Count() > 1 );
1263*cdf0e10cSrcweir 	pFileWin->OpenFolder( pEntry->m_sURL );
1264*cdf0e10cSrcweir 	pIconWin->SetCursorPos( pEntry->m_nGroup );
1265*cdf0e10cSrcweir 	delete pEntry;
1266*cdf0e10cSrcweir }
1267*cdf0e10cSrcweir 
1268*cdf0e10cSrcweir // ------------------------------------------------------------------------
1269*cdf0e10cSrcweir 
1270*cdf0e10cSrcweir void SvtTemplateWindow::DoAction( sal_uInt16 nAction )
1271*cdf0e10cSrcweir {
1272*cdf0e10cSrcweir 	switch( nAction )
1273*cdf0e10cSrcweir 	{
1274*cdf0e10cSrcweir 		case TI_DOCTEMPLATE_BACK :
1275*cdf0e10cSrcweir 		{
1276*cdf0e10cSrcweir 			if ( pHistoryList && pHistoryList->Count() > 1 )
1277*cdf0e10cSrcweir 				OpenHistory();
1278*cdf0e10cSrcweir 			break;
1279*cdf0e10cSrcweir 		}
1280*cdf0e10cSrcweir 
1281*cdf0e10cSrcweir 		case TI_DOCTEMPLATE_PREV :
1282*cdf0e10cSrcweir 		{
1283*cdf0e10cSrcweir 			String aURL;
1284*cdf0e10cSrcweir 			if ( pFileWin->HasPreviousLevel( aURL ) )
1285*cdf0e10cSrcweir 				pFileWin->OpenFolder( aURL );
1286*cdf0e10cSrcweir 			break;
1287*cdf0e10cSrcweir 		}
1288*cdf0e10cSrcweir 
1289*cdf0e10cSrcweir 		case TI_DOCTEMPLATE_PRINT :
1290*cdf0e10cSrcweir 		{
1291*cdf0e10cSrcweir 			String sPrintFile( pFileWin->GetSelectedFile() );
1292*cdf0e10cSrcweir 			if ( sPrintFile.Len() > 0 )
1293*cdf0e10cSrcweir 				PrintFile( sPrintFile );
1294*cdf0e10cSrcweir 			break;
1295*cdf0e10cSrcweir 		}
1296*cdf0e10cSrcweir 
1297*cdf0e10cSrcweir 		case TI_DOCTEMPLATE_DOCINFO :
1298*cdf0e10cSrcweir 		case TI_DOCTEMPLATE_PREVIEW :
1299*cdf0e10cSrcweir 		{
1300*cdf0e10cSrcweir 			pFrameWin->ToggleView( TI_DOCTEMPLATE_DOCINFO == nAction );
1301*cdf0e10cSrcweir 			break;
1302*cdf0e10cSrcweir 		}
1303*cdf0e10cSrcweir 	}
1304*cdf0e10cSrcweir }
1305*cdf0e10cSrcweir 
1306*cdf0e10cSrcweir // ------------------------------------------------------------------------
1307*cdf0e10cSrcweir 
1308*cdf0e10cSrcweir void SvtTemplateWindow::InitToolBoxes()
1309*cdf0e10cSrcweir {
1310*cdf0e10cSrcweir 	InitToolBoxImages();
1311*cdf0e10cSrcweir 
1312*cdf0e10cSrcweir 	Size aSize = aFileViewTB.CalcWindowSizePixel();
1313*cdf0e10cSrcweir 	aSize.Height() += 4;
1314*cdf0e10cSrcweir 	aFileViewTB.SetPosSizePixel( Point( 0, 2 ), aSize );
1315*cdf0e10cSrcweir 	aSize = aFrameWinTB.CalcWindowSizePixel();
1316*cdf0e10cSrcweir 	aSize.Height() += 4;
1317*cdf0e10cSrcweir 	aFrameWinTB.SetPosSizePixel( Point( pFrameWin->GetPosPixel().X() + 2, 2 ), aSize );
1318*cdf0e10cSrcweir 
1319*cdf0e10cSrcweir 	sal_Bool bFlat = ( SvtMiscOptions().GetToolboxStyle() == TOOLBOX_STYLE_FLAT );
1320*cdf0e10cSrcweir 	if ( bFlat )
1321*cdf0e10cSrcweir 	{
1322*cdf0e10cSrcweir 		aFileViewTB.SetOutStyle( TOOLBOX_STYLE_FLAT );
1323*cdf0e10cSrcweir 		aFrameWinTB.SetOutStyle( TOOLBOX_STYLE_FLAT );
1324*cdf0e10cSrcweir 	}
1325*cdf0e10cSrcweir 
1326*cdf0e10cSrcweir 	aFileViewTB.EnableItem( TI_DOCTEMPLATE_BACK, sal_False );
1327*cdf0e10cSrcweir 	aFileViewTB.EnableItem( TI_DOCTEMPLATE_PREV, sal_False );
1328*cdf0e10cSrcweir 	aFileViewTB.EnableItem( TI_DOCTEMPLATE_PRINT, sal_False );
1329*cdf0e10cSrcweir 
1330*cdf0e10cSrcweir 	Link aLink = LINK( this, SvtTemplateWindow, ClickHdl_Impl );
1331*cdf0e10cSrcweir 	aFileViewTB.SetClickHdl( aLink );
1332*cdf0e10cSrcweir 	aFrameWinTB.SetClickHdl( aLink );
1333*cdf0e10cSrcweir }
1334*cdf0e10cSrcweir 
1335*cdf0e10cSrcweir // ------------------------------------------------------------------------
1336*cdf0e10cSrcweir 
1337*cdf0e10cSrcweir void SvtTemplateWindow::InitToolBoxImages()
1338*cdf0e10cSrcweir {
1339*cdf0e10cSrcweir 	SvtMiscOptions aMiscOpt;
1340*cdf0e10cSrcweir 	sal_Bool bLarge = aMiscOpt.AreCurrentSymbolsLarge();
1341*cdf0e10cSrcweir 	sal_Bool bHiContrast = aFileViewTB.GetSettings().GetStyleSettings().GetHighContrastMode();
1342*cdf0e10cSrcweir 
1343*cdf0e10cSrcweir 	aFileViewTB.SetItemImage( TI_DOCTEMPLATE_BACK, Image( SvtResId(
1344*cdf0e10cSrcweir 		bLarge ? bHiContrast ? IMG_SVT_DOCTEMPL_HC_BACK_LARGE : IMG_SVT_DOCTEMPLATE_BACK_LARGE
1345*cdf0e10cSrcweir 			   : bHiContrast ? IMG_SVT_DOCTEMPL_HC_BACK_SMALL : IMG_SVT_DOCTEMPLATE_BACK_SMALL ) ) );
1346*cdf0e10cSrcweir 	aFileViewTB.SetItemImage( TI_DOCTEMPLATE_PREV, Image( SvtResId(
1347*cdf0e10cSrcweir 		bLarge ? bHiContrast ? IMG_SVT_DOCTEMPL_HC_PREV_LARGE : IMG_SVT_DOCTEMPLATE_PREV_LARGE
1348*cdf0e10cSrcweir 			   : bHiContrast ? IMG_SVT_DOCTEMPL_HC_PREV_SMALL : IMG_SVT_DOCTEMPLATE_PREV_SMALL ) ) );
1349*cdf0e10cSrcweir 	aFileViewTB.SetItemImage( TI_DOCTEMPLATE_PRINT, Image( SvtResId(
1350*cdf0e10cSrcweir 		bLarge ? bHiContrast ? IMG_SVT_DOCTEMPL_HC_PRINT_LARGE : IMG_SVT_DOCTEMPLATE_PRINT_LARGE
1351*cdf0e10cSrcweir 			   : bHiContrast ? IMG_SVT_DOCTEMPL_HC_PRINT_SMALL : IMG_SVT_DOCTEMPLATE_PRINT_SMALL ) ) );
1352*cdf0e10cSrcweir 
1353*cdf0e10cSrcweir 	aFrameWinTB.SetItemImage( TI_DOCTEMPLATE_DOCINFO, Image( SvtResId(
1354*cdf0e10cSrcweir 		bLarge ? bHiContrast ? IMG_SVT_DOCTEMPL_HC_DOCINFO_LARGE : IMG_SVT_DOCTEMPLATE_DOCINFO_LARGE
1355*cdf0e10cSrcweir 			   : bHiContrast ? IMG_SVT_DOCTEMPL_HC_DOCINFO_SMALL : IMG_SVT_DOCTEMPLATE_DOCINFO_SMALL ) ) );
1356*cdf0e10cSrcweir 	aFrameWinTB.SetItemImage( TI_DOCTEMPLATE_PREVIEW, Image( SvtResId(
1357*cdf0e10cSrcweir 		bLarge ? bHiContrast ? IMG_SVT_DOCTEMPL_HC_PREVIEW_LARGE : IMG_SVT_DOCTEMPLATE_PREVIEW_LARGE
1358*cdf0e10cSrcweir 			   : bHiContrast ? IMG_SVT_DOCTEMPL_HC_PREVIEW_SMALL : IMG_SVT_DOCTEMPLATE_PREVIEW_SMALL ) ) );
1359*cdf0e10cSrcweir }
1360*cdf0e10cSrcweir 
1361*cdf0e10cSrcweir // ------------------------------------------------------------------------
1362*cdf0e10cSrcweir 
1363*cdf0e10cSrcweir void SvtTemplateWindow::UpdateIcons()
1364*cdf0e10cSrcweir {
1365*cdf0e10cSrcweir 	pIconWin->UpdateIcons( aFileViewTB.GetSettings().GetStyleSettings().GetHighContrastMode() );
1366*cdf0e10cSrcweir }
1367*cdf0e10cSrcweir 
1368*cdf0e10cSrcweir // ------------------------------------------------------------------------
1369*cdf0e10cSrcweir 
1370*cdf0e10cSrcweir long SvtTemplateWindow::PreNotify( NotifyEvent& rNEvt )
1371*cdf0e10cSrcweir {
1372*cdf0e10cSrcweir 	sal_uInt16 nType = rNEvt.GetType();
1373*cdf0e10cSrcweir 	long nRet = 0;
1374*cdf0e10cSrcweir 
1375*cdf0e10cSrcweir 	if ( EVENT_KEYINPUT == nType && rNEvt.GetKeyEvent() )
1376*cdf0e10cSrcweir 	{
1377*cdf0e10cSrcweir 		const KeyCode& rKeyCode = rNEvt.GetKeyEvent()->GetKeyCode();
1378*cdf0e10cSrcweir 		sal_uInt16 nCode = rKeyCode.GetCode();
1379*cdf0e10cSrcweir 
1380*cdf0e10cSrcweir 		if ( KEY_BACKSPACE == nCode && !rKeyCode.GetModifier() && pFileWin->HasChildPathFocus() )
1381*cdf0e10cSrcweir 		{
1382*cdf0e10cSrcweir 			DoAction( TI_DOCTEMPLATE_BACK );
1383*cdf0e10cSrcweir 			nRet = 1;
1384*cdf0e10cSrcweir 		}
1385*cdf0e10cSrcweir 		else if ( pIconWin->ProcessKeyEvent( *rNEvt.GetKeyEvent() ) )
1386*cdf0e10cSrcweir 		{
1387*cdf0e10cSrcweir 			nRet = 1;
1388*cdf0e10cSrcweir 		}
1389*cdf0e10cSrcweir 	}
1390*cdf0e10cSrcweir 
1391*cdf0e10cSrcweir 	return nRet ? nRet : Window::PreNotify( rNEvt );
1392*cdf0e10cSrcweir }
1393*cdf0e10cSrcweir 
1394*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1395*cdf0e10cSrcweir 
1396*cdf0e10cSrcweir void SvtTemplateWindow::DataChanged( const DataChangedEvent& rDCEvt )
1397*cdf0e10cSrcweir {
1398*cdf0e10cSrcweir 	Window::DataChanged( rDCEvt );
1399*cdf0e10cSrcweir 
1400*cdf0e10cSrcweir 	if ( ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS )	||
1401*cdf0e10cSrcweir 		   ( rDCEvt.GetType() == DATACHANGED_DISPLAY ) ) &&
1402*cdf0e10cSrcweir 		 ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
1403*cdf0e10cSrcweir 	{
1404*cdf0e10cSrcweir 		// update of the background for the area left of the FileView toolbox
1405*cdf0e10cSrcweir 		SetBackground( Wallpaper( GetSettings().GetStyleSettings().GetFaceColor() ) );
1406*cdf0e10cSrcweir 		// update of the images of the IconChoiceControl
1407*cdf0e10cSrcweir 		UpdateIcons();
1408*cdf0e10cSrcweir 		// update of the toolbox images
1409*cdf0e10cSrcweir 		InitToolBoxImages();
1410*cdf0e10cSrcweir 	}
1411*cdf0e10cSrcweir }
1412*cdf0e10cSrcweir // ------------------------------------------------------------------------
1413*cdf0e10cSrcweir 
1414*cdf0e10cSrcweir void SvtTemplateWindow::Resize()
1415*cdf0e10cSrcweir {
1416*cdf0e10cSrcweir 	long nItemSize = aSplitWin.GetItemSize( ICONWIN_ID );
1417*cdf0e10cSrcweir 	long nSplitterWidth = Splitter( this, 0 ).GetSizePixel().Width();
1418*cdf0e10cSrcweir 
1419*cdf0e10cSrcweir 	Point aPos = aFileViewTB.GetPosPixel();
1420*cdf0e10cSrcweir 	aPos.X() = nItemSize + nSplitterWidth / 2;
1421*cdf0e10cSrcweir 	aFileViewTB.SetPosPixel( aPos );
1422*cdf0e10cSrcweir 
1423*cdf0e10cSrcweir 	Size aWinSize = GetOutputSizePixel();
1424*cdf0e10cSrcweir 	long nWidth = aWinSize.Width() - aPos.X();
1425*cdf0e10cSrcweir 
1426*cdf0e10cSrcweir 	nItemSize = nWidth * aSplitWin.GetItemSize( FILEWIN_ID ) / 100;
1427*cdf0e10cSrcweir 	aPos.X() = pFrameWin->GetPosPixel().X() + 2;
1428*cdf0e10cSrcweir 	aFrameWinTB.SetPosPixel( aPos );
1429*cdf0e10cSrcweir 
1430*cdf0e10cSrcweir 	Size aSize = aFileViewTB.GetSizePixel();
1431*cdf0e10cSrcweir 	aSize.Width() = nItemSize;
1432*cdf0e10cSrcweir 	aFileViewTB.SetSizePixel( aSize );
1433*cdf0e10cSrcweir 
1434*cdf0e10cSrcweir 	aSize = aFrameWinTB.GetSizePixel();
1435*cdf0e10cSrcweir 	aSize.Width() = nWidth - nItemSize;
1436*cdf0e10cSrcweir 	aFrameWinTB.SetSizePixel( aSize );
1437*cdf0e10cSrcweir 
1438*cdf0e10cSrcweir 	long nToolBoxHeight = aSize.Height() + aFrameWinTB.GetPosPixel().Y();
1439*cdf0e10cSrcweir 	aSize = aWinSize;
1440*cdf0e10cSrcweir 	aSize.Height() -= nToolBoxHeight;
1441*cdf0e10cSrcweir 	aSplitWin.SetPosSizePixel( Point( 0, nToolBoxHeight  ), aSize );
1442*cdf0e10cSrcweir }
1443*cdf0e10cSrcweir 
1444*cdf0e10cSrcweir // ------------------------------------------------------------------------
1445*cdf0e10cSrcweir 
1446*cdf0e10cSrcweir String SvtTemplateWindow::GetSelectedFile() const
1447*cdf0e10cSrcweir {
1448*cdf0e10cSrcweir 	return pFileWin->GetSelectedFile();
1449*cdf0e10cSrcweir }
1450*cdf0e10cSrcweir 
1451*cdf0e10cSrcweir // ------------------------------------------------------------------------
1452*cdf0e10cSrcweir 
1453*cdf0e10cSrcweir sal_Bool SvtTemplateWindow::IsFileSelected() const
1454*cdf0e10cSrcweir {
1455*cdf0e10cSrcweir 	String aURL = pFileWin->GetSelectedFile();
1456*cdf0e10cSrcweir 	sal_Bool bRet = ( aURL.Len() > 0 && !::utl::UCBContentHelper::IsFolder( aURL ) );
1457*cdf0e10cSrcweir 	return bRet;
1458*cdf0e10cSrcweir }
1459*cdf0e10cSrcweir 
1460*cdf0e10cSrcweir // ------------------------------------------------------------------------
1461*cdf0e10cSrcweir 
1462*cdf0e10cSrcweir void SvtTemplateWindow::OpenFile( sal_Bool bNotAsTemplate )
1463*cdf0e10cSrcweir {
1464*cdf0e10cSrcweir 	String aURL = pFileWin->GetSelectedFile();
1465*cdf0e10cSrcweir 	if ( aURL.Len() > 0 && !::utl::UCBContentHelper::IsFolder( aURL ) )
1466*cdf0e10cSrcweir 		pFrameWin->OpenFile( aURL, sal_False, pFileWin->IsTemplateFolder(), !bNotAsTemplate );
1467*cdf0e10cSrcweir }
1468*cdf0e10cSrcweir 
1469*cdf0e10cSrcweir // ------------------------------------------------------------------------
1470*cdf0e10cSrcweir 
1471*cdf0e10cSrcweir String SvtTemplateWindow::GetFolderTitle() const
1472*cdf0e10cSrcweir {
1473*cdf0e10cSrcweir 	String sTitle;
1474*cdf0e10cSrcweir 	String sFolderURL = pFileWin->GetFolderURL();
1475*cdf0e10cSrcweir 	if ( pIconWin->IsRootURL( sFolderURL ) )
1476*cdf0e10cSrcweir 		sTitle = pIconWin->GetIconText( sFolderURL );
1477*cdf0e10cSrcweir 	else
1478*cdf0e10cSrcweir 		sTitle = pFileWin->GetFolderTitle();
1479*cdf0e10cSrcweir 	return sTitle;
1480*cdf0e10cSrcweir }
1481*cdf0e10cSrcweir 
1482*cdf0e10cSrcweir // ------------------------------------------------------------------------
1483*cdf0e10cSrcweir 
1484*cdf0e10cSrcweir String SvtTemplateWindow::GetFolderURL() const
1485*cdf0e10cSrcweir {
1486*cdf0e10cSrcweir 	return pFileWin->GetFolderURL();
1487*cdf0e10cSrcweir }
1488*cdf0e10cSrcweir 
1489*cdf0e10cSrcweir 
1490*cdf0e10cSrcweir // ------------------------------------------------------------------------
1491*cdf0e10cSrcweir 
1492*cdf0e10cSrcweir void SvtTemplateWindow::SetFocus( sal_Bool bIconWin )
1493*cdf0e10cSrcweir {
1494*cdf0e10cSrcweir 	if ( bIconWin )
1495*cdf0e10cSrcweir 		pIconWin->SetFocus();
1496*cdf0e10cSrcweir 	else
1497*cdf0e10cSrcweir 		pFileWin->SetFocus();
1498*cdf0e10cSrcweir }
1499*cdf0e10cSrcweir 
1500*cdf0e10cSrcweir // ------------------------------------------------------------------------
1501*cdf0e10cSrcweir 
1502*cdf0e10cSrcweir void SvtTemplateWindow::OpenTemplateRoot()
1503*cdf0e10cSrcweir {
1504*cdf0e10cSrcweir 	pFileWin->OpenFolder( pIconWin->GetTemplateRootURL() );
1505*cdf0e10cSrcweir }
1506*cdf0e10cSrcweir 
1507*cdf0e10cSrcweir // ------------------------------------------------------------------------
1508*cdf0e10cSrcweir 
1509*cdf0e10cSrcweir void SvtTemplateWindow::SetPrevLevelButtonState( const String& rURL )
1510*cdf0e10cSrcweir {
1511*cdf0e10cSrcweir 	// disable the prev level button on root folder of the icon pane (except My Documents)
1512*cdf0e10cSrcweir 	// and on the root of all (file:/// -> count == 0)
1513*cdf0e10cSrcweir 	INetURLObject aObj( rURL );
1514*cdf0e10cSrcweir 	sal_Int32 nCount = aObj.getSegmentCount();
1515*cdf0e10cSrcweir 	sal_Bool bEnable =
1516*cdf0e10cSrcweir 		( nCount > 0 &&
1517*cdf0e10cSrcweir 			( !pIconWin->IsRootURL( rURL ) || rURL == pIconWin->GetMyDocumentsRootURL() ) );
1518*cdf0e10cSrcweir 	aFileViewTB.EnableItem( TI_DOCTEMPLATE_PREV, bEnable );
1519*cdf0e10cSrcweir }
1520*cdf0e10cSrcweir 
1521*cdf0e10cSrcweir // ------------------------------------------------------------------------
1522*cdf0e10cSrcweir 
1523*cdf0e10cSrcweir void SvtTemplateWindow::ClearHistory()
1524*cdf0e10cSrcweir {
1525*cdf0e10cSrcweir 	if( pHistoryList )
1526*cdf0e10cSrcweir 		pHistoryList->Clear();
1527*cdf0e10cSrcweir }
1528*cdf0e10cSrcweir 
1529*cdf0e10cSrcweir // ------------------------------------------------------------------------
1530*cdf0e10cSrcweir 
1531*cdf0e10cSrcweir long SvtTemplateWindow::CalcHeight() const
1532*cdf0e10cSrcweir {
1533*cdf0e10cSrcweir 	// toolbox height
1534*cdf0e10cSrcweir 	long nHeight = aFileViewTB.GetSizePixel().Height();
1535*cdf0e10cSrcweir 	// + iconwin height
1536*cdf0e10cSrcweir 	nHeight += pIconWin->CalcHeight();
1537*cdf0e10cSrcweir 	// + little offset
1538*cdf0e10cSrcweir 	nHeight += 8;
1539*cdf0e10cSrcweir 	return nHeight;
1540*cdf0e10cSrcweir }
1541*cdf0e10cSrcweir 
1542*cdf0e10cSrcweir // ------------------------------------------------------------------------
1543*cdf0e10cSrcweir 
1544*cdf0e10cSrcweir void SvtTemplateWindow::ReadViewSettings()
1545*cdf0e10cSrcweir {
1546*cdf0e10cSrcweir 	// defaults
1547*cdf0e10cSrcweir 	sal_Int32 nSelectedGroup	=	ICON_POS_TEMPLATES;
1548*cdf0e10cSrcweir 	sal_Int32 nSelectedView		=	TI_DOCTEMPLATE_DOCINFO;
1549*cdf0e10cSrcweir 	double nSplitRatio			=	0.5;
1550*cdf0e10cSrcweir 	::rtl::OUString sLastFolder;
1551*cdf0e10cSrcweir 
1552*cdf0e10cSrcweir 	SvtViewOptions aViewSettings( E_DIALOG, VIEWSETTING_NEWFROMTEMPLATE );
1553*cdf0e10cSrcweir 	if ( aViewSettings.Exists() )
1554*cdf0e10cSrcweir 	{
1555*cdf0e10cSrcweir 		// read the settings
1556*cdf0e10cSrcweir 		Sequence< NamedValue > aSettings = aViewSettings.GetUserData( );
1557*cdf0e10cSrcweir 
1558*cdf0e10cSrcweir 		aViewSettings.GetUserItem( VIEWSETTING_SELECTEDGROUP ) >>= nSelectedGroup;
1559*cdf0e10cSrcweir 		aViewSettings.GetUserItem( VIEWSETTING_SELECTEDVIEW ) >>= nSelectedView;
1560*cdf0e10cSrcweir 		aViewSettings.GetUserItem( VIEWSETTING_SPLITRATIO ) >>= nSplitRatio;
1561*cdf0e10cSrcweir 		aViewSettings.GetUserItem( VIEWSETTING_LASTFOLDER ) >>= sLastFolder;
1562*cdf0e10cSrcweir 	}
1563*cdf0e10cSrcweir 	// normalize
1564*cdf0e10cSrcweir 	if ( nSelectedGroup < ICON_POS_NEWDOC )		nSelectedGroup = ICON_POS_NEWDOC;
1565*cdf0e10cSrcweir 	if ( nSelectedGroup > ICON_POS_SAMPLES )	nSelectedGroup = ICON_POS_SAMPLES;
1566*cdf0e10cSrcweir 
1567*cdf0e10cSrcweir 	if ( ( TI_DOCTEMPLATE_DOCINFO != nSelectedView ) && ( TI_DOCTEMPLATE_PREVIEW != nSelectedView ) )
1568*cdf0e10cSrcweir 		nSelectedView = TI_DOCTEMPLATE_DOCINFO;
1569*cdf0e10cSrcweir 
1570*cdf0e10cSrcweir 	if ( nSplitRatio < 0.2 ) nSplitRatio = 0.2;
1571*cdf0e10cSrcweir 	if ( nSplitRatio > 0.8 ) nSplitRatio = 0.8;
1572*cdf0e10cSrcweir 
1573*cdf0e10cSrcweir 	// change our view according to the settings
1574*cdf0e10cSrcweir 
1575*cdf0e10cSrcweir 	// the selected view (details or preview)
1576*cdf0e10cSrcweir 	pFrameWin->ToggleView( TI_DOCTEMPLATE_DOCINFO == nSelectedView );
1577*cdf0e10cSrcweir 	aFrameWinTB.CheckItem( (sal_uInt16)nSelectedView, sal_True );
1578*cdf0e10cSrcweir 
1579*cdf0e10cSrcweir 	// the split ratio
1580*cdf0e10cSrcweir 	sal_Int32 nSplitFileAndFrameSize = aSplitWin.GetItemSize( FILEWIN_ID ) + aSplitWin.GetItemSize( FRAMEWIN_ID );
1581*cdf0e10cSrcweir 	sal_Int32 nSplitFileSize = (sal_Int32)(nSplitFileAndFrameSize * nSplitRatio);
1582*cdf0e10cSrcweir 	sal_Int32 nSplitFrameSize = nSplitFileAndFrameSize - nSplitFileSize;
1583*cdf0e10cSrcweir 	aSplitWin.SetItemSize( FILEWIN_ID, nSplitFileSize );
1584*cdf0e10cSrcweir 	aSplitWin.SetItemSize( FRAMEWIN_ID, nSplitFrameSize );
1585*cdf0e10cSrcweir 	Resize();
1586*cdf0e10cSrcweir 
1587*cdf0e10cSrcweir 	// the selected folder
1588*cdf0e10cSrcweir 	pIconWin->SetCursorPos( nSelectedGroup );
1589*cdf0e10cSrcweir 
1590*cdf0e10cSrcweir 	// open the last folder or the selected group
1591*cdf0e10cSrcweir 	if ( sLastFolder.getLength() > 0 )
1592*cdf0e10cSrcweir 		pFileWin->OpenFolder( sLastFolder );
1593*cdf0e10cSrcweir 	else
1594*cdf0e10cSrcweir 		IconClickHdl_Impl( NULL );
1595*cdf0e10cSrcweir }
1596*cdf0e10cSrcweir 
1597*cdf0e10cSrcweir // ------------------------------------------------------------------------
1598*cdf0e10cSrcweir 
1599*cdf0e10cSrcweir void SvtTemplateWindow::WriteViewSettings()
1600*cdf0e10cSrcweir {
1601*cdf0e10cSrcweir 	// collect
1602*cdf0e10cSrcweir 	Sequence< NamedValue > aSettings(4);
1603*cdf0e10cSrcweir 
1604*cdf0e10cSrcweir 	// the selected group
1605*cdf0e10cSrcweir 	aSettings[0].Name	=	VIEWSETTING_SELECTEDGROUP;
1606*cdf0e10cSrcweir 	pIconWin->SetFocus();
1607*cdf0e10cSrcweir 	aSettings[0].Value	<<=	(sal_Int32)pIconWin->GetCursorPos( );
1608*cdf0e10cSrcweir 
1609*cdf0e10cSrcweir 	// the selected view mode
1610*cdf0e10cSrcweir 	aSettings[1].Name	=	VIEWSETTING_SELECTEDVIEW;
1611*cdf0e10cSrcweir 	aSettings[1].Value	<<=	sal_Int32( aFrameWinTB.IsItemChecked( TI_DOCTEMPLATE_DOCINFO ) ? TI_DOCTEMPLATE_DOCINFO : TI_DOCTEMPLATE_PREVIEW );
1612*cdf0e10cSrcweir 
1613*cdf0e10cSrcweir 	// the split ratio
1614*cdf0e10cSrcweir 	aSettings[2].Name	=	VIEWSETTING_SPLITRATIO;
1615*cdf0e10cSrcweir 	sal_Int32 nSplitFileSize = aSplitWin.GetItemSize( FILEWIN_ID );
1616*cdf0e10cSrcweir 	sal_Int32 nSplitFileAndFrameSize = nSplitFileSize + aSplitWin.GetItemSize( FRAMEWIN_ID );
1617*cdf0e10cSrcweir 	aSettings[2].Value	<<=	double( 1.0 * nSplitFileSize / nSplitFileAndFrameSize );
1618*cdf0e10cSrcweir 
1619*cdf0e10cSrcweir 	// last folder
1620*cdf0e10cSrcweir 	aSettings[3].Name	=	VIEWSETTING_LASTFOLDER;
1621*cdf0e10cSrcweir 	aSettings[3].Value	<<=	::rtl::OUString( pFileWin->GetFolderURL() );
1622*cdf0e10cSrcweir 
1623*cdf0e10cSrcweir 	// write
1624*cdf0e10cSrcweir 	SvtViewOptions aViewSettings( E_DIALOG, VIEWSETTING_NEWFROMTEMPLATE );
1625*cdf0e10cSrcweir 	aViewSettings.SetUserData( aSettings );
1626*cdf0e10cSrcweir }
1627*cdf0e10cSrcweir /* -----------------27.11.2002 17:20-----------------
1628*cdf0e10cSrcweir  *
1629*cdf0e10cSrcweir  * --------------------------------------------------*/
1630*cdf0e10cSrcweir 
1631*cdf0e10cSrcweir void SvtTemplateWindow::SelectFolder(sal_Int32 nFolderPosition)
1632*cdf0e10cSrcweir {
1633*cdf0e10cSrcweir     pIconWin->SelectFolder(nFolderPosition);
1634*cdf0e10cSrcweir }
1635*cdf0e10cSrcweir // struct SvtTmplDlg_Impl ------------------------------------------------
1636*cdf0e10cSrcweir 
1637*cdf0e10cSrcweir struct SvtTmplDlg_Impl
1638*cdf0e10cSrcweir {
1639*cdf0e10cSrcweir 	SvtTemplateWindow*	pWin;
1640*cdf0e10cSrcweir 	String				aTitle;
1641*cdf0e10cSrcweir 	Timer				aUpdateTimer;
1642*cdf0e10cSrcweir 	sal_Bool			bSelectNoOpen;
1643*cdf0e10cSrcweir 
1644*cdf0e10cSrcweir 	uno::Reference< util::XOfficeInstallationDirectories > m_xOfficeInstDirs;
1645*cdf0e10cSrcweir 
1646*cdf0e10cSrcweir 
1647*cdf0e10cSrcweir 	SvtTmplDlg_Impl( Window* pParent ) : pWin( new SvtTemplateWindow( pParent ) ) ,bSelectNoOpen( sal_False ) {}
1648*cdf0e10cSrcweir 
1649*cdf0e10cSrcweir 	~SvtTmplDlg_Impl() { delete pWin; }
1650*cdf0e10cSrcweir 
1651*cdf0e10cSrcweir 	uno::Reference< util::XOfficeInstallationDirectories > getOfficeInstDirs();
1652*cdf0e10cSrcweir };
1653*cdf0e10cSrcweir 
1654*cdf0e10cSrcweir uno::Reference< util::XOfficeInstallationDirectories > SvtTmplDlg_Impl::getOfficeInstDirs()
1655*cdf0e10cSrcweir {
1656*cdf0e10cSrcweir 	if ( !m_xOfficeInstDirs.is() )
1657*cdf0e10cSrcweir 	{
1658*cdf0e10cSrcweir 		try
1659*cdf0e10cSrcweir 		{
1660*cdf0e10cSrcweir 			uno::Reference< lang::XMultiServiceFactory > xSMgr = comphelper::getProcessServiceFactory();
1661*cdf0e10cSrcweir 
1662*cdf0e10cSrcweir 			uno::Reference< beans::XPropertySet > xPropSet( xSMgr, uno::UNO_QUERY );
1663*cdf0e10cSrcweir 			if ( xPropSet.is() )
1664*cdf0e10cSrcweir 			{
1665*cdf0e10cSrcweir 				uno::Reference< uno::XComponentContext > xCtx;
1666*cdf0e10cSrcweir 				xPropSet->getPropertyValue(
1667*cdf0e10cSrcweir 					rtl::OUString(
1668*cdf0e10cSrcweir 						RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) )
1669*cdf0e10cSrcweir 				>>= xCtx;
1670*cdf0e10cSrcweir 
1671*cdf0e10cSrcweir 				if ( xCtx.is() )
1672*cdf0e10cSrcweir 				{
1673*cdf0e10cSrcweir 					xCtx->getValueByName(
1674*cdf0e10cSrcweir 						rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
1675*cdf0e10cSrcweir 							"/singletons/com.sun.star.util.theOfficeInstallationDirectories" ) ) )
1676*cdf0e10cSrcweir 					>>= m_xOfficeInstDirs;
1677*cdf0e10cSrcweir 				}
1678*cdf0e10cSrcweir 			}
1679*cdf0e10cSrcweir 		}
1680*cdf0e10cSrcweir 		catch( uno::Exception& )
1681*cdf0e10cSrcweir 		{}
1682*cdf0e10cSrcweir 	}
1683*cdf0e10cSrcweir 
1684*cdf0e10cSrcweir 	return m_xOfficeInstDirs;
1685*cdf0e10cSrcweir }
1686*cdf0e10cSrcweir 
1687*cdf0e10cSrcweir // class SvtDocumentTemplateDialog ---------------------------------------
1688*cdf0e10cSrcweir 
1689*cdf0e10cSrcweir SvtDocumentTemplateDialog::SvtDocumentTemplateDialog( Window* _pParent, SelectOnly ) :
1690*cdf0e10cSrcweir 	ModalDialog( _pParent, SvtResId( DLG_DOCTEMPLATE ) ),
1691*cdf0e10cSrcweir 
1692*cdf0e10cSrcweir     aMoreTemplatesLink  ( this, SvtResId( FT_DOCTEMPLATE_LINK ) ),
1693*cdf0e10cSrcweir     aLine               ( this, SvtResId( FL_DOCTEMPLATE ) ),
1694*cdf0e10cSrcweir     aManageBtn          ( this, SvtResId( BTN_DOCTEMPLATE_MANAGE ) ),
1695*cdf0e10cSrcweir     aEditBtn            ( this, SvtResId( BTN_DOCTEMPLATE_EDIT ) ),
1696*cdf0e10cSrcweir     aOKBtn              ( this, SvtResId( BTN_DOCTEMPLATE_OPEN ) ),
1697*cdf0e10cSrcweir     aCancelBtn          ( this, SvtResId( BTN_DOCTEMPLATE_CANCEL ) ),
1698*cdf0e10cSrcweir     aHelpBtn            ( this, SvtResId( BTN_DOCTEMPLATE_HELP ) ),
1699*cdf0e10cSrcweir     pImpl               ( NULL )
1700*cdf0e10cSrcweir {
1701*cdf0e10cSrcweir 	FreeResource();
1702*cdf0e10cSrcweir 	InitImpl( );
1703*cdf0e10cSrcweir 
1704*cdf0e10cSrcweir 	// no editing of templates
1705*cdf0e10cSrcweir 	aEditBtn.Hide();
1706*cdf0e10cSrcweir 
1707*cdf0e10cSrcweir 	pImpl->bSelectNoOpen = sal_True;
1708*cdf0e10cSrcweir }
1709*cdf0e10cSrcweir 
1710*cdf0e10cSrcweir // ------------------------------------------------------------------------
1711*cdf0e10cSrcweir 
1712*cdf0e10cSrcweir SvtDocumentTemplateDialog::SvtDocumentTemplateDialog( Window* pParent ) :
1713*cdf0e10cSrcweir 
1714*cdf0e10cSrcweir 	ModalDialog( pParent, SvtResId( DLG_DOCTEMPLATE ) ),
1715*cdf0e10cSrcweir 
1716*cdf0e10cSrcweir     aMoreTemplatesLink  ( this, SvtResId( FT_DOCTEMPLATE_LINK ) ),
1717*cdf0e10cSrcweir     aLine               ( this, SvtResId( FL_DOCTEMPLATE ) ),
1718*cdf0e10cSrcweir     aManageBtn          ( this, SvtResId( BTN_DOCTEMPLATE_MANAGE ) ),
1719*cdf0e10cSrcweir     aEditBtn            ( this, SvtResId( BTN_DOCTEMPLATE_EDIT ) ),
1720*cdf0e10cSrcweir     aOKBtn              ( this, SvtResId( BTN_DOCTEMPLATE_OPEN ) ),
1721*cdf0e10cSrcweir     aCancelBtn          ( this, SvtResId( BTN_DOCTEMPLATE_CANCEL ) ),
1722*cdf0e10cSrcweir     aHelpBtn            ( this, SvtResId( BTN_DOCTEMPLATE_HELP ) ),
1723*cdf0e10cSrcweir     pImpl               ( NULL )
1724*cdf0e10cSrcweir {
1725*cdf0e10cSrcweir 	FreeResource();
1726*cdf0e10cSrcweir 	InitImpl( );
1727*cdf0e10cSrcweir }
1728*cdf0e10cSrcweir 
1729*cdf0e10cSrcweir // ------------------------------------------------------------------------
1730*cdf0e10cSrcweir 
1731*cdf0e10cSrcweir void SvtDocumentTemplateDialog::InitImpl( )
1732*cdf0e10cSrcweir {
1733*cdf0e10cSrcweir 	pImpl = new SvtTmplDlg_Impl( this );
1734*cdf0e10cSrcweir 	pImpl->aTitle = GetText();
1735*cdf0e10cSrcweir 
1736*cdf0e10cSrcweir 	bool bHideLink = ( SvtExtendedSecurityOptions().GetOpenHyperlinkMode()
1737*cdf0e10cSrcweir 					== SvtExtendedSecurityOptions::OPEN_NEVER );
1738*cdf0e10cSrcweir 	if ( !bHideLink )
1739*cdf0e10cSrcweir      	{
1740*cdf0e10cSrcweir     aMoreTemplatesLink.SetURL( String(
1741*cdf0e10cSrcweir         RTL_CONSTASCII_STRINGPARAM( "http://templates.services.openoffice.org/?cid=923508" ) ) );
1742*cdf0e10cSrcweir     aMoreTemplatesLink.SetClickHdl( LINK( this, SvtDocumentTemplateDialog, OpenLinkHdl_Impl ) );
1743*cdf0e10cSrcweir 	}
1744*cdf0e10cSrcweir 	else
1745*cdf0e10cSrcweir 	   aMoreTemplatesLink.Hide();
1746*cdf0e10cSrcweir 
1747*cdf0e10cSrcweir     aManageBtn.SetClickHdl( LINK( this, SvtDocumentTemplateDialog, OrganizerHdl_Impl ) );
1748*cdf0e10cSrcweir 	Link aLink = LINK( this, SvtDocumentTemplateDialog, OKHdl_Impl );
1749*cdf0e10cSrcweir 	aEditBtn.SetClickHdl( aLink );
1750*cdf0e10cSrcweir 	aOKBtn.SetClickHdl( aLink );
1751*cdf0e10cSrcweir 
1752*cdf0e10cSrcweir 	pImpl->pWin->SetSelectHdl( LINK( this, SvtDocumentTemplateDialog, SelectHdl_Impl ) );
1753*cdf0e10cSrcweir 	pImpl->pWin->SetDoubleClickHdl( LINK( this, SvtDocumentTemplateDialog, DoubleClickHdl_Impl ) );
1754*cdf0e10cSrcweir 	pImpl->pWin->SetNewFolderHdl( LINK( this, SvtDocumentTemplateDialog, NewFolderHdl_Impl ) );
1755*cdf0e10cSrcweir 	pImpl->pWin->SetSendFocusHdl( LINK( this, SvtDocumentTemplateDialog, SendFocusHdl_Impl ) );
1756*cdf0e10cSrcweir 
1757*cdf0e10cSrcweir 	// dynamic height adjustment
1758*cdf0e10cSrcweir 	long nHeight = pImpl->pWin->CalcHeight();
1759*cdf0e10cSrcweir 
1760*cdf0e10cSrcweir 	Size aSize = GetOutputSizePixel();
1761*cdf0e10cSrcweir     Point aPos = aMoreTemplatesLink.GetPosPixel();
1762*cdf0e10cSrcweir 	Size a6Size = LogicToPixel( Size( 6, 6 ), MAP_APPFONT );
1763*cdf0e10cSrcweir     if ( bHideLink )
1764*cdf0e10cSrcweir         aPos.Y() += aMoreTemplatesLink.GetSizePixel().Height();
1765*cdf0e10cSrcweir     else
1766*cdf0e10cSrcweir         aPos.Y() -= a6Size.Height();
1767*cdf0e10cSrcweir 	long nDelta = aPos.Y() - nHeight;
1768*cdf0e10cSrcweir 	aSize.Height() -= nDelta;
1769*cdf0e10cSrcweir 	SetOutputSizePixel( aSize );
1770*cdf0e10cSrcweir 
1771*cdf0e10cSrcweir 	aSize.Height() = nHeight;
1772*cdf0e10cSrcweir     aSize.Width() -= ( a6Size.Width() * 2 );
1773*cdf0e10cSrcweir     pImpl->pWin->SetPosSizePixel( Point( a6Size.Width(), 0 ), aSize );
1774*cdf0e10cSrcweir 
1775*cdf0e10cSrcweir     aPos = aMoreTemplatesLink.GetPosPixel();
1776*cdf0e10cSrcweir     aPos.Y() -= nDelta;
1777*cdf0e10cSrcweir     aMoreTemplatesLink.SetPosPixel( aPos );
1778*cdf0e10cSrcweir     aPos = aLine.GetPosPixel();
1779*cdf0e10cSrcweir     aPos.Y() -= nDelta;
1780*cdf0e10cSrcweir     aLine.SetPosPixel( aPos );
1781*cdf0e10cSrcweir 	aPos = aManageBtn.GetPosPixel();
1782*cdf0e10cSrcweir 	aPos.Y() -= nDelta;
1783*cdf0e10cSrcweir 	aManageBtn.SetPosPixel( aPos );
1784*cdf0e10cSrcweir 	aPos = aEditBtn.GetPosPixel();
1785*cdf0e10cSrcweir 	aPos.Y() -= nDelta;
1786*cdf0e10cSrcweir 	aEditBtn.SetPosPixel( aPos );
1787*cdf0e10cSrcweir 	aPos = aOKBtn.GetPosPixel();
1788*cdf0e10cSrcweir 	aPos.Y() -= nDelta;
1789*cdf0e10cSrcweir 	aOKBtn.SetPosPixel( aPos );
1790*cdf0e10cSrcweir 	aPos = aCancelBtn.GetPosPixel();
1791*cdf0e10cSrcweir 	aPos.Y() -= nDelta;
1792*cdf0e10cSrcweir 	aCancelBtn.SetPosPixel( aPos );
1793*cdf0e10cSrcweir 	aPos = aHelpBtn.GetPosPixel();
1794*cdf0e10cSrcweir 	aPos.Y() -= nDelta;
1795*cdf0e10cSrcweir 	aHelpBtn.SetPosPixel( aPos );
1796*cdf0e10cSrcweir 
1797*cdf0e10cSrcweir 	pImpl->pWin->Show();
1798*cdf0e10cSrcweir 
1799*cdf0e10cSrcweir 	SelectHdl_Impl( NULL );
1800*cdf0e10cSrcweir 	NewFolderHdl_Impl( NULL );
1801*cdf0e10cSrcweir 
1802*cdf0e10cSrcweir 	UpdateHdl_Impl( NULL );
1803*cdf0e10cSrcweir }
1804*cdf0e10cSrcweir 
1805*cdf0e10cSrcweir // ------------------------------------------------------------------------
1806*cdf0e10cSrcweir 
1807*cdf0e10cSrcweir SvtDocumentTemplateDialog::~SvtDocumentTemplateDialog()
1808*cdf0e10cSrcweir {
1809*cdf0e10cSrcweir 	delete pImpl;
1810*cdf0e10cSrcweir }
1811*cdf0e10cSrcweir 
1812*cdf0e10cSrcweir // ------------------------------------------------------------------------
1813*cdf0e10cSrcweir 
1814*cdf0e10cSrcweir sal_Bool SvtDocumentTemplateDialog::IsFileSelected( ) const
1815*cdf0e10cSrcweir {
1816*cdf0e10cSrcweir 	return pImpl->pWin->IsFileSelected();
1817*cdf0e10cSrcweir }
1818*cdf0e10cSrcweir 
1819*cdf0e10cSrcweir // ------------------------------------------------------------------------
1820*cdf0e10cSrcweir 
1821*cdf0e10cSrcweir String SvtDocumentTemplateDialog::GetSelectedFileURL( ) const
1822*cdf0e10cSrcweir {
1823*cdf0e10cSrcweir 	return pImpl->pWin->GetSelectedFile();
1824*cdf0e10cSrcweir }
1825*cdf0e10cSrcweir 
1826*cdf0e10cSrcweir // ------------------------------------------------------------------------
1827*cdf0e10cSrcweir 
1828*cdf0e10cSrcweir sal_Bool SvtDocumentTemplateDialog::CanEnableEditBtn() const
1829*cdf0e10cSrcweir {
1830*cdf0e10cSrcweir 	sal_Bool bEnable = sal_False;
1831*cdf0e10cSrcweir 
1832*cdf0e10cSrcweir 	::rtl::OUString aFolderURL = pImpl->pWin->GetFolderURL();
1833*cdf0e10cSrcweir 	if ( pImpl->pWin->IsFileSelected() && aFolderURL.getLength() )
1834*cdf0e10cSrcweir 	{
1835*cdf0e10cSrcweir 		::rtl::OUString aFileTargetURL = pImpl->pWin->GetSelectedFile();
1836*cdf0e10cSrcweir         bEnable = aFileTargetURL.getLength() > 0;
1837*cdf0e10cSrcweir 	}
1838*cdf0e10cSrcweir 
1839*cdf0e10cSrcweir 	return bEnable;
1840*cdf0e10cSrcweir }
1841*cdf0e10cSrcweir 
1842*cdf0e10cSrcweir // ------------------------------------------------------------------------
1843*cdf0e10cSrcweir 
1844*cdf0e10cSrcweir IMPL_LINK ( SvtDocumentTemplateDialog , SelectHdl_Impl, SvtTemplateWindow *, EMPTYARG )
1845*cdf0e10cSrcweir {
1846*cdf0e10cSrcweir 	aEditBtn.Enable( pImpl->pWin->IsTemplateFolderOpen() && CanEnableEditBtn() );
1847*cdf0e10cSrcweir 	aOKBtn.Enable( pImpl->pWin->IsFileSelected() );
1848*cdf0e10cSrcweir 	return 0;
1849*cdf0e10cSrcweir }
1850*cdf0e10cSrcweir 
1851*cdf0e10cSrcweir // ------------------------------------------------------------------------
1852*cdf0e10cSrcweir 
1853*cdf0e10cSrcweir IMPL_LINK ( SvtDocumentTemplateDialog , DoubleClickHdl_Impl, SvtTemplateWindow *, EMPTYARG )
1854*cdf0e10cSrcweir {
1855*cdf0e10cSrcweir 	EndDialog( RET_OK );
1856*cdf0e10cSrcweir 
1857*cdf0e10cSrcweir 	if ( !pImpl->bSelectNoOpen )
1858*cdf0e10cSrcweir 		pImpl->pWin->OpenFile( !pImpl->pWin->IsTemplateFolderOpen() );
1859*cdf0e10cSrcweir 	return 0;
1860*cdf0e10cSrcweir }
1861*cdf0e10cSrcweir 
1862*cdf0e10cSrcweir // ------------------------------------------------------------------------
1863*cdf0e10cSrcweir 
1864*cdf0e10cSrcweir IMPL_LINK ( SvtDocumentTemplateDialog , NewFolderHdl_Impl, SvtTemplateWindow *, EMPTYARG )
1865*cdf0e10cSrcweir {
1866*cdf0e10cSrcweir 	String aNewTitle( pImpl->aTitle );
1867*cdf0e10cSrcweir 	aNewTitle += String( ASCII_STR(" - ") );
1868*cdf0e10cSrcweir 	aNewTitle += pImpl->pWin->GetFolderTitle();
1869*cdf0e10cSrcweir 	SetText( aNewTitle );
1870*cdf0e10cSrcweir 
1871*cdf0e10cSrcweir 	SelectHdl_Impl( NULL );
1872*cdf0e10cSrcweir 	return 0;
1873*cdf0e10cSrcweir }
1874*cdf0e10cSrcweir 
1875*cdf0e10cSrcweir // ------------------------------------------------------------------------
1876*cdf0e10cSrcweir 
1877*cdf0e10cSrcweir IMPL_LINK ( SvtDocumentTemplateDialog , SendFocusHdl_Impl, SvtTemplateWindow *, EMPTYARG )
1878*cdf0e10cSrcweir {
1879*cdf0e10cSrcweir 	if ( pImpl->pWin->HasIconWinFocus() )
1880*cdf0e10cSrcweir 		aHelpBtn.GrabFocus();
1881*cdf0e10cSrcweir 	else
1882*cdf0e10cSrcweir 	{
1883*cdf0e10cSrcweir 		if ( aEditBtn.IsEnabled() )
1884*cdf0e10cSrcweir 			aEditBtn.GrabFocus();
1885*cdf0e10cSrcweir 		else if ( aOKBtn.IsEnabled() )
1886*cdf0e10cSrcweir 			aOKBtn.GrabFocus();
1887*cdf0e10cSrcweir 		else
1888*cdf0e10cSrcweir 			aCancelBtn.GrabFocus();
1889*cdf0e10cSrcweir 	}
1890*cdf0e10cSrcweir 
1891*cdf0e10cSrcweir 	return 0;
1892*cdf0e10cSrcweir }
1893*cdf0e10cSrcweir 
1894*cdf0e10cSrcweir // ------------------------------------------------------------------------
1895*cdf0e10cSrcweir 
1896*cdf0e10cSrcweir IMPL_LINK ( SvtDocumentTemplateDialog , OKHdl_Impl, PushButton *, pBtn )
1897*cdf0e10cSrcweir {
1898*cdf0e10cSrcweir 	if ( pImpl->pWin->IsFileSelected() )
1899*cdf0e10cSrcweir 	{
1900*cdf0e10cSrcweir 		EndDialog( RET_OK );
1901*cdf0e10cSrcweir 
1902*cdf0e10cSrcweir 		if ( !pImpl->bSelectNoOpen )
1903*cdf0e10cSrcweir 			pImpl->pWin->OpenFile( &aEditBtn == pBtn );
1904*cdf0e10cSrcweir 	}
1905*cdf0e10cSrcweir 	return 0;
1906*cdf0e10cSrcweir }
1907*cdf0e10cSrcweir 
1908*cdf0e10cSrcweir // ------------------------------------------------------------------------
1909*cdf0e10cSrcweir 
1910*cdf0e10cSrcweir IMPL_LINK ( SvtDocumentTemplateDialog , OrganizerHdl_Impl, PushButton *, EMPTYARG )
1911*cdf0e10cSrcweir {
1912*cdf0e10cSrcweir 	Window* pOldDefWin = Application::GetDefDialogParent();
1913*cdf0e10cSrcweir 	Application::SetDefDialogParent( this );
1914*cdf0e10cSrcweir     Reference < XFramesSupplier > xDesktop = Reference < XFramesSupplier >(
1915*cdf0e10cSrcweir 		::comphelper::getProcessServiceFactory()->
1916*cdf0e10cSrcweir 		createInstance( ASCII_STR("com.sun.star.frame.Desktop") ), UNO_QUERY );
1917*cdf0e10cSrcweir     Reference < XFrame > xFrame( xDesktop->getActiveFrame() );
1918*cdf0e10cSrcweir     if ( !xFrame.is() )
1919*cdf0e10cSrcweir         xFrame = Reference < XFrame >( xDesktop, UNO_QUERY );
1920*cdf0e10cSrcweir 
1921*cdf0e10cSrcweir     com::sun::star::util::URL aTargetURL;
1922*cdf0e10cSrcweir     aTargetURL.Complete = ASCII_STR("slot:5540");
1923*cdf0e10cSrcweir     Reference < com::sun::star::util::XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->
1924*cdf0e10cSrcweir 		createInstance( ASCII_STR("com.sun.star.util.URLTransformer") ), UNO_QUERY );
1925*cdf0e10cSrcweir     xTrans->parseStrict( aTargetURL );
1926*cdf0e10cSrcweir 
1927*cdf0e10cSrcweir     Reference < XDispatchProvider > xProv( xFrame, UNO_QUERY );
1928*cdf0e10cSrcweir     Reference < XDispatch > xDisp;
1929*cdf0e10cSrcweir     xDisp = xProv->queryDispatch( aTargetURL, ::rtl::OUString(), 0 );
1930*cdf0e10cSrcweir 
1931*cdf0e10cSrcweir 	if ( xDisp.is() )
1932*cdf0e10cSrcweir 	{
1933*cdf0e10cSrcweir 		Sequence<PropertyValue> aArgs(1);
1934*cdf0e10cSrcweir 		PropertyValue* pArg = aArgs.getArray();
1935*cdf0e10cSrcweir 		pArg[0].Name = ASCII_STR("Referer");
1936*cdf0e10cSrcweir         pArg[0].Value <<= ASCII_STR("private:user");
1937*cdf0e10cSrcweir 		xDisp->dispatch( aTargetURL, aArgs );
1938*cdf0e10cSrcweir 	}
1939*cdf0e10cSrcweir 
1940*cdf0e10cSrcweir 	Application::SetDefDialogParent( pOldDefWin );
1941*cdf0e10cSrcweir 	return 0;
1942*cdf0e10cSrcweir }
1943*cdf0e10cSrcweir 
1944*cdf0e10cSrcweir // ------------------------------------------------------------------------
1945*cdf0e10cSrcweir 
1946*cdf0e10cSrcweir IMPL_LINK ( SvtDocumentTemplateDialog, UpdateHdl_Impl, Timer*, _pEventSource )
1947*cdf0e10cSrcweir {
1948*cdf0e10cSrcweir 	pImpl->pWin->SetFocus( sal_False );
1949*cdf0e10cSrcweir 	Reference< XDocumentTemplates > xTemplates( ::comphelper::getProcessServiceFactory()->
1950*cdf0e10cSrcweir 		createInstance( ASCII_STR("com.sun.star.frame.DocumentTemplates") ), UNO_QUERY );
1951*cdf0e10cSrcweir 	if ( xTemplates.is() )
1952*cdf0e10cSrcweir 	{
1953*cdf0e10cSrcweir 		if ( _pEventSource )
1954*cdf0e10cSrcweir 		{	// it was no direct call, which means it was triggered by the timer, which means we alread checked the necessity
1955*cdf0e10cSrcweir 			WaitObject aWaitCursor( this );
1956*cdf0e10cSrcweir 			xTemplates->update();
1957*cdf0e10cSrcweir 			if ( pImpl->pWin->IsTemplateFolderOpen() )
1958*cdf0e10cSrcweir 			{
1959*cdf0e10cSrcweir 				pImpl->pWin->ClearHistory();
1960*cdf0e10cSrcweir 				pImpl->pWin->OpenTemplateRoot();
1961*cdf0e10cSrcweir 			}
1962*cdf0e10cSrcweir 		}
1963*cdf0e10cSrcweir 		else
1964*cdf0e10cSrcweir 		{
1965*cdf0e10cSrcweir 			// check if we really need to do the update
1966*cdf0e10cSrcweir 			::svt::TemplateFolderCache aCache;
1967*cdf0e10cSrcweir 			if ( aCache.needsUpdate() )
1968*cdf0e10cSrcweir 			{	// yes -> do it asynchronous (it will take a noticeable time)
1969*cdf0e10cSrcweir 
1970*cdf0e10cSrcweir 				// (but first store the current state)
1971*cdf0e10cSrcweir 				aCache.storeState();
1972*cdf0e10cSrcweir 
1973*cdf0e10cSrcweir 				// start the timer for the async update
1974*cdf0e10cSrcweir 				pImpl->aUpdateTimer.SetTimeout( 300 );
1975*cdf0e10cSrcweir 				pImpl->aUpdateTimer.SetTimeoutHdl( LINK( this, SvtDocumentTemplateDialog, UpdateHdl_Impl ) );
1976*cdf0e10cSrcweir 				pImpl->aUpdateTimer.Start();
1977*cdf0e10cSrcweir 			}
1978*cdf0e10cSrcweir 		}
1979*cdf0e10cSrcweir 	}
1980*cdf0e10cSrcweir 	return 0;
1981*cdf0e10cSrcweir }
1982*cdf0e10cSrcweir 
1983*cdf0e10cSrcweir // ------------------------------------------------------------------------
1984*cdf0e10cSrcweir 
1985*cdf0e10cSrcweir IMPL_LINK ( SvtDocumentTemplateDialog, OpenLinkHdl_Impl, svt::FixedHyperlink*, EMPTYARG )
1986*cdf0e10cSrcweir {
1987*cdf0e10cSrcweir     ::rtl::OUString sURL( aMoreTemplatesLink.GetURL() );
1988*cdf0e10cSrcweir     if ( sURL.getLength() > 0 )
1989*cdf0e10cSrcweir     {
1990*cdf0e10cSrcweir         try
1991*cdf0e10cSrcweir         {
1992*cdf0e10cSrcweir             uno::Reference< lang::XMultiServiceFactory > xSMGR =
1993*cdf0e10cSrcweir                 ::comphelper::getProcessServiceFactory();
1994*cdf0e10cSrcweir             uno::Reference< com::sun::star::system::XSystemShellExecute > xSystemShell(
1995*cdf0e10cSrcweir                 xSMGR->createInstance( ::rtl::OUString(
1996*cdf0e10cSrcweir                     RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.system.SystemShellExecute" ) ) ),
1997*cdf0e10cSrcweir                 uno::UNO_QUERY_THROW );
1998*cdf0e10cSrcweir             if ( xSystemShell.is() )
1999*cdf0e10cSrcweir                 xSystemShell->execute( sURL, ::rtl::OUString(), com::sun::star::system::SystemShellExecuteFlags::DEFAULTS );
2000*cdf0e10cSrcweir             EndDialog( RET_CANCEL );
2001*cdf0e10cSrcweir         }
2002*cdf0e10cSrcweir         catch( const uno::Exception& e )
2003*cdf0e10cSrcweir         {
2004*cdf0e10cSrcweir              OSL_TRACE( "Caught exception: %s\n thread terminated.\n",
2005*cdf0e10cSrcweir                 rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8).getStr());
2006*cdf0e10cSrcweir         }
2007*cdf0e10cSrcweir     }
2008*cdf0e10cSrcweir     return 0;
2009*cdf0e10cSrcweir }
2010*cdf0e10cSrcweir 
2011*cdf0e10cSrcweir /* -----------------27.11.2002 16:54-----------------
2012*cdf0e10cSrcweir  *
2013*cdf0e10cSrcweir  * --------------------------------------------------*/
2014*cdf0e10cSrcweir void SvtDocumentTemplateDialog::SelectTemplateFolder()
2015*cdf0e10cSrcweir {
2016*cdf0e10cSrcweir     pImpl->pWin->SelectFolder(ICON_POS_TEMPLATES);
2017*cdf0e10cSrcweir }
2018*cdf0e10cSrcweir 
2019