1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_fpicker.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski // includes *******************************************************************
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski #include "iodlgimp.hxx"
30*b1cdbd2cSJim Jagielski #include "svtools/headbar.hxx"
31*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
32*b1cdbd2cSJim Jagielski #include <tools/wldcrd.hxx>
33*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
34*b1cdbd2cSJim Jagielski #include <vcl/menu.hxx>
35*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
36*b1cdbd2cSJim Jagielski #include <vcl/lstbox.hxx>
37*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
38*b1cdbd2cSJim Jagielski // #97148# ---------------
39*b1cdbd2cSJim Jagielski #include "svl/ctypeitm.hxx"
40*b1cdbd2cSJim Jagielski #include "svl/eitem.hxx"
41*b1cdbd2cSJim Jagielski #include "unotools/viewoptions.hxx"
42*b1cdbd2cSJim Jagielski #include "svtools/fileview.hxx"
43*b1cdbd2cSJim Jagielski #include "svtools/inettbc.hxx"
44*b1cdbd2cSJim Jagielski #include "iodlg.hxx"
45*b1cdbd2cSJim Jagielski #include "iodlg.hrc"
46*b1cdbd2cSJim Jagielski #include "svtools/imagemgr.hxx"
47*b1cdbd2cSJim Jagielski #include <unotools/localfilehelper.hxx>
48*b1cdbd2cSJim Jagielski #include "unotools/useroptions.hxx"
49*b1cdbd2cSJim Jagielski #include "rtl/instance.hxx"
50*b1cdbd2cSJim Jagielski #include <svl/svl.hrc>
51*b1cdbd2cSJim Jagielski
52*b1cdbd2cSJim Jagielski #define _SVSTDARR_STRINGSSORTDTOR
53*b1cdbd2cSJim Jagielski #define _SVSTDARR_STRINGSDTOR
54*b1cdbd2cSJim Jagielski #define _SVSTDARR_USHORTS
55*b1cdbd2cSJim Jagielski #include "svl/svstdarr.hxx"
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
58*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
59*b1cdbd2cSJim Jagielski using namespace ::utl;
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski // some stuff for easier changes for SvtViewOptions
62*b1cdbd2cSJim Jagielski static const sal_Char* pViewOptDataName = "dialog data";
63*b1cdbd2cSJim Jagielski #define VIEWOPT_DATANAME ::rtl::OUString::createFromAscii( pViewOptDataName )
64*b1cdbd2cSJim Jagielski
SetViewOptUserItem(SvtViewOptions & rOpt,const String & rData)65*b1cdbd2cSJim Jagielski static inline void SetViewOptUserItem( SvtViewOptions& rOpt, const String& rData )
66*b1cdbd2cSJim Jagielski {
67*b1cdbd2cSJim Jagielski rOpt.SetUserItem( VIEWOPT_DATANAME, makeAny( ::rtl::OUString( rData ) ) );
68*b1cdbd2cSJim Jagielski }
69*b1cdbd2cSJim Jagielski
GetViewOptUserItem(const SvtViewOptions & rOpt)70*b1cdbd2cSJim Jagielski static inline String GetViewOptUserItem( const SvtViewOptions& rOpt )
71*b1cdbd2cSJim Jagielski {
72*b1cdbd2cSJim Jagielski Any aAny( rOpt.GetUserItem( VIEWOPT_DATANAME ) );
73*b1cdbd2cSJim Jagielski ::rtl::OUString aUserData;
74*b1cdbd2cSJim Jagielski aAny >>= aUserData;
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski return String( aUserData );
77*b1cdbd2cSJim Jagielski }
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski
80*b1cdbd2cSJim Jagielski // defines f"ur den Style der BrowseBox
81*b1cdbd2cSJim Jagielski
82*b1cdbd2cSJim Jagielski #define STYLE_MULTI_SELECTION \
83*b1cdbd2cSJim Jagielski CNTVIEWSTYLE_NODE_BUTTONS | \
84*b1cdbd2cSJim Jagielski CNTVIEWSTYLE_NODE_BUTTONS_AT_ROOT | \
85*b1cdbd2cSJim Jagielski CNTVIEWSTYLE_SHOW_MESSAGES | \
86*b1cdbd2cSJim Jagielski CNTVIEWSTYLE_SHOW_FOLDERS | \
87*b1cdbd2cSJim Jagielski CNTVIEWSTYLE_NO_SMARTHIGHLIGHT | \
88*b1cdbd2cSJim Jagielski CNTVIEWSTYLE_HIDE_OPENMENU | \
89*b1cdbd2cSJim Jagielski CNTVIEWSTYLE_DEFAULT_APPEARANCE | \
90*b1cdbd2cSJim Jagielski CNTVIEWSTYLE_SORT_BY_FOLDER
91*b1cdbd2cSJim Jagielski
92*b1cdbd2cSJim Jagielski #define STYLE_SINGLE_SELECTION \
93*b1cdbd2cSJim Jagielski STYLE_MULTI_SELECTION | CNTVIEWSTYLE_SINGLE_SELECTION
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski #define BOOL_NOT_INITIALIZE ((sal_Bool)2)
96*b1cdbd2cSJim Jagielski
97*b1cdbd2cSJim Jagielski //*****************************************************************************
98*b1cdbd2cSJim Jagielski // ResMgrHolder / SvtSimpleResId
99*b1cdbd2cSJim Jagielski //*****************************************************************************
100*b1cdbd2cSJim Jagielski namespace
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski struct ResMgrHolder
103*b1cdbd2cSJim Jagielski {
operator ()__anon3b34a2430111::ResMgrHolder104*b1cdbd2cSJim Jagielski ResMgr * operator ()()
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski return ResMgr::CreateResMgr (CREATEVERSIONRESMGR_NAME(svl));
107*b1cdbd2cSJim Jagielski }
getOrCreate__anon3b34a2430111::ResMgrHolder108*b1cdbd2cSJim Jagielski static ResMgr * getOrCreate()
109*b1cdbd2cSJim Jagielski {
110*b1cdbd2cSJim Jagielski return rtl_Instance<
111*b1cdbd2cSJim Jagielski ResMgr, ResMgrHolder,
112*b1cdbd2cSJim Jagielski osl::MutexGuard, osl::GetGlobalMutex >::create (
113*b1cdbd2cSJim Jagielski ResMgrHolder(), osl::GetGlobalMutex());
114*b1cdbd2cSJim Jagielski }
115*b1cdbd2cSJim Jagielski };
116*b1cdbd2cSJim Jagielski
117*b1cdbd2cSJim Jagielski struct SvtSimpleResId : public ResId
118*b1cdbd2cSJim Jagielski {
SvtSimpleResId__anon3b34a2430111::SvtSimpleResId119*b1cdbd2cSJim Jagielski SvtSimpleResId (sal_uInt16 nId) : ResId (nId, *ResMgrHolder::getOrCreate()) {}
120*b1cdbd2cSJim Jagielski };
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski //*****************************************************************************
124*b1cdbd2cSJim Jagielski // SvtFileDialogFilter_Impl
125*b1cdbd2cSJim Jagielski //*****************************************************************************
126*b1cdbd2cSJim Jagielski
DBG_NAME(SvtFileDialogFilter_Impl)127*b1cdbd2cSJim Jagielski DBG_NAME( SvtFileDialogFilter_Impl )
128*b1cdbd2cSJim Jagielski SvtFileDialogFilter_Impl::SvtFileDialogFilter_Impl( const String& rName, const String& rType )
129*b1cdbd2cSJim Jagielski :m_aName( rName )
130*b1cdbd2cSJim Jagielski ,m_aType( rType )
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski DBG_CTOR( SvtFileDialogFilter_Impl, NULL );
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski m_aType.ToLowerAscii();
135*b1cdbd2cSJim Jagielski }
136*b1cdbd2cSJim Jagielski
137*b1cdbd2cSJim Jagielski //*****************************************************************************
138*b1cdbd2cSJim Jagielski
~SvtFileDialogFilter_Impl()139*b1cdbd2cSJim Jagielski SvtFileDialogFilter_Impl::~SvtFileDialogFilter_Impl()
140*b1cdbd2cSJim Jagielski {
141*b1cdbd2cSJim Jagielski DBG_DTOR( SvtFileDialogFilter_Impl, NULL );
142*b1cdbd2cSJim Jagielski }
143*b1cdbd2cSJim Jagielski
144*b1cdbd2cSJim Jagielski //*****************************************************************************
145*b1cdbd2cSJim Jagielski // SvtFileDialogFilterList_Impl
146*b1cdbd2cSJim Jagielski //*****************************************************************************
147*b1cdbd2cSJim Jagielski
148*b1cdbd2cSJim Jagielski SV_IMPL_PTRARR( SvtFileDialogFilterList_Impl, SvtFileDialogFilter_Impl* );
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski //=============================================================================
151*b1cdbd2cSJim Jagielski //= SvtFileDialogURLSelector
152*b1cdbd2cSJim Jagielski //=============================================================================
153*b1cdbd2cSJim Jagielski
154*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
SvtFileDialogURLSelector(SvtFileDialog * _pParent,const ResId & _rResId,sal_uInt16 _nButtonId)155*b1cdbd2cSJim Jagielski SvtFileDialogURLSelector::SvtFileDialogURLSelector( SvtFileDialog* _pParent, const ResId& _rResId, sal_uInt16 _nButtonId )
156*b1cdbd2cSJim Jagielski :MenuButton ( _pParent, _rResId )
157*b1cdbd2cSJim Jagielski ,m_pParent ( _pParent )
158*b1cdbd2cSJim Jagielski ,m_pMenu ( new PopupMenu )
159*b1cdbd2cSJim Jagielski {
160*b1cdbd2cSJim Jagielski SetStyle( GetStyle() | WB_NOPOINTERFOCUS | WB_RECTSTYLE | WB_SMALLSTYLE );
161*b1cdbd2cSJim Jagielski SetModeImage( m_pParent->GetButtonImage( _nButtonId ) );
162*b1cdbd2cSJim Jagielski SetMenuMode( MENUBUTTON_MENUMODE_TIMED );
163*b1cdbd2cSJim Jagielski SetDropDown( PUSHBUTTON_DROPDOWN_TOOLBOX );
164*b1cdbd2cSJim Jagielski }
165*b1cdbd2cSJim Jagielski
166*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
~SvtFileDialogURLSelector()167*b1cdbd2cSJim Jagielski SvtFileDialogURLSelector::~SvtFileDialogURLSelector()
168*b1cdbd2cSJim Jagielski {
169*b1cdbd2cSJim Jagielski delete m_pMenu;
170*b1cdbd2cSJim Jagielski }
171*b1cdbd2cSJim Jagielski
172*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
OpenURL(const String & rURL)173*b1cdbd2cSJim Jagielski void SvtFileDialogURLSelector::OpenURL( const String& rURL )
174*b1cdbd2cSJim Jagielski {
175*b1cdbd2cSJim Jagielski INetURLObject aObj( rURL );
176*b1cdbd2cSJim Jagielski DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "SvtFileDialogURLSelector::OpenURL: Invalid URL!" );
177*b1cdbd2cSJim Jagielski m_pParent->OpenURL_Impl( aObj.GetMainURL( INetURLObject::NO_DECODE ) );
178*b1cdbd2cSJim Jagielski }
179*b1cdbd2cSJim Jagielski
180*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
Activate()181*b1cdbd2cSJim Jagielski void SvtFileDialogURLSelector::Activate()
182*b1cdbd2cSJim Jagielski {
183*b1cdbd2cSJim Jagielski m_pMenu->Clear();
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski FillURLMenu( m_pMenu );
186*b1cdbd2cSJim Jagielski
187*b1cdbd2cSJim Jagielski SetPopupMenu( m_pMenu );
188*b1cdbd2cSJim Jagielski }
189*b1cdbd2cSJim Jagielski
190*b1cdbd2cSJim Jagielski //=============================================================================
191*b1cdbd2cSJim Jagielski //= SvtUpButton_Impl
192*b1cdbd2cSJim Jagielski //=============================================================================
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
SvtUpButton_Impl(SvtFileDialog * pParent,const ResId & rResId)195*b1cdbd2cSJim Jagielski SvtUpButton_Impl::SvtUpButton_Impl( SvtFileDialog* pParent, const ResId& rResId )
196*b1cdbd2cSJim Jagielski :SvtFileDialogURLSelector( pParent, rResId, IMG_FILEDLG_BTN_UP )
197*b1cdbd2cSJim Jagielski ,_pURLs ( NULL )
198*b1cdbd2cSJim Jagielski {
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski
201*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
~SvtUpButton_Impl()202*b1cdbd2cSJim Jagielski SvtUpButton_Impl::~SvtUpButton_Impl()
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski delete _pURLs;
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski
207*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
FillURLMenu(PopupMenu * _pMenu)208*b1cdbd2cSJim Jagielski void SvtUpButton_Impl::FillURLMenu( PopupMenu* _pMenu )
209*b1cdbd2cSJim Jagielski {
210*b1cdbd2cSJim Jagielski SvtFileView* pBox = GetDialogParent()->GetView();
211*b1cdbd2cSJim Jagielski
212*b1cdbd2cSJim Jagielski sal_uInt16 nItemId = 1;
213*b1cdbd2cSJim Jagielski
214*b1cdbd2cSJim Jagielski delete _pURLs;
215*b1cdbd2cSJim Jagielski _pURLs = new SvStringsDtor;
216*b1cdbd2cSJim Jagielski
217*b1cdbd2cSJim Jagielski // "Ubergeordnete Ebenen bestimmen.
218*b1cdbd2cSJim Jagielski INetURLObject aObject( pBox->GetViewURL() );
219*b1cdbd2cSJim Jagielski sal_Int32 nCount = aObject.getSegmentCount();
220*b1cdbd2cSJim Jagielski
221*b1cdbd2cSJim Jagielski ::svtools::VolumeInfo aVolInfo( sal_True /* volume */, sal_False /* remote */,
222*b1cdbd2cSJim Jagielski sal_False /* removable */, sal_False /* floppy */,
223*b1cdbd2cSJim Jagielski sal_False /* compact disk */ );
224*b1cdbd2cSJim Jagielski sal_Bool bIsHighContrast = pBox->GetSettings().GetStyleSettings().GetHighContrastMode();
225*b1cdbd2cSJim Jagielski Image aVolumeImage( SvFileInformationManager::GetFolderImage( aVolInfo, bIsHighContrast ) );
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski while ( nCount >= 1 )
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski aObject.removeSegment();
230*b1cdbd2cSJim Jagielski String* pParentURL = new String( aObject.GetMainURL( INetURLObject::NO_DECODE ) );
231*b1cdbd2cSJim Jagielski
232*b1cdbd2cSJim Jagielski if ( GetDialogParent()->isUrlAllowed( *pParentURL ) )
233*b1cdbd2cSJim Jagielski {
234*b1cdbd2cSJim Jagielski String aTitle;
235*b1cdbd2cSJim Jagielski // 97148# --------------------------------
236*b1cdbd2cSJim Jagielski if ( !GetDialogParent()->ContentGetTitle( *pParentURL, aTitle ) || aTitle.Len() == 0 )
237*b1cdbd2cSJim Jagielski aTitle = aObject.getName();
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski Image aImage = ( nCount > 1 ) // if nCount == 1 means workplace, which detects the wrong image
240*b1cdbd2cSJim Jagielski ? SvFileInformationManager::GetImage( aObject, bIsHighContrast )
241*b1cdbd2cSJim Jagielski : aVolumeImage;
242*b1cdbd2cSJim Jagielski
243*b1cdbd2cSJim Jagielski _pMenu->InsertItem( nItemId++, aTitle, aImage );
244*b1cdbd2cSJim Jagielski _pURLs->Insert( pParentURL, _pURLs->Count() );
245*b1cdbd2cSJim Jagielski
246*b1cdbd2cSJim Jagielski if ( nCount == 1 )
247*b1cdbd2cSJim Jagielski {
248*b1cdbd2cSJim Jagielski // adjust the title of the top level entry (the workspace)
249*b1cdbd2cSJim Jagielski _pMenu->SetItemText( --nItemId, SvtSimpleResId( STR_SVT_MIMETYPE_CNT_FSYSBOX ) );
250*b1cdbd2cSJim Jagielski }
251*b1cdbd2cSJim Jagielski }
252*b1cdbd2cSJim Jagielski
253*b1cdbd2cSJim Jagielski --nCount;
254*b1cdbd2cSJim Jagielski }
255*b1cdbd2cSJim Jagielski }
256*b1cdbd2cSJim Jagielski
257*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
Select()258*b1cdbd2cSJim Jagielski void SvtUpButton_Impl::Select()
259*b1cdbd2cSJim Jagielski {
260*b1cdbd2cSJim Jagielski sal_uInt16 nId = GetCurItemId();
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielski if ( nId )
263*b1cdbd2cSJim Jagielski {
264*b1cdbd2cSJim Jagielski --nId;
265*b1cdbd2cSJim Jagielski DBG_ASSERT( nId <= _pURLs->Count(), "SvtUpButton_Impl:falscher Index" );
266*b1cdbd2cSJim Jagielski
267*b1cdbd2cSJim Jagielski String aURL = *(_pURLs->GetObject( nId ));
268*b1cdbd2cSJim Jagielski GetDialogParent()->OpenURL_Impl( aURL );
269*b1cdbd2cSJim Jagielski }
270*b1cdbd2cSJim Jagielski }
271*b1cdbd2cSJim Jagielski
272*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
Click()273*b1cdbd2cSJim Jagielski void SvtUpButton_Impl::Click()
274*b1cdbd2cSJim Jagielski {
275*b1cdbd2cSJim Jagielski GetDialogParent()->PrevLevel_Impl();
276*b1cdbd2cSJim Jagielski }
277*b1cdbd2cSJim Jagielski
278*b1cdbd2cSJim Jagielski //=============================================================================
279*b1cdbd2cSJim Jagielski //= SvtTravelButton_Impl
280*b1cdbd2cSJim Jagielski //=============================================================================
281*b1cdbd2cSJim Jagielski
282*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
SvtTravelButton_Impl(SvtFileDialog * pParent,const ResId & rResId)283*b1cdbd2cSJim Jagielski SvtTravelButton_Impl::SvtTravelButton_Impl( SvtFileDialog* pParent, const ResId& rResId )
284*b1cdbd2cSJim Jagielski :SvtFileDialogURLSelector ( pParent, rResId, IMG_FILEDLG_BTN_STD )
285*b1cdbd2cSJim Jagielski {
286*b1cdbd2cSJim Jagielski SetDropDown( 0 ); // by default, don't drop down, as we don't have favourites
287*b1cdbd2cSJim Jagielski }
288*b1cdbd2cSJim Jagielski
289*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
SetFavouriteLocations(const::std::vector<String> & _rLocations)290*b1cdbd2cSJim Jagielski void SvtTravelButton_Impl::SetFavouriteLocations( const ::std::vector< String >& _rLocations )
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski m_aFavourites = _rLocations;
293*b1cdbd2cSJim Jagielski // enable the drop down if and only if we have favourites
294*b1cdbd2cSJim Jagielski SetDropDown( m_aFavourites.empty() ? 0 : PUSHBUTTON_DROPDOWN_TOOLBOX );
295*b1cdbd2cSJim Jagielski }
296*b1cdbd2cSJim Jagielski
297*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
~SvtTravelButton_Impl()298*b1cdbd2cSJim Jagielski SvtTravelButton_Impl::~SvtTravelButton_Impl()
299*b1cdbd2cSJim Jagielski {
300*b1cdbd2cSJim Jagielski }
301*b1cdbd2cSJim Jagielski
302*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
FillURLMenu(PopupMenu * _pMenu)303*b1cdbd2cSJim Jagielski void SvtTravelButton_Impl::FillURLMenu( PopupMenu* _pMenu )
304*b1cdbd2cSJim Jagielski {
305*b1cdbd2cSJim Jagielski if ( m_aFavourites.empty() )
306*b1cdbd2cSJim Jagielski // though we claimed that we do not want to have a drop down button
307*b1cdbd2cSJim Jagielski // in this case, VCL nevertheless behaves as if we had one .... :(
308*b1cdbd2cSJim Jagielski return;
309*b1cdbd2cSJim Jagielski
310*b1cdbd2cSJim Jagielski _pMenu->Clear();
311*b1cdbd2cSJim Jagielski
312*b1cdbd2cSJim Jagielski sal_Bool bIsHighContrast = GetDialogParent()->GetView()->GetSettings().GetStyleSettings().GetHighContrastMode();
313*b1cdbd2cSJim Jagielski
314*b1cdbd2cSJim Jagielski sal_uInt16 nItemId = 1;
315*b1cdbd2cSJim Jagielski String sDisplayName;
316*b1cdbd2cSJim Jagielski
317*b1cdbd2cSJim Jagielski ::std::vector< String >::const_iterator aLoop;
318*b1cdbd2cSJim Jagielski for ( aLoop = m_aFavourites.begin(); aLoop != m_aFavourites.end(); ++aLoop, ++nItemId )
319*b1cdbd2cSJim Jagielski {
320*b1cdbd2cSJim Jagielski if ( GetDialogParent()->isUrlAllowed( *aLoop ) )
321*b1cdbd2cSJim Jagielski {
322*b1cdbd2cSJim Jagielski Image aImage = SvFileInformationManager::GetImage(
323*b1cdbd2cSJim Jagielski INetURLObject(*aLoop), bIsHighContrast );
324*b1cdbd2cSJim Jagielski if ( LocalFileHelper::ConvertURLToSystemPath(*aLoop, sDisplayName) )
325*b1cdbd2cSJim Jagielski _pMenu->InsertItem( nItemId, sDisplayName, aImage );
326*b1cdbd2cSJim Jagielski else
327*b1cdbd2cSJim Jagielski _pMenu->InsertItem( nItemId, *aLoop, aImage );
328*b1cdbd2cSJim Jagielski }
329*b1cdbd2cSJim Jagielski }
330*b1cdbd2cSJim Jagielski }
331*b1cdbd2cSJim Jagielski
332*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
Select()333*b1cdbd2cSJim Jagielski void SvtTravelButton_Impl::Select()
334*b1cdbd2cSJim Jagielski {
335*b1cdbd2cSJim Jagielski sal_uInt16 nId = GetCurItemId();
336*b1cdbd2cSJim Jagielski if ( nId )
337*b1cdbd2cSJim Jagielski {
338*b1cdbd2cSJim Jagielski --nId;
339*b1cdbd2cSJim Jagielski DBG_ASSERT( nId < m_aFavourites.size(), "SvtTravelButton_Impl::Select: invalid index!" );
340*b1cdbd2cSJim Jagielski if ( nId < m_aFavourites.size() )
341*b1cdbd2cSJim Jagielski OpenURL( m_aFavourites[ nId ] );
342*b1cdbd2cSJim Jagielski }
343*b1cdbd2cSJim Jagielski }
344*b1cdbd2cSJim Jagielski
345*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
Click()346*b1cdbd2cSJim Jagielski void SvtTravelButton_Impl::Click()
347*b1cdbd2cSJim Jagielski {
348*b1cdbd2cSJim Jagielski OpenURL( GetDialogParent()->GetStandardDir() );
349*b1cdbd2cSJim Jagielski }
350*b1cdbd2cSJim Jagielski
351*b1cdbd2cSJim Jagielski //*****************************************************************************
352*b1cdbd2cSJim Jagielski // SvtExpFileDlg_Impl
353*b1cdbd2cSJim Jagielski //*****************************************************************************
354*b1cdbd2cSJim Jagielski
SvtExpFileDlg_Impl(WinBits)355*b1cdbd2cSJim Jagielski SvtExpFileDlg_Impl::SvtExpFileDlg_Impl( WinBits ) :
356*b1cdbd2cSJim Jagielski
357*b1cdbd2cSJim Jagielski _pLbFilter ( NULL ),
358*b1cdbd2cSJim Jagielski _pCurFilter ( NULL ),
359*b1cdbd2cSJim Jagielski _pFilter ( new SvtFileDialogFilterList_Impl() ),
360*b1cdbd2cSJim Jagielski _pUserFilter ( NULL ),
361*b1cdbd2cSJim Jagielski _pFtFileName ( NULL ),
362*b1cdbd2cSJim Jagielski _pEdFileName ( NULL ),
363*b1cdbd2cSJim Jagielski _pFtFileVersion ( NULL ),
364*b1cdbd2cSJim Jagielski _pLbFileVersion ( NULL ),
365*b1cdbd2cSJim Jagielski _pFtTemplates ( NULL ),
366*b1cdbd2cSJim Jagielski _pLbTemplates ( NULL ),
367*b1cdbd2cSJim Jagielski _pFtImageTemplates ( NULL ),
368*b1cdbd2cSJim Jagielski _pLbImageTemplates ( NULL ),
369*b1cdbd2cSJim Jagielski _pFtFileType ( NULL ),
370*b1cdbd2cSJim Jagielski _pBtnFileOpen ( NULL ),
371*b1cdbd2cSJim Jagielski _pBtnCancel ( NULL ),
372*b1cdbd2cSJim Jagielski _pBtnHelp ( NULL ),
373*b1cdbd2cSJim Jagielski _pBtnUp ( NULL ),
374*b1cdbd2cSJim Jagielski _pBtnNewFolder ( NULL ),
375*b1cdbd2cSJim Jagielski _pBtnStandard ( NULL ),
376*b1cdbd2cSJim Jagielski _pCbPassword ( NULL ),
377*b1cdbd2cSJim Jagielski _pFtCurrentPath ( NULL ),
378*b1cdbd2cSJim Jagielski _pCbAutoExtension ( NULL ),
379*b1cdbd2cSJim Jagielski _pCbOptions ( NULL ),
380*b1cdbd2cSJim Jagielski _nState ( FILEDLG_STATE_REMOTE ),
381*b1cdbd2cSJim Jagielski _nStyle ( 0 ),
382*b1cdbd2cSJim Jagielski _bDoubleClick ( sal_False ),
383*b1cdbd2cSJim Jagielski m_bNeedDelayedFilterExecute ( sal_False ),
384*b1cdbd2cSJim Jagielski _pDefaultFilter ( NULL ),
385*b1cdbd2cSJim Jagielski _bMultiSelection ( sal_False ),
386*b1cdbd2cSJim Jagielski _nFixDeltaHeight ( 0 ),
387*b1cdbd2cSJim Jagielski _bFolderHasOpened ( sal_False )
388*b1cdbd2cSJim Jagielski {
389*b1cdbd2cSJim Jagielski }
390*b1cdbd2cSJim Jagielski
391*b1cdbd2cSJim Jagielski //*****************************************************************************
392*b1cdbd2cSJim Jagielski
~SvtExpFileDlg_Impl()393*b1cdbd2cSJim Jagielski SvtExpFileDlg_Impl::~SvtExpFileDlg_Impl()
394*b1cdbd2cSJim Jagielski {
395*b1cdbd2cSJim Jagielski delete _pFtCurrentPath;
396*b1cdbd2cSJim Jagielski delete _pCbPassword;
397*b1cdbd2cSJim Jagielski delete _pCbAutoExtension;
398*b1cdbd2cSJim Jagielski delete _pCbOptions;
399*b1cdbd2cSJim Jagielski delete _pBtnStandard;
400*b1cdbd2cSJim Jagielski delete _pBtnNewFolder;
401*b1cdbd2cSJim Jagielski delete _pBtnUp;
402*b1cdbd2cSJim Jagielski delete _pBtnHelp;
403*b1cdbd2cSJim Jagielski delete _pBtnCancel;
404*b1cdbd2cSJim Jagielski delete _pBtnFileOpen;
405*b1cdbd2cSJim Jagielski delete _pLbFilter;
406*b1cdbd2cSJim Jagielski delete _pFtFileType;
407*b1cdbd2cSJim Jagielski delete _pLbFileVersion;
408*b1cdbd2cSJim Jagielski delete _pFtFileVersion;
409*b1cdbd2cSJim Jagielski delete _pFtTemplates;
410*b1cdbd2cSJim Jagielski delete _pLbTemplates;
411*b1cdbd2cSJim Jagielski delete _pFtImageTemplates;
412*b1cdbd2cSJim Jagielski delete _pLbImageTemplates;
413*b1cdbd2cSJim Jagielski delete _pEdFileName;
414*b1cdbd2cSJim Jagielski delete _pFtFileName;
415*b1cdbd2cSJim Jagielski delete _pUserFilter;
416*b1cdbd2cSJim Jagielski delete _pFilter;
417*b1cdbd2cSJim Jagielski }
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski //*****************************************************************************
420*b1cdbd2cSJim Jagielski
SetStandardDir(const String & _rDir)421*b1cdbd2cSJim Jagielski void SvtExpFileDlg_Impl::SetStandardDir( const String& _rDir )
422*b1cdbd2cSJim Jagielski {
423*b1cdbd2cSJim Jagielski _aStdDir = _rDir;
424*b1cdbd2cSJim Jagielski if ( 0 == _aStdDir.Len() )
425*b1cdbd2cSJim Jagielski _aStdDir.AssignAscii( "file:///" );
426*b1cdbd2cSJim Jagielski }
427*b1cdbd2cSJim Jagielski
428*b1cdbd2cSJim Jagielski //*****************************************************************************
429*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
430*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
431*b1cdbd2cSJim Jagielski namespace {
lcl_DecoratedFilter(const String & _rOriginalFilter)432*b1cdbd2cSJim Jagielski String lcl_DecoratedFilter( const String& _rOriginalFilter )
433*b1cdbd2cSJim Jagielski {
434*b1cdbd2cSJim Jagielski String aDecoratedFilter = '<';
435*b1cdbd2cSJim Jagielski aDecoratedFilter += _rOriginalFilter;
436*b1cdbd2cSJim Jagielski aDecoratedFilter += '>';
437*b1cdbd2cSJim Jagielski return aDecoratedFilter;
438*b1cdbd2cSJim Jagielski }
439*b1cdbd2cSJim Jagielski }
440*b1cdbd2cSJim Jagielski #endif
441*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
442*b1cdbd2cSJim Jagielski
ClearFilterList()443*b1cdbd2cSJim Jagielski void SvtExpFileDlg_Impl::ClearFilterList( )
444*b1cdbd2cSJim Jagielski {
445*b1cdbd2cSJim Jagielski _pLbFilter->Clear();
446*b1cdbd2cSJim Jagielski }
447*b1cdbd2cSJim Jagielski
448*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
SetCurFilter(SvtFileDialogFilter_Impl * pFilter,const String & rDisplayName)449*b1cdbd2cSJim Jagielski void SvtExpFileDlg_Impl::SetCurFilter( SvtFileDialogFilter_Impl* pFilter, const String& rDisplayName )
450*b1cdbd2cSJim Jagielski {
451*b1cdbd2cSJim Jagielski DBG_ASSERT( pFilter, "SvtExpFileDlg_Impl::SetCurFilter: invalid filter!" );
452*b1cdbd2cSJim Jagielski DBG_ASSERT( ( rDisplayName == pFilter->GetName() )
453*b1cdbd2cSJim Jagielski || ( rDisplayName == lcl_DecoratedFilter( pFilter->GetName() ) ),
454*b1cdbd2cSJim Jagielski "SvtExpFileDlg_Impl::SetCurFilter: arguments are inconsistent!" );
455*b1cdbd2cSJim Jagielski
456*b1cdbd2cSJim Jagielski _pCurFilter = pFilter;
457*b1cdbd2cSJim Jagielski m_sCurrentFilterDisplayName = rDisplayName;
458*b1cdbd2cSJim Jagielski }
459*b1cdbd2cSJim Jagielski
460*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
InsertFilterListEntry(const SvtFileDialogFilter_Impl * _pFilterDesc)461*b1cdbd2cSJim Jagielski void SvtExpFileDlg_Impl::InsertFilterListEntry( const SvtFileDialogFilter_Impl* _pFilterDesc )
462*b1cdbd2cSJim Jagielski {
463*b1cdbd2cSJim Jagielski String sName = _pFilterDesc->GetName();
464*b1cdbd2cSJim Jagielski if ( _pFilterDesc->isGroupSeparator() )
465*b1cdbd2cSJim Jagielski sName = String::CreateFromAscii( "------------------------------------------" );
466*b1cdbd2cSJim Jagielski else
467*b1cdbd2cSJim Jagielski sName = _pFilterDesc->GetName();
468*b1cdbd2cSJim Jagielski
469*b1cdbd2cSJim Jagielski // insert an set user data
470*b1cdbd2cSJim Jagielski sal_uInt16 nPos = _pLbFilter->InsertEntry( sName );
471*b1cdbd2cSJim Jagielski _pLbFilter->SetEntryData( nPos, const_cast< void* >( static_cast< const void* >( _pFilterDesc ) ) );
472*b1cdbd2cSJim Jagielski }
473*b1cdbd2cSJim Jagielski
474*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
475*b1cdbd2cSJim Jagielski
InitFilterList()476*b1cdbd2cSJim Jagielski void SvtExpFileDlg_Impl::InitFilterList( )
477*b1cdbd2cSJim Jagielski {
478*b1cdbd2cSJim Jagielski // clear the current list
479*b1cdbd2cSJim Jagielski ClearFilterList( );
480*b1cdbd2cSJim Jagielski
481*b1cdbd2cSJim Jagielski // reinit it
482*b1cdbd2cSJim Jagielski sal_uInt16 nPos = _pFilter->Count();
483*b1cdbd2cSJim Jagielski
484*b1cdbd2cSJim Jagielski // search for the first entry which is no group separator
485*b1cdbd2cSJim Jagielski while ( nPos-- && _pFilter->GetObject( nPos ) && _pFilter->GetObject( nPos )->isGroupSeparator() )
486*b1cdbd2cSJim Jagielski ;
487*b1cdbd2cSJim Jagielski
488*b1cdbd2cSJim Jagielski // add all following entries
489*b1cdbd2cSJim Jagielski while ( (sal_Int16)nPos >= 0 )
490*b1cdbd2cSJim Jagielski InsertFilterListEntry( _pFilter->GetObject( nPos-- ) );
491*b1cdbd2cSJim Jagielski }
492*b1cdbd2cSJim Jagielski
493*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
494*b1cdbd2cSJim Jagielski
CreateFilterListControl(Window * _pParent,const ResId & _rId)495*b1cdbd2cSJim Jagielski void SvtExpFileDlg_Impl::CreateFilterListControl( Window* _pParent, const ResId& _rId )
496*b1cdbd2cSJim Jagielski {
497*b1cdbd2cSJim Jagielski DBG_ASSERT( !_pLbFilter, "SvtExpFileDlg_Impl::CreateFilterListControl: already created the control!" );
498*b1cdbd2cSJim Jagielski if ( !_pLbFilter )
499*b1cdbd2cSJim Jagielski {
500*b1cdbd2cSJim Jagielski _pLbFilter = new ListBox( _pParent, _rId );
501*b1cdbd2cSJim Jagielski _pLbFilter->SetDropDownLineCount( 10 );
502*b1cdbd2cSJim Jagielski }
503*b1cdbd2cSJim Jagielski }
504