Update ooo320-m1
[ooovba.git] / fpicker / source / win32 / filepicker / asynceventnotifier.hxx
blobd08860a4a4b25f2f14706834d1b5d0f6cb9d6aba
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: asynceventnotifier.hxx,v $
10 * $Revision: 1.11 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _ASYNCEVENTNOTIFIER_HXX_
32 #define _ASYNCEVENTNOTIFIER_HXX_
34 //------------------------------------------------------------------------
35 // includes
36 //------------------------------------------------------------------------
38 #include <osl/mutex.hxx>
39 #include <osl/conditn.hxx>
40 #include <cppuhelper/interfacecontainer.h>
42 #if defined _MSC_VER
43 #pragma warning(push, 1)
44 #endif
45 #include <windows.h>
46 #if defined _MSC_VER
47 #pragma warning(pop)
48 #endif
50 #include <list>
51 #include <utility>
52 #include "eventnotification.hxx"
54 //---------------------------------------------
56 //---------------------------------------------
58 class CAsyncEventNotifier
60 public:
61 CAsyncEventNotifier(cppu::OBroadcastHelper& rBroadcastHelper);
62 ~CAsyncEventNotifier();
64 bool SAL_CALL startup(bool bCreateSuspended = true);
65 void SAL_CALL shutdown();
67 // notifications may be added the
68 // the event queue but will only
69 // be notified to the clients after
70 // resume was called
71 void suspend();
73 // resume notifying events
74 void resume();
76 // this class is responsible for the memory management of
77 // the CEventNotification instance
78 void SAL_CALL notifyEvent(CEventNotification* EventNotification);
80 void SAL_CALL addListener (const ::com::sun::star::uno::Type& aType ,
81 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xListener);
82 void SAL_CALL removeListener(const ::com::sun::star::uno::Type& aType ,
83 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xListener);
85 private:
86 size_t SAL_CALL getEventListSize();
87 void SAL_CALL resetNotifyEvent();
88 CEventNotification* SAL_CALL getNextEventRecord();
89 void SAL_CALL removeNextEventRecord();
91 void SAL_CALL run( );
93 static unsigned int WINAPI ThreadProc(LPVOID pParam);
95 private:
96 std::list<CEventNotification*> m_EventList;
97 HANDLE m_hThread;
98 bool m_bRun;
99 unsigned m_ThreadId;
100 ::cppu::OBroadcastHelper& m_rBroadcastHelper;
101 HANDLE m_hEvents[2];
102 HANDLE& m_NotifyEvent;
103 HANDLE& m_ResumeNotifying;
104 osl::Mutex m_Mutex;
106 // prevent copy and assignment
107 private:
108 CAsyncEventNotifier( const CAsyncEventNotifier& );
109 CAsyncEventNotifier& operator=( const CAsyncEventNotifier& );
112 #endif