1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski #ifndef _WINFILEOPENIMPL_HXX_ 26*b1cdbd2cSJim Jagielski #define _WINFILEOPENIMPL_HXX_ 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ 29*b1cdbd2cSJim Jagielski // includes 30*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_UI_DIALOGS_XEXTENDEDFILEPICKER_HPP_ 33*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> 34*b1cdbd2cSJim Jagielski #endif 35*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/FilePickerEvent.hpp> 36*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XFilterGroupManager.hpp> 37*b1cdbd2cSJim Jagielski #include "FilterContainer.hxx" 38*b1cdbd2cSJim Jagielski #include "FileOpenDlg.hxx" 39*b1cdbd2cSJim Jagielski #include "previewadapter.hxx" 40*b1cdbd2cSJim Jagielski #include "helppopupwindow.hxx" 41*b1cdbd2cSJim Jagielski #include "customcontrol.hxx" 42*b1cdbd2cSJim Jagielski #include "customcontrolfactory.hxx" 43*b1cdbd2cSJim Jagielski #include "..\misc\resourceprovider.hxx" 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski #include <utility> 46*b1cdbd2cSJim Jagielski #include <memory> 47*b1cdbd2cSJim Jagielski #include <vector> 48*b1cdbd2cSJim Jagielski #include <osl/conditn.hxx> 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ 51*b1cdbd2cSJim Jagielski // deklarations 52*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski // forward declaration 55*b1cdbd2cSJim Jagielski class CFilePicker; 56*b1cdbd2cSJim Jagielski class CFilePickerState; 57*b1cdbd2cSJim Jagielski class CExecuteFilePickerState; 58*b1cdbd2cSJim Jagielski class CNonExecuteFilePickerState; 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski class CWinFileOpenImpl : public CFileOpenDialog 61*b1cdbd2cSJim Jagielski { 62*b1cdbd2cSJim Jagielski public: 63*b1cdbd2cSJim Jagielski CWinFileOpenImpl( 64*b1cdbd2cSJim Jagielski CFilePicker* aFilePicker, 65*b1cdbd2cSJim Jagielski sal_Bool bFileOpenDialog = sal_True, 66*b1cdbd2cSJim Jagielski sal_uInt32 dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 67*b1cdbd2cSJim Jagielski sal_uInt32 dwTemplateId = 0, 68*b1cdbd2cSJim Jagielski HINSTANCE hInstance = 0 ); 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski virtual ~CWinFileOpenImpl( ); 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------------------- 73*b1cdbd2cSJim Jagielski // XExecutableDialog 74*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------------------- 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski virtual sal_Int16 SAL_CALL execute( ) throw( ::com::sun::star::uno::RuntimeException ); 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------------------- 79*b1cdbd2cSJim Jagielski // XFilePicker 80*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------------------- 81*b1cdbd2cSJim Jagielski 82*b1cdbd2cSJim Jagielski virtual void SAL_CALL setDefaultName( const ::rtl::OUString& aName ) 83*b1cdbd2cSJim Jagielski throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles( ) 86*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException ); 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski virtual void SAL_CALL setDisplayDirectory( const ::rtl::OUString& aDirectory ) 89*b1cdbd2cSJim Jagielski throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getDisplayDirectory( ) throw ( ::com::sun::star::uno::RuntimeException ); 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------------------- 94*b1cdbd2cSJim Jagielski // XFilterManager 95*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------------------- 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski virtual void SAL_CALL appendFilter( const ::rtl::OUString& aTitle, const ::rtl::OUString& aFilter ) 98*b1cdbd2cSJim Jagielski throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski virtual void SAL_CALL setCurrentFilter( const ::rtl::OUString& aTitle ) 101*b1cdbd2cSJim Jagielski throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getCurrentFilter( ) 104*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------------------- 107*b1cdbd2cSJim Jagielski // XFilterGroupManager 108*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------------------- 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski virtual void SAL_CALL appendFilterGroup( const ::rtl::OUString& sGroupTitle, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair >& aFilters ) 111*b1cdbd2cSJim Jagielski throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------------------- 114*b1cdbd2cSJim Jagielski // XFilePickerControlAccess 115*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------------------- 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski virtual void SAL_CALL setValue( sal_Int16 aControlId, sal_Int16 aControlAction, const ::com::sun::star::uno::Any& aValue ) 118*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL getValue( sal_Int16 aControlId, sal_Int16 aControlAction ) 121*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski virtual void SAL_CALL enableControl( sal_Int16 aControlId, sal_Bool bEnable ) 124*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski virtual void SAL_CALL setLabel( sal_Int16 aControlId, const ::rtl::OUString& aLabel ) 127*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getLabel( sal_Int16 aControlId ) 130*b1cdbd2cSJim Jagielski throw ( ::com::sun::star::uno::RuntimeException); 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski //------------------------------------------------ 133*b1cdbd2cSJim Jagielski // XFilePreview 134*b1cdbd2cSJim Jagielski //------------------------------------------------ 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats( ) 137*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL getTargetColorDepth( ) 140*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL getAvailableWidth( ) 143*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL getAvailableHeight( ) 146*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski virtual void SAL_CALL setImage( sal_Int16 aImageFormat, const ::com::sun::star::uno::Any& aImage ) 149*b1cdbd2cSJim Jagielski throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL setShowState( sal_Bool bShowState ) 152*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL getShowState( ) 155*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski //------------------------------------------------ 158*b1cdbd2cSJim Jagielski // XCancelable 159*b1cdbd2cSJim Jagielski //------------------------------------------------ 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski virtual void SAL_CALL cancel( ); 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski //------------------------------------------------ 164*b1cdbd2cSJim Jagielski // Implementation details 165*b1cdbd2cSJim Jagielski //------------------------------------------------ 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski protected: 168*b1cdbd2cSJim Jagielski sal_Int16 SAL_CALL getFocused( ); 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski virtual bool SAL_CALL preModal( ); 171*b1cdbd2cSJim Jagielski virtual void SAL_CALL postModal( sal_Int16 nDialogResult ); 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski virtual sal_uInt32 SAL_CALL onFileOk(); 174*b1cdbd2cSJim Jagielski virtual void SAL_CALL onSelChanged( HWND hwndListBox ); 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski // only called back if OFN_EXPLORER is set 177*b1cdbd2cSJim Jagielski virtual void SAL_CALL onInitDone(); 178*b1cdbd2cSJim Jagielski virtual void SAL_CALL onFolderChanged(); 179*b1cdbd2cSJim Jagielski virtual void SAL_CALL onTypeChanged( sal_uInt32 nFilterIndex ); 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski // call base class method first when overloading 182*b1cdbd2cSJim Jagielski virtual void SAL_CALL onInitDialog( HWND hwndDlg ); 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski virtual sal_uInt32 SAL_CALL onCtrlCommand( HWND hwndDlg, sal_uInt16 ctrlId, sal_uInt16 notifyCode ); 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski 187*b1cdbd2cSJim Jagielski void onWMSize(); 188*b1cdbd2cSJim Jagielski void onWMShow(sal_Bool bShow); 189*b1cdbd2cSJim Jagielski void onWMWindowPosChanged(); 190*b1cdbd2cSJim Jagielski void onCustomControlHelpRequest(LPHELPINFO lphi); 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski private: 193*b1cdbd2cSJim Jagielski inline void SAL_CALL appendFilterGroupSeparator( ); 194*b1cdbd2cSJim Jagielski 195*b1cdbd2cSJim Jagielski inline sal_Bool SAL_CALL IsCustomControlHelpRequested(LPHELPINFO lphi) const; 196*b1cdbd2cSJim Jagielski 197*b1cdbd2cSJim Jagielski void EnlargeStdControlLabels() const; 198*b1cdbd2cSJim Jagielski 199*b1cdbd2cSJim Jagielski // initialize all controls from cache 200*b1cdbd2cSJim Jagielski void SAL_CALL InitControlLabel( HWND hWnd ); 201*b1cdbd2cSJim Jagielski void SAL_CALL InitCustomControlContainer(HWND hCustomControl); 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski // save the control state 204*b1cdbd2cSJim Jagielski void SAL_CALL CacheControlState(HWND hWnd); 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski void SAL_CALL SetDefaultExtension(); 207*b1cdbd2cSJim Jagielski void SAL_CALL InitialSetDefaultName(); 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski static LRESULT CALLBACK SubClassFunc(HWND hWnd, UINT wMessage, WPARAM wParam, LPARAM lParam); 210*b1cdbd2cSJim Jagielski 211*b1cdbd2cSJim Jagielski static BOOL CALLBACK EnumChildWndProc( HWND hWnd, LPARAM lParam ); 212*b1cdbd2cSJim Jagielski 213*b1cdbd2cSJim Jagielski private: 214*b1cdbd2cSJim Jagielski std::auto_ptr<CFilterContainer> m_filterContainer; 215*b1cdbd2cSJim Jagielski std::auto_ptr<CPreviewAdapter> m_Preview; 216*b1cdbd2cSJim Jagielski std::auto_ptr<CCustomControlFactory> m_CustomControlFactory; 217*b1cdbd2cSJim Jagielski std::auto_ptr<CCustomControl> m_CustomControls; 218*b1cdbd2cSJim Jagielski CFilePicker* m_FilePicker; 219*b1cdbd2cSJim Jagielski WNDPROC m_pfnOldDlgProc; 220*b1cdbd2cSJim Jagielski rtl::OUString m_defaultName; 221*b1cdbd2cSJim Jagielski sal_Bool m_bInitialSelChanged; 222*b1cdbd2cSJim Jagielski CHelpPopupWindow m_HelpPopupWindow; 223*b1cdbd2cSJim Jagielski CFilePickerState* m_FilePickerState; 224*b1cdbd2cSJim Jagielski CExecuteFilePickerState* m_ExecuteFilePickerState; 225*b1cdbd2cSJim Jagielski CNonExecuteFilePickerState* m_NonExecuteFilePickerState; 226*b1cdbd2cSJim Jagielski CResourceProvider m_ResProvider; 227*b1cdbd2cSJim Jagielski }; 228*b1cdbd2cSJim Jagielski 229*b1cdbd2cSJim Jagielski 230*b1cdbd2cSJim Jagielski #endif 231