1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef _IODLGIMP_HXX 24 #define _IODLGIMP_HXX 25 26 #include <tools/string.hxx> 27 #include <vcl/fixed.hxx> 28 #include <vcl/lstbox.hxx> 29 #include <vcl/menubtn.hxx> 30 #include <vcl/timer.hxx> 31 #include <vcl/group.hxx> 32 33 #include "svl/svarray.hxx" 34 35 #include <vector> 36 37 //***************************************************************************** 38 39 class Accelerator; 40 class CheckBox; 41 class SvtFileDialog; 42 class SvStringsDtor; 43 class SvUShorts; 44 45 //***************************************************************************** 46 47 #define FILEDIALOG_DEF_EXTSEP ';' 48 #define FILEDIALOG_DEF_WILDCARD '*' 49 #define FILEDIALOG_DEF_IMAGEBORDER 10 50 #define FILEDIALOG_DEF_TIMEOUT 250 51 52 //***************************************************************************** 53 // SvtFileDialogFilter_Impl 54 //***************************************************************************** 55 56 /* [Beschreibung] 57 58 Instanzen dieser Klasse repr"asentieren einen Filter 59 */ 60 61 class SvtFileDialogFilter_Impl 62 { 63 private: 64 String m_aName; // name of the entry 65 String m_aType; // filter wildcard - if empty, the entry marks a group 66 67 public: 68 SvtFileDialogFilter_Impl( const String& rName, const String& rType ); 69 ~SvtFileDialogFilter_Impl(); 70 71 const String& GetName() const { return m_aName; } 72 const String& GetType() const { return m_aType; } 73 const String GetExtension() const { return m_aType.Copy( 2 ); } 74 75 sal_Bool isGroupSeparator() const { return 0 == m_aType.Len(); } 76 }; 77 78 //***************************************************************************** 79 // SvtFileDialogFilterList_Impl 80 //***************************************************************************** 81 82 SV_DECL_PTRARR_DEL( SvtFileDialogFilterList_Impl, SvtFileDialogFilter_Impl*, 3, 3 ) 83 84 //***************************************************************************** 85 // SvtFileDlgMode 86 //***************************************************************************** 87 88 enum SvtFileDlgMode 89 { 90 FILEDLG_MODE_OPEN = 0, 91 FILEDLG_MODE_SAVE = 1 92 }; 93 94 //***************************************************************************** 95 // SvtFileDlgType 96 //***************************************************************************** 97 98 enum SvtFileDlgType 99 { 100 FILEDLG_TYPE_FILEDLG = 0, 101 FILEDLG_TYPE_PATHDLG 102 }; 103 104 //***************************************************************************** 105 // SvtFileDialogURLSelector 106 //***************************************************************************** 107 class SvtFileDialogURLSelector : public MenuButton 108 { 109 private: 110 SvtFileDialog* m_pParent; 111 PopupMenu* m_pMenu; 112 113 protected: 114 inline SvtFileDialog* GetDialogParent() { return m_pParent; } 115 116 protected: 117 void OpenURL( const String& rURL ); 118 119 virtual void FillURLMenu( PopupMenu* _pMenu ) = 0; 120 121 protected: 122 SvtFileDialogURLSelector( SvtFileDialog* _pParent, const ResId& _rResId, sal_uInt16 _nButtonId ); 123 ~SvtFileDialogURLSelector(); 124 125 virtual void Activate(); 126 }; 127 128 //***************************************************************************** 129 // SvtUpButton_Impl 130 //***************************************************************************** 131 132 class SvtUpButton_Impl : public SvtFileDialogURLSelector 133 { 134 private: 135 SvStringsDtor* _pURLs; 136 137 public: 138 SvtUpButton_Impl( SvtFileDialog* pParent, const ResId& rResId ); 139 ~SvtUpButton_Impl(); 140 141 protected: 142 virtual void FillURLMenu( PopupMenu* _pMenu ); 143 virtual void Select(); 144 virtual void Click(); 145 }; 146 147 //***************************************************************************** 148 // SvtTravelButton_Impl 149 //***************************************************************************** 150 151 class SvtTravelButton_Impl : public SvtFileDialogURLSelector 152 { 153 private: 154 ::std::vector< String > m_aFavourites; 155 156 public: 157 SvtTravelButton_Impl( SvtFileDialog* pParent, const ResId& rResId ); 158 ~SvtTravelButton_Impl(); 159 160 void SetFavouriteLocations( const ::std::vector< String >& _rLocations ); 161 162 protected: 163 virtual void FillURLMenu( PopupMenu* _pMenu ); 164 virtual void Select(); 165 virtual void Click(); 166 }; 167 168 //***************************************************************************** 169 // SvtFileDlgState 170 //***************************************************************************** 171 172 typedef sal_uInt8 SvtFileDlgState; 173 174 #define FILEDLG_STATE_NONE ((SvtFileDlgState)0x00) 175 #define FILEDLG_STATE_REMOTE ((SvtFileDlgState)0x01) 176 177 //***************************************************************************** 178 // SvtExpFileDlg_Impl 179 //***************************************************************************** 180 class SvtURLBox; 181 class SvtExpFileDlg_Impl 182 { 183 private: 184 DECL_STATIC_LINK( SvtExpFileDlg_Impl, UnClickHdl, Button* ); 185 186 private: 187 ListBox* _pLbFilter; 188 189 const SvtFileDialogFilter_Impl* _pCurFilter; 190 String m_sCurrentFilterDisplayName; // may differ from _pCurFilter->GetName in case it is a cached entry 191 192 ::com::sun::star::uno::Sequence< ::rtl::OUString > _aBlackList; 193 194 public: 195 SvtFileDialogFilterList_Impl* _pFilter; 196 SvtFileDialogFilter_Impl* _pUserFilter; 197 198 FixedText* _pFtFileName; 199 SvtURLBox* _pEdFileName; 200 201 FixedText* _pFtFileVersion; 202 ListBox* _pLbFileVersion; 203 204 FixedText* _pFtTemplates; 205 ListBox* _pLbTemplates; 206 207 FixedText* _pFtImageTemplates; 208 ListBox* _pLbImageTemplates; 209 210 FixedText* _pFtFileType; 211 PushButton* _pBtnFileOpen; 212 PushButton* _pBtnCancel; 213 HelpButton* _pBtnHelp; 214 SvtUpButton_Impl* _pBtnUp; 215 ImageButton* _pBtnNewFolder; 216 SvtTravelButton_Impl* _pBtnStandard; 217 CheckBox* _pCbPassword; 218 FixedText* _pFtCurrentPath; 219 CheckBox* _pCbAutoExtension; 220 CheckBox* _pCbOptions; 221 222 SvtFileDlgMode _eMode; 223 SvtFileDlgType _eDlgType; 224 SvtFileDlgState _nState; 225 WinBits _nStyle; 226 227 String _aStdDir; 228 229 // beim traveln der Filterbox erst Zeitversetzt filtern 230 Timer _aFilterTimer; 231 232 // Zeigt der OpenHdl_Imp(), ob das Open durch einen Doppelclick ausgel"ost wurde 233 sal_Bool _bDoubleClick; 234 sal_Bool m_bNeedDelayedFilterExecute; 235 236 // Liste mit den 5 zuletzt genutzten Filtern 237 // Defaultfilter fuer <Alle> oder <Alle ...> 238 const SvtFileDialogFilter_Impl* _pDefaultFilter; 239 240 // Multiselektion? 241 sal_Bool _bMultiSelection; 242 243 // Fixgr"ossen f"ur Resize merken 244 long _nFixDeltaHeight; 245 Size _a6Size; 246 Size _aDlgSize; 247 String _aIniKey; 248 249 sal_Bool _bFolderHasOpened; 250 251 SvtExpFileDlg_Impl( WinBits nBits ); 252 ~SvtExpFileDlg_Impl(); 253 254 255 inline void SetBlackList( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList ) { _aBlackList = rBlackList; } 256 inline const ::com::sun::star::uno::Sequence< ::rtl::OUString >& GetBlackList() const { return _aBlackList; } 257 void SetStandardDir( const String& _rDir ); 258 inline const String& GetStandardDir() const { return _aStdDir; } 259 inline void DisableFilterBoxAutoWidth() { _pLbFilter->EnableDDAutoWidth( sal_False ); } 260 261 // ------------------------------------------ 262 // access to the filter listbox only as Control* - we want to maintain the entries/userdata ourself 263 Control* GetFilterListControl() { return _pLbFilter; } 264 const Control* GetFilterListControl() const { return _pLbFilter; } 265 void CreateFilterListControl( Window* _pParent, const ResId& _rId ); 266 inline void SetFilterListSelectHdl( const Link& _rHandler ); 267 268 // inits the listbox for the filters from the filter list (_pFilter) 269 void ClearFilterList( ); 270 void InitFilterList( ); 271 inline sal_Bool HasFilterListEntry( const String& _rFilterName ); 272 inline void SelectFilterListEntry( const String& _rFilterName ); 273 inline void SetNoFilterListSelection( ); 274 void InsertFilterListEntry( const SvtFileDialogFilter_Impl* _pFilterDesc ); 275 // _pFilterDesc must already have been added to _pFilter 276 inline SvtFileDialogFilter_Impl* GetSelectedFilterEntry( String& /* [out] */ _rDisplayName ) const; 277 inline sal_Bool IsFilterListTravelSelect() const; 278 279 // ------------------------------------------ 280 // access to the current filter via methods only - need to care for consistency between _pCurFilter and m_sCurrentFilterDisplayName 281 inline const SvtFileDialogFilter_Impl* GetCurFilter( ) const; 282 inline const String& GetCurFilterDisplayName() const; 283 void SetCurFilter( SvtFileDialogFilter_Impl* _pFilter, const String& _rDisplayName ); 284 inline void SetCurFilter( SvtFileDialogFilter_Impl* _pFilter ); 285 }; 286 287 inline void SvtExpFileDlg_Impl::SetFilterListSelectHdl( const Link& _rHandler ) 288 { 289 _pLbFilter->SetSelectHdl( _rHandler ); 290 } 291 292 inline sal_Bool SvtExpFileDlg_Impl::HasFilterListEntry( const String& _rFilterName ) 293 { 294 return ( LISTBOX_ENTRY_NOTFOUND != _pLbFilter->GetEntryPos( _rFilterName ) ); 295 } 296 297 inline void SvtExpFileDlg_Impl::SelectFilterListEntry( const String& _rFilterName ) 298 { 299 _pLbFilter->SelectEntry( _rFilterName ); 300 } 301 302 inline void SvtExpFileDlg_Impl::SetNoFilterListSelection( ) 303 { 304 _pLbFilter->SetNoSelection( ); 305 } 306 307 inline SvtFileDialogFilter_Impl* SvtExpFileDlg_Impl::GetSelectedFilterEntry( String& _rDisplayName ) const 308 { 309 _rDisplayName = _pLbFilter->GetSelectEntry(); 310 return static_cast< SvtFileDialogFilter_Impl* >( _pLbFilter->GetEntryData ( _pLbFilter->GetSelectEntryPos() ) ); 311 } 312 313 inline sal_Bool SvtExpFileDlg_Impl::IsFilterListTravelSelect() const 314 { 315 return _pLbFilter->IsTravelSelect(); 316 } 317 318 inline const SvtFileDialogFilter_Impl* SvtExpFileDlg_Impl::GetCurFilter( ) const 319 { 320 return _pCurFilter; 321 } 322 323 inline const String& SvtExpFileDlg_Impl::GetCurFilterDisplayName() const 324 { 325 return m_sCurrentFilterDisplayName; 326 } 327 328 inline void SvtExpFileDlg_Impl::SetCurFilter( SvtFileDialogFilter_Impl* pFilter ) 329 { 330 SetCurFilter( pFilter, pFilter->GetName() ); 331 } 332 333 #endif // #ifndef _IODLGIMP_HXX 334 335 336