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 #include <unistd.h> 29*cdf0e10cSrcweir #include <helper.hxx> 30*cdf0e10cSrcweir #ifndef _PAD_PADIALOG_HRC_ 31*cdf0e10cSrcweir #include <padialog.hrc> 32*cdf0e10cSrcweir #endif 33*cdf0e10cSrcweir #include <osl/file.hxx> 34*cdf0e10cSrcweir #include <tools/urlobj.hxx> 35*cdf0e10cSrcweir #include <vcl/svapp.hxx> 36*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 37*cdf0e10cSrcweir #include <tools/config.hxx> 38*cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp> 39*cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XFolderPicker.hpp> 40*cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XControlAccess.hpp> 41*cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 42*cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 43*cdf0e10cSrcweir #include <tools/urlobj.hxx> 44*cdf0e10cSrcweir #include <unotools/confignode.hxx> 45*cdf0e10cSrcweir #include <vcl/unohelp.hxx> 46*cdf0e10cSrcweir #include <i18npool/mslangid.hxx> 47*cdf0e10cSrcweir #include <rtl/ustrbuf.hxx> 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir using namespace osl; 51*cdf0e10cSrcweir using namespace rtl; 52*cdf0e10cSrcweir using namespace padmin; 53*cdf0e10cSrcweir using namespace com::sun::star::uno; 54*cdf0e10cSrcweir using namespace com::sun::star::lang; 55*cdf0e10cSrcweir using namespace com::sun::star::ui::dialogs; 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir #define MAX_PATH 1024 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir /* 60*cdf0e10cSrcweir * PaResId 61*cdf0e10cSrcweir */ 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir ResId padmin::PaResId( sal_uInt32 nId ) 64*cdf0e10cSrcweir { 65*cdf0e10cSrcweir static ResMgr* pPaResMgr = NULL; 66*cdf0e10cSrcweir if( ! pPaResMgr ) 67*cdf0e10cSrcweir { 68*cdf0e10cSrcweir ::com::sun::star::lang::Locale aLocale; 69*cdf0e10cSrcweir // LanguageType nLang = LANGUAGE_SYSTEM; 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir utl::OConfigurationNode aNode = 72*cdf0e10cSrcweir utl::OConfigurationTreeRoot::tryCreateWithServiceFactory( 73*cdf0e10cSrcweir vcl::unohelper::GetMultiServiceFactory(), 74*cdf0e10cSrcweir OUString::createFromAscii( "org.openoffice.Setup/L10N" ) ); 75*cdf0e10cSrcweir if ( aNode.isValid() ) 76*cdf0e10cSrcweir { 77*cdf0e10cSrcweir rtl::OUString aLoc; 78*cdf0e10cSrcweir Any aValue = aNode.getNodeValue( OUString::createFromAscii( "ooLocale" ) ); 79*cdf0e10cSrcweir if( aValue >>= aLoc ) 80*cdf0e10cSrcweir { 81*cdf0e10cSrcweir // LanguageType nTmpLang = MsLangId::convertIsoStringToLanguage( aLoc ); 82*cdf0e10cSrcweir // if( nTmpLang != LANGUAGE_DONTKNOW ) 83*cdf0e10cSrcweir // nLang = nTmpLang; 84*cdf0e10cSrcweir sal_Int32 nIndex = 0; 85*cdf0e10cSrcweir aLocale.Language = aLoc.getToken( 0, '-', nIndex ); 86*cdf0e10cSrcweir aLocale.Country = aLoc.getToken( 0, '-', nIndex ); 87*cdf0e10cSrcweir aLocale.Variant = aLoc.getToken( 0, '-', nIndex ); 88*cdf0e10cSrcweir } 89*cdf0e10cSrcweir } 90*cdf0e10cSrcweir pPaResMgr = ResMgr::SearchCreateResMgr( "spa", aLocale ); 91*cdf0e10cSrcweir AllSettings aSettings = Application::GetSettings(); 92*cdf0e10cSrcweir // aSettings.SetUILanguage( nLang ); 93*cdf0e10cSrcweir aSettings.SetUILocale( aLocale ); 94*cdf0e10cSrcweir Application::SetSettings( aSettings ); 95*cdf0e10cSrcweir } 96*cdf0e10cSrcweir return ResId( nId, *pPaResMgr ); 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir /* 100*cdf0e10cSrcweir * FindFiles 101*cdf0e10cSrcweir */ 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir void padmin::FindFiles( const String& rDirectory, ::std::list< String >& rResult, const String& rSuffixes, bool bRecursive ) 104*cdf0e10cSrcweir { 105*cdf0e10cSrcweir rResult.clear(); 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir OUString aDirPath; 108*cdf0e10cSrcweir ::osl::FileBase::getFileURLFromSystemPath( rDirectory, aDirPath ); 109*cdf0e10cSrcweir Directory aDir( aDirPath ); 110*cdf0e10cSrcweir if( aDir.open() != FileBase::E_None ) 111*cdf0e10cSrcweir return; 112*cdf0e10cSrcweir DirectoryItem aItem; 113*cdf0e10cSrcweir while( aDir.getNextItem( aItem ) == FileBase::E_None ) 114*cdf0e10cSrcweir { 115*cdf0e10cSrcweir FileStatus aStatus( FileStatusMask_FileName | 116*cdf0e10cSrcweir FileStatusMask_Type 117*cdf0e10cSrcweir ); 118*cdf0e10cSrcweir if( aItem.getFileStatus( aStatus ) == FileBase::E_None ) 119*cdf0e10cSrcweir { 120*cdf0e10cSrcweir if( aStatus.getFileType() == FileStatus::Regular || 121*cdf0e10cSrcweir aStatus.getFileType() == FileStatus::Link ) 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir String aFileName = aStatus.getFileName(); 124*cdf0e10cSrcweir int nToken = rSuffixes.GetTokenCount( ';' ); 125*cdf0e10cSrcweir while( nToken-- ) 126*cdf0e10cSrcweir { 127*cdf0e10cSrcweir String aSuffix = rSuffixes.GetToken( nToken, ';' ); 128*cdf0e10cSrcweir if( aFileName.Len() > aSuffix.Len()+1 ) 129*cdf0e10cSrcweir { 130*cdf0e10cSrcweir String aExtension = aFileName.Copy( aFileName.Len()-aSuffix.Len() ); 131*cdf0e10cSrcweir if( aFileName.GetChar( aFileName.Len()-aSuffix.Len()-1 ) == '.' && 132*cdf0e10cSrcweir aExtension.EqualsIgnoreCaseAscii( aSuffix ) ) 133*cdf0e10cSrcweir { 134*cdf0e10cSrcweir rResult.push_back( aFileName ); 135*cdf0e10cSrcweir break; 136*cdf0e10cSrcweir } 137*cdf0e10cSrcweir } 138*cdf0e10cSrcweir } 139*cdf0e10cSrcweir } 140*cdf0e10cSrcweir else if( bRecursive && aStatus.getFileType() == FileStatus::Directory ) 141*cdf0e10cSrcweir { 142*cdf0e10cSrcweir OUStringBuffer aSubDir( rDirectory ); 143*cdf0e10cSrcweir aSubDir.appendAscii( "/", 1 ); 144*cdf0e10cSrcweir aSubDir.append( aStatus.getFileName() ); 145*cdf0e10cSrcweir std::list< String > subfiles; 146*cdf0e10cSrcweir FindFiles( aSubDir.makeStringAndClear(), subfiles, rSuffixes, bRecursive ); 147*cdf0e10cSrcweir for( std::list< String >::const_iterator it = subfiles.begin(); it != subfiles.end(); ++it ) 148*cdf0e10cSrcweir { 149*cdf0e10cSrcweir OUStringBuffer aSubFile( aStatus.getFileName() ); 150*cdf0e10cSrcweir aSubFile.appendAscii( "/", 1 ); 151*cdf0e10cSrcweir aSubFile.append( *it ); 152*cdf0e10cSrcweir rResult.push_back( aSubFile.makeStringAndClear() ); 153*cdf0e10cSrcweir } 154*cdf0e10cSrcweir } 155*cdf0e10cSrcweir } 156*cdf0e10cSrcweir } 157*cdf0e10cSrcweir aDir.close(); 158*cdf0e10cSrcweir } 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir /* 161*cdf0e10cSrcweir * DelMultiListBox 162*cdf0e10cSrcweir */ 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir long DelMultiListBox::Notify( NotifyEvent& rEvent ) 165*cdf0e10cSrcweir { 166*cdf0e10cSrcweir long nRet = 0; 167*cdf0e10cSrcweir 168*cdf0e10cSrcweir if( rEvent.GetType() == EVENT_KEYINPUT && 169*cdf0e10cSrcweir rEvent.GetKeyEvent()->GetKeyCode().GetCode() == KEY_DELETE ) 170*cdf0e10cSrcweir { 171*cdf0e10cSrcweir m_aDelPressedLink.Call( this ); 172*cdf0e10cSrcweir nRet = 1; 173*cdf0e10cSrcweir } 174*cdf0e10cSrcweir else 175*cdf0e10cSrcweir nRet = MultiListBox::Notify( rEvent ); 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir return nRet; 178*cdf0e10cSrcweir } 179*cdf0e10cSrcweir 180*cdf0e10cSrcweir /* 181*cdf0e10cSrcweir * DelListBox 182*cdf0e10cSrcweir */ 183*cdf0e10cSrcweir 184*cdf0e10cSrcweir long DelListBox::Notify( NotifyEvent& rEvent ) 185*cdf0e10cSrcweir { 186*cdf0e10cSrcweir long nRet = 0; 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir if( rEvent.GetType() == EVENT_KEYINPUT && 189*cdf0e10cSrcweir rEvent.GetKeyEvent()->GetKeyCode().GetCode() == KEY_DELETE ) 190*cdf0e10cSrcweir { 191*cdf0e10cSrcweir m_aDelPressedLink.Call( this ); 192*cdf0e10cSrcweir nRet = 1; 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir else 195*cdf0e10cSrcweir nRet = ListBox::Notify( rEvent ); 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir return nRet; 198*cdf0e10cSrcweir } 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir /* 201*cdf0e10cSrcweir * QueryString 202*cdf0e10cSrcweir */ 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir QueryString::QueryString( Window* pParent, String& rQuery, String& rRet, const ::std::list< String >& rChoices ) : 205*cdf0e10cSrcweir ModalDialog( pParent, PaResId( RID_STRINGQUERYDLG ) ), 206*cdf0e10cSrcweir m_aOKButton( this, PaResId( RID_STRQRY_BTN_OK ) ), 207*cdf0e10cSrcweir m_aCancelButton( this, PaResId( RID_STRQRY_BTN_CANCEL ) ), 208*cdf0e10cSrcweir m_aFixedText( this, PaResId( RID_STRQRY_TXT_RENAME ) ), 209*cdf0e10cSrcweir m_aEdit( this, PaResId( RID_STRQRY_EDT_NEWNAME ) ), 210*cdf0e10cSrcweir m_aComboBox( this, PaResId( RID_STRQRY_BOX_NEWNAME ) ), 211*cdf0e10cSrcweir m_rReturnValue( rRet ) 212*cdf0e10cSrcweir { 213*cdf0e10cSrcweir FreeResource(); 214*cdf0e10cSrcweir m_aOKButton.SetClickHdl( LINK( this, QueryString, ClickBtnHdl ) ); 215*cdf0e10cSrcweir m_aFixedText.SetText( rQuery ); 216*cdf0e10cSrcweir if( rChoices.begin() != rChoices.end() ) 217*cdf0e10cSrcweir { 218*cdf0e10cSrcweir m_aComboBox.SetText( m_rReturnValue ); 219*cdf0e10cSrcweir m_aComboBox.InsertEntry( m_rReturnValue ); 220*cdf0e10cSrcweir for( ::std::list<String>::const_iterator it = rChoices.begin(); it != rChoices.end(); ++it ) 221*cdf0e10cSrcweir m_aComboBox.InsertEntry( *it ); 222*cdf0e10cSrcweir m_aEdit.Show( sal_False ); 223*cdf0e10cSrcweir m_bUseEdit = false; 224*cdf0e10cSrcweir } 225*cdf0e10cSrcweir else 226*cdf0e10cSrcweir { 227*cdf0e10cSrcweir m_aEdit.SetText( m_rReturnValue ); 228*cdf0e10cSrcweir m_aComboBox.Show( sal_False ); 229*cdf0e10cSrcweir m_bUseEdit = true; 230*cdf0e10cSrcweir } 231*cdf0e10cSrcweir SetText( Application::GetDisplayName() ); 232*cdf0e10cSrcweir } 233*cdf0e10cSrcweir 234*cdf0e10cSrcweir QueryString::~QueryString() 235*cdf0e10cSrcweir { 236*cdf0e10cSrcweir } 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir IMPL_LINK( QueryString, ClickBtnHdl, Button*, pButton ) 239*cdf0e10cSrcweir { 240*cdf0e10cSrcweir if( pButton == &m_aOKButton ) 241*cdf0e10cSrcweir { 242*cdf0e10cSrcweir m_rReturnValue = m_bUseEdit ? m_aEdit.GetText() : m_aComboBox.GetText(); 243*cdf0e10cSrcweir EndDialog( 1 ); 244*cdf0e10cSrcweir } 245*cdf0e10cSrcweir else 246*cdf0e10cSrcweir EndDialog(0); 247*cdf0e10cSrcweir return 0; 248*cdf0e10cSrcweir } 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir /* 251*cdf0e10cSrcweir * AreYouSure 252*cdf0e10cSrcweir */ 253*cdf0e10cSrcweir 254*cdf0e10cSrcweir sal_Bool padmin::AreYouSure( Window* pParent, int nRid ) 255*cdf0e10cSrcweir { 256*cdf0e10cSrcweir if( nRid == -1 ) 257*cdf0e10cSrcweir nRid = RID_YOU_SURE; 258*cdf0e10cSrcweir QueryBox aQueryBox( pParent, WB_YES_NO | WB_DEF_NO, 259*cdf0e10cSrcweir String( PaResId( nRid ) ) ); 260*cdf0e10cSrcweir return aQueryBox.Execute() == RET_NO ? sal_False : sal_True; 261*cdf0e10cSrcweir } 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir /* 264*cdf0e10cSrcweir * getPadminRC 265*cdf0e10cSrcweir */ 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir static Config* pRC = NULL; 268*cdf0e10cSrcweir 269*cdf0e10cSrcweir Config& padmin::getPadminRC() 270*cdf0e10cSrcweir { 271*cdf0e10cSrcweir if( ! pRC ) 272*cdf0e10cSrcweir { 273*cdf0e10cSrcweir static const char* pEnv = getenv( "HOME" ); 274*cdf0e10cSrcweir String aFileName( pEnv ? pEnv : "", osl_getThreadTextEncoding() ); 275*cdf0e10cSrcweir aFileName.AppendAscii( "/.padminrc" ); 276*cdf0e10cSrcweir pRC = new Config( aFileName ); 277*cdf0e10cSrcweir } 278*cdf0e10cSrcweir return *pRC; 279*cdf0e10cSrcweir } 280*cdf0e10cSrcweir 281*cdf0e10cSrcweir void padmin::freePadminRC() 282*cdf0e10cSrcweir { 283*cdf0e10cSrcweir if( pRC ) 284*cdf0e10cSrcweir delete pRC, pRC = NULL; 285*cdf0e10cSrcweir } 286*cdf0e10cSrcweir 287*cdf0e10cSrcweir bool padmin::chooseDirectory( String& rInOutPath ) 288*cdf0e10cSrcweir { 289*cdf0e10cSrcweir bool bRet = false; 290*cdf0e10cSrcweir Reference< XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); 291*cdf0e10cSrcweir if( xFactory.is() ) 292*cdf0e10cSrcweir { 293*cdf0e10cSrcweir Reference< XFolderPicker > xFolderPicker( xFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FolderPicker" ) ) ), UNO_QUERY ); 294*cdf0e10cSrcweir if( xFolderPicker.is() ) 295*cdf0e10cSrcweir { 296*cdf0e10cSrcweir Reference< XControlAccess > xCA( xFolderPicker, UNO_QUERY ); 297*cdf0e10cSrcweir if( xCA.is() ) 298*cdf0e10cSrcweir { 299*cdf0e10cSrcweir try 300*cdf0e10cSrcweir { 301*cdf0e10cSrcweir Any aState; 302*cdf0e10cSrcweir aState <<= sal_False; 303*cdf0e10cSrcweir xCA->setControlProperty( OUString( RTL_CONSTASCII_USTRINGPARAM( "HelpButton" ) ), 304*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM( "Visible" ) ), 305*cdf0e10cSrcweir aState ); 306*cdf0e10cSrcweir 307*cdf0e10cSrcweir } 308*cdf0e10cSrcweir catch( ... ) 309*cdf0e10cSrcweir { 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir } 312*cdf0e10cSrcweir INetURLObject aObj( rInOutPath, INET_PROT_FILE, INetURLObject::ENCODE_ALL ); 313*cdf0e10cSrcweir xFolderPicker->setDisplayDirectory( aObj.GetMainURL(INetURLObject::DECODE_TO_IURI) ); 314*cdf0e10cSrcweir if( xFolderPicker->execute() == ExecutableDialogResults::OK ) 315*cdf0e10cSrcweir { 316*cdf0e10cSrcweir aObj = INetURLObject( xFolderPicker->getDirectory() ); 317*cdf0e10cSrcweir rInOutPath = aObj.PathToFileName(); 318*cdf0e10cSrcweir bRet = true; 319*cdf0e10cSrcweir } 320*cdf0e10cSrcweir } 321*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 322*cdf0e10cSrcweir else 323*cdf0e10cSrcweir fprintf( stderr, "could not get FolderPicker service\n" ); 324*cdf0e10cSrcweir #endif 325*cdf0e10cSrcweir } 326*cdf0e10cSrcweir return bRet; 327*cdf0e10cSrcweir } 328