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