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