1cdf0e10cSrcweir /*************************************************************************
2cdf0e10cSrcweir  *
3cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4cdf0e10cSrcweir  *
5cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6cdf0e10cSrcweir  *
7cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8cdf0e10cSrcweir  *
9cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10cdf0e10cSrcweir  *
11cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14cdf0e10cSrcweir  *
15cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20cdf0e10cSrcweir  *
21cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25cdf0e10cSrcweir  *
26cdf0e10cSrcweir  ************************************************************************/
27cdf0e10cSrcweir 
28cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29cdf0e10cSrcweir #include "precompiled_fpicker.hxx"
30cdf0e10cSrcweir 
31cdf0e10cSrcweir //------------------------------------------------------------------------
32cdf0e10cSrcweir // includes
33cdf0e10cSrcweir //------------------------------------------------------------------------
34cdf0e10cSrcweir #include <osl/diagnose.h>
35cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
36cdf0e10cSrcweir #include "resourceprovider.hxx"
37cdf0e10cSrcweir #include <vos/mutex.hxx>
38cdf0e10cSrcweir #include <vcl/svapp.hxx>
39cdf0e10cSrcweir #include <tools/resmgr.hxx>
40cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/CommonFilePickerElementIds.hpp>
41cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
42cdf0e10cSrcweir 
43cdf0e10cSrcweir #include <svtools/svtools.hrc>
44cdf0e10cSrcweir #include <svtools/filedlg2.hrc>
45cdf0e10cSrcweir 
46cdf0e10cSrcweir //------------------------------------------------------------
47cdf0e10cSrcweir // namespace directives
48cdf0e10cSrcweir //------------------------------------------------------------
49cdf0e10cSrcweir 
50cdf0e10cSrcweir using rtl::OUString;
51cdf0e10cSrcweir using namespace ::com::sun::star::ui::dialogs::ExtendedFilePickerElementIds;
52cdf0e10cSrcweir using namespace ::com::sun::star::ui::dialogs::CommonFilePickerElementIds;
53cdf0e10cSrcweir 
54cdf0e10cSrcweir //------------------------------------------------------------
55cdf0e10cSrcweir //
56cdf0e10cSrcweir //------------------------------------------------------------
57cdf0e10cSrcweir 
58cdf0e10cSrcweir static const char* RES_NAME = "fps_office";
59cdf0e10cSrcweir static const char* OTHER_RES_NAME = "svt";
60cdf0e10cSrcweir 
61cdf0e10cSrcweir //------------------------------------------------------------
62cdf0e10cSrcweir // we have to translate control ids to resource ids
63cdf0e10cSrcweir //------------------------------------------------------------
64cdf0e10cSrcweir 
65cdf0e10cSrcweir struct _Entry
66cdf0e10cSrcweir {
67cdf0e10cSrcweir     sal_Int32 ctrlId;
68cdf0e10cSrcweir     sal_Int16 resId;
69cdf0e10cSrcweir };
70cdf0e10cSrcweir 
71cdf0e10cSrcweir _Entry CtrlIdToResIdTable[] = {
72cdf0e10cSrcweir     { CHECKBOX_AUTOEXTENSION,                   STR_SVT_FILEPICKER_AUTO_EXTENSION },
73cdf0e10cSrcweir     { CHECKBOX_PASSWORD,                        STR_SVT_FILEPICKER_PASSWORD },
74cdf0e10cSrcweir     { CHECKBOX_FILTEROPTIONS,                   STR_SVT_FILEPICKER_FILTER_OPTIONS },
75cdf0e10cSrcweir     { CHECKBOX_READONLY,                        STR_SVT_FILEPICKER_READONLY },
76cdf0e10cSrcweir     { CHECKBOX_LINK,                            STR_SVT_FILEPICKER_INSERT_AS_LINK },
77cdf0e10cSrcweir     { CHECKBOX_PREVIEW,                         STR_SVT_FILEPICKER_SHOW_PREVIEW },
78cdf0e10cSrcweir     { PUSHBUTTON_PLAY,                          STR_SVT_FILEPICKER_PLAY },
79cdf0e10cSrcweir     { LISTBOX_VERSION_LABEL,                    STR_SVT_FILEPICKER_VERSION },
80cdf0e10cSrcweir     { LISTBOX_TEMPLATE_LABEL,                   STR_SVT_FILEPICKER_TEMPLATES },
81cdf0e10cSrcweir     { LISTBOX_IMAGE_TEMPLATE_LABEL,             STR_SVT_FILEPICKER_IMAGE_TEMPLATE },
82cdf0e10cSrcweir     { CHECKBOX_SELECTION,                       STR_SVT_FILEPICKER_SELECTION },
83cdf0e10cSrcweir     { FOLDERPICKER_TITLE,                       STR_SVT_FOLDERPICKER_DEFAULT_TITLE },
84cdf0e10cSrcweir     { FOLDER_PICKER_DEF_DESCRIPTION,            STR_SVT_FOLDERPICKER_DEFAULT_DESCRIPTION },
85*e5d951fcSPedro Giffuni     { FILE_PICKER_OVERWRITE,                    STR_SVT_ALREADYEXISTOVERWRITE },
86*e5d951fcSPedro Giffuni     { FILE_PICKER_ALLFORMATS,                   STR_SVT_ALLFORMATS }
87cdf0e10cSrcweir };
88cdf0e10cSrcweir 
89cdf0e10cSrcweir _Entry OtherCtrlIdToResIdTable[] = {
90cdf0e10cSrcweir     { FILE_PICKER_TITLE_OPEN,                   STR_FILEDLG_OPEN },
91cdf0e10cSrcweir     { FILE_PICKER_TITLE_SAVE,                   STR_FILEDLG_SAVE },
92cdf0e10cSrcweir     { FILE_PICKER_FILE_TYPE,                    STR_FILEDLG_TYPE },
93cdf0e10cSrcweir };
94cdf0e10cSrcweir 
95cdf0e10cSrcweir 
96cdf0e10cSrcweir const sal_Int32 SIZE_TABLE = sizeof( CtrlIdToResIdTable ) / sizeof( _Entry );
97cdf0e10cSrcweir const sal_Int32 OTHER_SIZE_TABLE = sizeof( OtherCtrlIdToResIdTable ) / sizeof( _Entry );
98cdf0e10cSrcweir 
99cdf0e10cSrcweir //------------------------------------------------------------
100cdf0e10cSrcweir //
101cdf0e10cSrcweir //------------------------------------------------------------
102cdf0e10cSrcweir 
103cdf0e10cSrcweir sal_Int16 CtrlIdToResId( sal_Int32 aControlId )
104cdf0e10cSrcweir {
105cdf0e10cSrcweir     sal_Int16 aResId = -1;
106cdf0e10cSrcweir 
107cdf0e10cSrcweir     for ( sal_Int32 i = 0; i < SIZE_TABLE; i++ )
108cdf0e10cSrcweir     {
109cdf0e10cSrcweir         if ( CtrlIdToResIdTable[i].ctrlId == aControlId )
110cdf0e10cSrcweir         {
111cdf0e10cSrcweir             aResId = CtrlIdToResIdTable[i].resId;
112cdf0e10cSrcweir             break;
113cdf0e10cSrcweir         }
114cdf0e10cSrcweir     }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir     return aResId;
117cdf0e10cSrcweir }
118cdf0e10cSrcweir 
119cdf0e10cSrcweir sal_Int16 OtherCtrlIdToResId( sal_Int32 aControlId )
120cdf0e10cSrcweir {
121cdf0e10cSrcweir     sal_Int16 aResId = -1;
122cdf0e10cSrcweir 
123cdf0e10cSrcweir     for ( sal_Int32 i = 0; i < OTHER_SIZE_TABLE; i++ )
124cdf0e10cSrcweir     {
125cdf0e10cSrcweir         if ( OtherCtrlIdToResIdTable[i].ctrlId == aControlId )
126cdf0e10cSrcweir         {
127cdf0e10cSrcweir             aResId = OtherCtrlIdToResIdTable[i].resId;
128cdf0e10cSrcweir             break;
129cdf0e10cSrcweir         }
130cdf0e10cSrcweir     }
131cdf0e10cSrcweir 
132cdf0e10cSrcweir     return aResId;
133cdf0e10cSrcweir }
134cdf0e10cSrcweir 
135cdf0e10cSrcweir //------------------------------------------------------------
136cdf0e10cSrcweir //
137cdf0e10cSrcweir //------------------------------------------------------------
138cdf0e10cSrcweir 
139cdf0e10cSrcweir class CResourceProvider_Impl
140cdf0e10cSrcweir {
141cdf0e10cSrcweir public:
142cdf0e10cSrcweir 
143cdf0e10cSrcweir     //-------------------------------------
144cdf0e10cSrcweir     //
145cdf0e10cSrcweir     //-------------------------------------
146cdf0e10cSrcweir 
147cdf0e10cSrcweir     CResourceProvider_Impl( )
148cdf0e10cSrcweir     {
149cdf0e10cSrcweir         m_ResMgr = ResMgr::CreateResMgr( RES_NAME );
150cdf0e10cSrcweir         m_OtherResMgr = ResMgr::CreateResMgr( OTHER_RES_NAME );
151cdf0e10cSrcweir     }
152cdf0e10cSrcweir 
153cdf0e10cSrcweir     //-------------------------------------
154cdf0e10cSrcweir     //
155cdf0e10cSrcweir     //-------------------------------------
156cdf0e10cSrcweir 
157cdf0e10cSrcweir     ~CResourceProvider_Impl( )
158cdf0e10cSrcweir     {
159cdf0e10cSrcweir         delete m_ResMgr;
160cdf0e10cSrcweir         delete m_OtherResMgr;
161cdf0e10cSrcweir     }
162cdf0e10cSrcweir 
163cdf0e10cSrcweir     //-------------------------------------
164cdf0e10cSrcweir     //
165cdf0e10cSrcweir     //-------------------------------------
166cdf0e10cSrcweir 
167cdf0e10cSrcweir     OUString getResString( sal_Int16 aId )
168cdf0e10cSrcweir     {
169cdf0e10cSrcweir         String   aResString;
170cdf0e10cSrcweir         OUString aResOUString;
171cdf0e10cSrcweir 
172cdf0e10cSrcweir         try
173cdf0e10cSrcweir         {
174cdf0e10cSrcweir             OSL_ASSERT( m_ResMgr && m_OtherResMgr );
175cdf0e10cSrcweir 
176cdf0e10cSrcweir             // translate the control id to a resource id
177cdf0e10cSrcweir             sal_Int16 aResId = CtrlIdToResId( aId );
178cdf0e10cSrcweir             if ( aResId > -1 )
179cdf0e10cSrcweir                 aResString = String( ResId( aResId, *m_ResMgr ) );
180cdf0e10cSrcweir 	    else
181cdf0e10cSrcweir 	    {
182cdf0e10cSrcweir                 aResId = OtherCtrlIdToResId( aId );
183cdf0e10cSrcweir                 if ( aResId > -1 )
184cdf0e10cSrcweir                     aResString = String( ResId( aResId, *m_OtherResMgr ) );
185cdf0e10cSrcweir 	    }
186cdf0e10cSrcweir 	    if ( aResId > -1 )
187cdf0e10cSrcweir                 aResOUString = OUString( aResString );
188cdf0e10cSrcweir         }
189cdf0e10cSrcweir         catch(...)
190cdf0e10cSrcweir         {
191cdf0e10cSrcweir         }
192cdf0e10cSrcweir 
193cdf0e10cSrcweir         return aResOUString;
194cdf0e10cSrcweir     }
195cdf0e10cSrcweir 
196cdf0e10cSrcweir public:
197cdf0e10cSrcweir     ResMgr* m_ResMgr;
198cdf0e10cSrcweir     ResMgr* m_OtherResMgr;
199cdf0e10cSrcweir };
200cdf0e10cSrcweir 
201cdf0e10cSrcweir //------------------------------------------------------------
202cdf0e10cSrcweir //
203cdf0e10cSrcweir //------------------------------------------------------------
204cdf0e10cSrcweir 
205cdf0e10cSrcweir CResourceProvider::CResourceProvider( ) :
206cdf0e10cSrcweir     m_pImpl( new CResourceProvider_Impl() )
207cdf0e10cSrcweir {
208cdf0e10cSrcweir }
209cdf0e10cSrcweir 
210cdf0e10cSrcweir //------------------------------------------------------------
211cdf0e10cSrcweir //
212cdf0e10cSrcweir //------------------------------------------------------------
213cdf0e10cSrcweir 
214cdf0e10cSrcweir CResourceProvider::~CResourceProvider( )
215cdf0e10cSrcweir {
216cdf0e10cSrcweir     delete m_pImpl;
217cdf0e10cSrcweir }
218cdf0e10cSrcweir 
219cdf0e10cSrcweir //------------------------------------------------------------
220cdf0e10cSrcweir //
221cdf0e10cSrcweir //------------------------------------------------------------
222cdf0e10cSrcweir 
223cdf0e10cSrcweir OUString CResourceProvider::getResString( sal_Int32 aId )
224cdf0e10cSrcweir {
225cdf0e10cSrcweir    return m_pImpl->getResString( aId ).replace('~', '_');
226cdf0e10cSrcweir }
227