467b96a9e1
2009-08-28 10:59:09 +0200 cd r275520 : #i103568# Added context for Writer export 2009-08-27 13:42:55 +0200 cd r275478 : #i103568# The expression must be negated to be correct! 2009-08-26 14:26:24 +0200 cd r275423 : CWS-TOOLING: rebase CWS filepicker03 to trunk@275331 (milestone: DEV300:m56) 2009-08-26 11:53:11 +0200 cd r275411 : #i103568# Fix file type suggestion inconsistency 2009-08-26 11:27:16 +0200 cd r275407 : #i83457# Fix compiler warnings for wntmsci11 and 12 2009-08-26 11:26:32 +0200 cd r275406 : #i83457# Remove fpicker from modules with warnings 2009-08-25 16:20:06 +0200 cd r275368 : #i83457# Fix msvc warnings 2009-08-03 15:12:44 +0200 cd r274582 : CWS-TOOLING: rebase CWS filepicker03 to trunk@274203 (milestone: DEV300:m53)
228 lines
9.4 KiB
C++
228 lines
9.4 KiB
C++
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: VistaFilePickerEventHandler.hxx,v $
|
|
* $Revision: 1.4 $
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
#ifndef FPICKER_WIN32_VISTA_FILEPICKER_EVENTHANDLER_HXX
|
|
#define FPICKER_WIN32_VISTA_FILEPICKER_EVENTHANDLER_HXX
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// includes
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
|
#pragma warning( disable : 4917 )
|
|
#endif
|
|
|
|
#include "comptr.hxx"
|
|
#include "vistatypes.h"
|
|
#include "IVistaFilePickerInternalNotify.hxx"
|
|
|
|
#include <com/sun/star/ui/dialogs/XFilePickerListener.hpp>
|
|
#include <com/sun/star/uno/Reference.hxx>
|
|
|
|
#include <cppuhelper/basemutex.hxx>
|
|
#include <cppuhelper/interfacecontainer.h>
|
|
#include <osl/interlck.h>
|
|
|
|
#include <shobjidl.h>
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// namespace
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifdef css
|
|
#error "Clash on using CSS as namespace define."
|
|
#else
|
|
#define css ::com::sun::star
|
|
#endif
|
|
|
|
namespace fpicker{
|
|
namespace win32{
|
|
namespace vista{
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// types, const etcpp.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/** todo document me
|
|
*/
|
|
class VistaFilePickerEventHandler : public ::cppu::BaseMutex
|
|
, public IFileDialogEvents
|
|
, public IFileDialogControlEvents
|
|
{
|
|
public:
|
|
|
|
//------------------------------------------------------------------------------------
|
|
// ctor/dtor
|
|
//------------------------------------------------------------------------------------
|
|
|
|
VistaFilePickerEventHandler(IVistaFilePickerInternalNotify* pInternalNotify);
|
|
virtual ~VistaFilePickerEventHandler();
|
|
|
|
//------------------------------------------------------------------------------------
|
|
// IUnknown
|
|
//------------------------------------------------------------------------------------
|
|
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID rIID ,
|
|
void** ppObject);
|
|
virtual ULONG STDMETHODCALLTYPE AddRef();
|
|
virtual ULONG STDMETHODCALLTYPE Release();
|
|
|
|
//------------------------------------------------------------------------------------
|
|
// IFileDialogEvents
|
|
//------------------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP OnFileOk(IFileDialog* pDialog);
|
|
|
|
STDMETHODIMP OnFolderChanging(IFileDialog* pDialog,
|
|
IShellItem* pFolder);
|
|
|
|
STDMETHODIMP OnFolderChange(IFileDialog* pDialog);
|
|
|
|
STDMETHODIMP OnSelectionChange(IFileDialog* pDialog);
|
|
|
|
STDMETHODIMP OnShareViolation(IFileDialog* pDialog ,
|
|
IShellItem* pItem ,
|
|
FDE_SHAREVIOLATION_RESPONSE* pResponse);
|
|
|
|
STDMETHODIMP OnTypeChange(IFileDialog* pDialog);
|
|
|
|
STDMETHODIMP OnOverwrite(IFileDialog* pDialog ,
|
|
IShellItem* pItem ,
|
|
FDE_OVERWRITE_RESPONSE* pResponse);
|
|
|
|
//------------------------------------------------------------------------------------
|
|
// IFileDialogControlEvents
|
|
//------------------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP OnItemSelected(IFileDialogCustomize* pCustomize,
|
|
DWORD nIDCtl ,
|
|
DWORD nIDItem );
|
|
|
|
STDMETHODIMP OnButtonClicked(IFileDialogCustomize* pCustomize,
|
|
DWORD nIDCtl );
|
|
|
|
STDMETHODIMP OnCheckButtonToggled(IFileDialogCustomize* pCustomize,
|
|
DWORD nIDCtl ,
|
|
BOOL bChecked );
|
|
|
|
STDMETHODIMP OnControlActivating(IFileDialogCustomize* pCustomize,
|
|
DWORD nIDCtl );
|
|
|
|
//------------------------------------------------------------------------------------
|
|
// XFilePickerNotifier
|
|
//------------------------------------------------------------------------------------
|
|
|
|
virtual void SAL_CALL addFilePickerListener( const css::uno::Reference< css::ui::dialogs::XFilePickerListener >& xListener )
|
|
throw( css::uno::RuntimeException );
|
|
|
|
virtual void SAL_CALL removeFilePickerListener( const css::uno::Reference< css::ui::dialogs::XFilePickerListener >& xListener )
|
|
throw( css::uno::RuntimeException );
|
|
|
|
//------------------------------------------------------------------------------------
|
|
// native interface
|
|
//------------------------------------------------------------------------------------
|
|
|
|
//------------------------------------------------------------------------------------
|
|
/** start listening for file picker events on the given file open dialog COM object.
|
|
*
|
|
* The broadcaster will be cached internaly so deregistration will be easy.
|
|
* Further all needed informations are capsulated within this class (e.g. the listener handler).
|
|
* Nobody outside must know such informations.
|
|
*
|
|
* Nothing will happen if an inconsistent state will be detected
|
|
* (means: double registration will be ignored).
|
|
*
|
|
* @param pBroadcaster
|
|
* reference to the dialog, where we should start listening.
|
|
*/
|
|
void startListening( const TFileDialog& pBroadcaster );
|
|
|
|
//------------------------------------------------------------------------------------
|
|
/** stop listening for file picker events on the internaly cached dialog COM object.
|
|
*
|
|
* The COM dialog provided on the startListeneing() call was cached internaly.
|
|
* And now its used to deregister this listener. Doing so the also internaly cached
|
|
* listener handle is used. If listener was not already registered - nothing will happen.
|
|
*/
|
|
void stopListening();
|
|
|
|
public:
|
|
|
|
enum EEventType
|
|
{
|
|
E_FILE_SELECTION_CHANGED,
|
|
E_DIRECTORY_CHANGED,
|
|
E_HELP_REQUESTED,
|
|
E_CONTROL_STATE_CHANGED,
|
|
E_DIALOG_SIZE_CHANGED
|
|
};
|
|
|
|
private:
|
|
|
|
//------------------------------------------------------------------------------------
|
|
/// @todo document me
|
|
void impl_sendEvent( EEventType eEventType,
|
|
::sal_Int16 nControlID);
|
|
|
|
private:
|
|
|
|
//------------------------------------------------------------------------------------
|
|
/// ref count for AddRef/Release()
|
|
oslInterlockedCount m_nRefCount;
|
|
|
|
//------------------------------------------------------------------------------------
|
|
/// unique handle for this listener provided by the broadcaster on registration time
|
|
DWORD m_nListenerHandle;
|
|
|
|
//------------------------------------------------------------------------------------
|
|
/// cached file dialog instance (there we listen for events)
|
|
TFileDialog m_pDialog;
|
|
|
|
//---------------------------------------------------------------------
|
|
IVistaFilePickerInternalNotify* m_pInternalNotify;
|
|
|
|
//---------------------------------------------------------------------
|
|
/** used to inform file picker listener asynchronously.
|
|
* Those listener must be called asynchronously .. because
|
|
* every request will block the caller thread. Mostly that will be
|
|
* the main thread of the office. Further the global SolarMutex will
|
|
* be locked during this time. If we call our listener back now synchronously ..
|
|
* we will block on SolarMutex.acquire() forever .-))
|
|
*/
|
|
::cppu::OMultiTypeInterfaceContainerHelper m_lListener;
|
|
};
|
|
|
|
} // namespace vista
|
|
} // namespace win32
|
|
} // namespace fpicker
|
|
|
|
#undef css
|
|
|
|
#endif // FPICKER_WIN32_VISTA_FILEPICKER_EVENTHANDLER_HXX
|