xref: /AOO41X/main/fpicker/source/office/iodlgimp.hxx (revision 10ce801889b00990ebdbcb412f4f91e2a9e6f21d)
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 
GetName() const71     const String&       GetName() const     { return m_aName; }
GetType() const72     const String&       GetType() const     { return m_aType; }
GetExtension() const73     const String        GetExtension() const    { return m_aType.Copy( 2 ); }
74 
isGroupSeparator() const75     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:
GetDialogParent()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 
SetBlackList(const::com::sun::star::uno::Sequence<::rtl::OUString> & rBlackList)255     inline void             SetBlackList( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList ) { _aBlackList = rBlackList; }
GetBlackList() const256     inline const ::com::sun::star::uno::Sequence< ::rtl::OUString >& GetBlackList() const { return _aBlackList; }
257     void                    SetStandardDir( const String& _rDir );
GetStandardDir() const258     inline const String&    GetStandardDir() const          { return _aStdDir; }
DisableFilterBoxAutoWidth()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
GetFilterListControl()263             Control*        GetFilterListControl()          { return _pLbFilter; }
GetFilterListControl() const264             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 
SetFilterListSelectHdl(const Link & _rHandler)287 inline void SvtExpFileDlg_Impl::SetFilterListSelectHdl( const Link& _rHandler )
288 {
289     _pLbFilter->SetSelectHdl( _rHandler );
290 }
291 
HasFilterListEntry(const String & _rFilterName)292 inline sal_Bool SvtExpFileDlg_Impl::HasFilterListEntry( const String& _rFilterName )
293 {
294     return ( LISTBOX_ENTRY_NOTFOUND != _pLbFilter->GetEntryPos( _rFilterName ) );
295 }
296 
SelectFilterListEntry(const String & _rFilterName)297 inline void SvtExpFileDlg_Impl::SelectFilterListEntry( const String& _rFilterName )
298 {
299     _pLbFilter->SelectEntry( _rFilterName );
300 }
301 
SetNoFilterListSelection()302 inline  void SvtExpFileDlg_Impl::SetNoFilterListSelection( )
303 {
304     _pLbFilter->SetNoSelection( );
305 }
306 
GetSelectedFilterEntry(String & _rDisplayName) const307 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 
IsFilterListTravelSelect() const313 inline sal_Bool SvtExpFileDlg_Impl::IsFilterListTravelSelect() const
314 {
315     return _pLbFilter->IsTravelSelect();
316 }
317 
GetCurFilter() const318 inline const SvtFileDialogFilter_Impl* SvtExpFileDlg_Impl::GetCurFilter( ) const
319 {
320     return _pCurFilter;
321 }
322 
GetCurFilterDisplayName() const323 inline const String& SvtExpFileDlg_Impl::GetCurFilterDisplayName() const
324 {
325     return m_sCurrentFilterDisplayName;
326 }
327 
SetCurFilter(SvtFileDialogFilter_Impl * pFilter)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