1/*
2 * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "config.h"
27#include "WebKitDLL.h"
28#include <initguid.h>
29#include "DOMEventsClasses.h"
30
31#include <WebCore/COMPtr.h>
32#include <WebCore/DOMWindow.h>
33#include <WebCore/Event.h>
34#include <WebCore/EventNames.h>
35#include <WebCore/KeyboardEvent.h>
36#include <WebCore/MouseEvent.h>
37#include <WebCore/ScriptExecutionContext.h>
38
39// DOMEventListener -----------------------------------------------------------
40
41HRESULT STDMETHODCALLTYPE DOMEventListener::QueryInterface(const IID &riid, void** ppvObject)
42{
43    *ppvObject = 0;
44    if (IsEqualGUID(riid, IID_IDOMEventListener))
45        *ppvObject = static_cast<IDOMEventListener*>(this);
46    else
47        return DOMObject::QueryInterface(riid, ppvObject);
48
49    AddRef();
50    return S_OK;
51}
52
53HRESULT STDMETHODCALLTYPE DOMEventListener::handleEvent(
54    /* [in] */ IDOMEvent* /*evt*/)
55{
56    return E_NOTIMPL;
57}
58
59WebEventListener::WebEventListener(IDOMEventListener* i)
60    : EventListener(CPPEventListenerType)
61    , m_iDOMEventListener(i)
62{
63    m_iDOMEventListener->AddRef();
64}
65
66WebEventListener::~WebEventListener()
67{
68    m_iDOMEventListener->Release();
69}
70
71bool WebEventListener::operator==(const WebCore::EventListener& other)
72{
73    return (other.type() == CPPEventListenerType
74        && reinterpret_cast<const WebEventListener*>(&other)->m_iDOMEventListener == m_iDOMEventListener);
75}
76
77void WebEventListener::handleEvent(WebCore::ScriptExecutionContext* s, WebCore::Event* e)
78{
79    RefPtr<WebCore::Event> ePtr(e);
80    COMPtr<IDOMEvent> domEvent = DOMEvent::createInstance(ePtr);
81    m_iDOMEventListener->handleEvent(domEvent.get());
82}
83
84PassRefPtr<WebEventListener> WebEventListener::create(IDOMEventListener* d)
85{
86    return adoptRef(new WebEventListener(d));
87}
88
89// DOMEvent -------------------------------------------------------------------
90
91DOMEvent::DOMEvent(PassRefPtr<WebCore::Event> e)
92: m_event(0)
93{
94    m_event = e;
95}
96
97DOMEvent::~DOMEvent()
98{
99}
100
101IDOMEvent* DOMEvent::createInstance(PassRefPtr<WebCore::Event> e)
102{
103    if (!e)
104        return 0;
105
106    HRESULT hr;
107    IDOMEvent* domEvent = 0;
108
109    if (e->isKeyboardEvent()) {
110        DOMKeyboardEvent* newEvent = new DOMKeyboardEvent(e);
111        hr = newEvent->QueryInterface(IID_IDOMKeyboardEvent, (void**)&domEvent);
112    } else if (e->isMouseEvent()) {
113        DOMMouseEvent* newEvent = new DOMMouseEvent(e);
114        hr = newEvent->QueryInterface(IID_IDOMMouseEvent, (void**)&domEvent);
115    } else if (e->hasInterface(WebCore::eventNames().interfaceForMutationEvent)) {
116        DOMMutationEvent* newEvent = new DOMMutationEvent(e);
117        hr = newEvent->QueryInterface(IID_IDOMMutationEvent, (void**)&domEvent);
118    } else if (e->hasInterface(WebCore::eventNames().interfaceForOverflowEvent)) {
119        DOMOverflowEvent* newEvent = new DOMOverflowEvent(e);
120        hr = newEvent->QueryInterface(IID_IDOMOverflowEvent, (void**)&domEvent);
121    } else if (e->hasInterface(WebCore::eventNames().interfaceForWheelEvent)) {
122        DOMWheelEvent* newEvent = new DOMWheelEvent(e);
123        hr = newEvent->QueryInterface(IID_IDOMWheelEvent, (void**)&domEvent);
124    } else if (e->isUIEvent()) {
125        DOMUIEvent* newEvent = new DOMUIEvent(e);
126        hr = newEvent->QueryInterface(IID_IDOMUIEvent, (void**)&domEvent);
127    } else {
128        DOMEvent* newEvent = new DOMEvent(e);
129        hr = newEvent->QueryInterface(IID_IDOMEvent, (void**)&domEvent);
130    }
131
132    if (FAILED(hr))
133        return 0;
134
135    return domEvent;
136}
137
138HRESULT STDMETHODCALLTYPE DOMEvent::QueryInterface(const IID &riid, void** ppvObject)
139{
140    *ppvObject = 0;
141    if (IsEqualGUID(riid, IID_DOMEvent))
142        *ppvObject = this;
143    else if (IsEqualGUID(riid, IID_IDOMEvent))
144        *ppvObject = static_cast<IDOMEvent*>(this);
145    else
146        return DOMObject::QueryInterface(riid, ppvObject);
147
148    AddRef();
149    return S_OK;
150}
151
152HRESULT STDMETHODCALLTYPE DOMEvent::type(
153    /* [retval][out] */ BSTR* /*result*/)
154{
155    return E_NOTIMPL;
156}
157
158HRESULT STDMETHODCALLTYPE DOMEvent::target(
159    /* [retval][out] */ IDOMEventTarget** /*result*/)
160{
161    return E_NOTIMPL;
162}
163
164HRESULT STDMETHODCALLTYPE DOMEvent::currentTarget(
165    /* [retval][out] */ IDOMEventTarget** /*result*/)
166{
167    return E_NOTIMPL;
168}
169
170HRESULT STDMETHODCALLTYPE DOMEvent::eventPhase(
171    /* [retval][out] */ unsigned short* /*result*/)
172{
173    return E_NOTIMPL;
174}
175
176HRESULT STDMETHODCALLTYPE DOMEvent::bubbles(
177    /* [retval][out] */ BOOL* /*result*/)
178{
179    return E_NOTIMPL;
180}
181
182HRESULT STDMETHODCALLTYPE DOMEvent::cancelable(
183    /* [retval][out] */ BOOL* /*result*/)
184{
185    return E_NOTIMPL;
186}
187
188HRESULT STDMETHODCALLTYPE DOMEvent::timeStamp(
189    /* [retval][out] */ DOMTimeStamp* /*result*/)
190{
191    return E_NOTIMPL;
192}
193
194HRESULT STDMETHODCALLTYPE DOMEvent::stopPropagation( void)
195{
196    return E_NOTIMPL;
197}
198
199HRESULT STDMETHODCALLTYPE DOMEvent::preventDefault( void)
200{
201    return E_NOTIMPL;
202}
203
204HRESULT STDMETHODCALLTYPE DOMEvent::initEvent(
205    /* [in] */ BSTR /*eventTypeArg*/,
206    /* [in] */ BOOL /*canBubbleArg*/,
207    /* [in] */ BOOL /*cancelableArg*/)
208{
209    return E_NOTIMPL;
210}
211
212// DOMUIEvent -----------------------------------------------------------------
213
214HRESULT STDMETHODCALLTYPE DOMUIEvent::QueryInterface(REFIID riid, void** ppvObject)
215{
216    *ppvObject = 0;
217    if (IsEqualGUID(riid, IID_IDOMUIEvent))
218        *ppvObject = static_cast<IDOMUIEvent*>(this);
219    else
220        return DOMEvent::QueryInterface(riid, ppvObject);
221
222    AddRef();
223    return S_OK;
224}
225
226HRESULT STDMETHODCALLTYPE DOMUIEvent::view(
227    /* [retval][out] */ IDOMWindow** /*result*/)
228{
229    return E_NOTIMPL;
230}
231
232HRESULT STDMETHODCALLTYPE DOMUIEvent::detail(
233    /* [retval][out] */ long* /*result*/)
234{
235    return E_NOTIMPL;
236}
237
238HRESULT STDMETHODCALLTYPE DOMUIEvent::initUIEvent(
239    /* [in] */ BSTR /*type*/,
240    /* [in] */ BOOL /*canBubble*/,
241    /* [in] */ BOOL /*cancelable*/,
242    /* [in] */ IDOMWindow* /*view*/,
243    /* [in] */ long /*detail*/)
244{
245    return E_NOTIMPL;
246}
247
248HRESULT STDMETHODCALLTYPE DOMUIEvent::keyCode(
249    /* [retval][out] */ long* /*result*/)
250{
251    return E_NOTIMPL;
252}
253
254HRESULT STDMETHODCALLTYPE DOMUIEvent::charCode(
255    /* [retval][out] */ long* /*result*/)
256{
257    return E_NOTIMPL;
258}
259
260HRESULT STDMETHODCALLTYPE DOMUIEvent::unused1(
261    /* [retval][out] */ long* /*result*/)
262{
263    return E_NOTIMPL;
264}
265
266HRESULT STDMETHODCALLTYPE DOMUIEvent::unused2(
267    /* [retval][out] */ long* /*result*/)
268{
269    return E_NOTIMPL;
270}
271
272HRESULT STDMETHODCALLTYPE DOMUIEvent::pageX(
273    /* [retval][out] */ long* /*result*/)
274{
275    return E_NOTIMPL;
276}
277
278HRESULT STDMETHODCALLTYPE DOMUIEvent::pageY(
279    /* [retval][out] */ long* /*result*/)
280{
281    return E_NOTIMPL;
282}
283
284HRESULT STDMETHODCALLTYPE DOMUIEvent::which(
285    /* [retval][out] */ long* /*result*/)
286{
287    return E_NOTIMPL;
288}
289
290// DOMKeyboardEvent -----------------------------------------------------------
291
292HRESULT STDMETHODCALLTYPE DOMKeyboardEvent::QueryInterface(REFIID riid, void** ppvObject)
293{
294    *ppvObject = 0;
295    if (IsEqualGUID(riid, IID_IDOMKeyboardEvent))
296        *ppvObject = static_cast<IDOMKeyboardEvent*>(this);
297    else
298        return DOMUIEvent::QueryInterface(riid, ppvObject);
299
300    AddRef();
301    return S_OK;
302}
303
304HRESULT STDMETHODCALLTYPE DOMKeyboardEvent::keyIdentifier(
305    /* [retval][out] */ BSTR* /*result*/)
306{
307    return E_NOTIMPL;
308}
309
310HRESULT STDMETHODCALLTYPE DOMKeyboardEvent::keyLocation(
311    /* [retval][out] */ unsigned long* /*result*/)
312{
313    return E_NOTIMPL;
314}
315
316HRESULT STDMETHODCALLTYPE DOMKeyboardEvent::ctrlKey(
317    /* [retval][out] */ BOOL* result)
318{
319    *result = FALSE;
320    if (!m_event || !m_event->isKeyboardEvent())
321        return E_FAIL;
322    WebCore::KeyboardEvent* keyEvent = static_cast<WebCore::KeyboardEvent*>(m_event.get());
323
324    *result = keyEvent->ctrlKey() ? TRUE : FALSE;
325    return S_OK;
326}
327
328HRESULT STDMETHODCALLTYPE DOMKeyboardEvent::shiftKey(
329    /* [retval][out] */ BOOL* result)
330{
331    *result = FALSE;
332    if (!m_event || !m_event->isKeyboardEvent())
333        return E_FAIL;
334    WebCore::KeyboardEvent* keyEvent = static_cast<WebCore::KeyboardEvent*>(m_event.get());
335
336    *result = keyEvent->shiftKey() ? TRUE : FALSE;
337    return S_OK;
338}
339
340HRESULT STDMETHODCALLTYPE DOMKeyboardEvent::altKey(
341    /* [retval][out] */ BOOL* result)
342{
343    *result = FALSE;
344    if (!m_event || !m_event->isKeyboardEvent())
345        return E_FAIL;
346    WebCore::KeyboardEvent* keyEvent = static_cast<WebCore::KeyboardEvent*>(m_event.get());
347
348    *result = keyEvent->altKey() ? TRUE : FALSE;
349    return S_OK;
350}
351
352HRESULT STDMETHODCALLTYPE DOMKeyboardEvent::metaKey(
353    /* [retval][out] */ BOOL* result)
354{
355    *result = FALSE;
356    if (!m_event || !m_event->isKeyboardEvent())
357        return E_FAIL;
358    WebCore::KeyboardEvent* keyEvent = static_cast<WebCore::KeyboardEvent*>(m_event.get());
359
360    *result = keyEvent->metaKey() ? TRUE : FALSE;
361    return S_OK;
362}
363
364HRESULT STDMETHODCALLTYPE DOMKeyboardEvent::altGraphKey(
365    /* [retval][out] */ BOOL* result)
366{
367    *result = FALSE;
368    if (!m_event || !m_event->isKeyboardEvent())
369        return E_FAIL;
370    WebCore::KeyboardEvent* keyEvent = static_cast<WebCore::KeyboardEvent*>(m_event.get());
371
372    *result = keyEvent->altGraphKey() ? TRUE : FALSE;
373    return S_OK;
374}
375
376HRESULT STDMETHODCALLTYPE DOMKeyboardEvent::getModifierState(
377    /* [in] */ BSTR /*keyIdentifierArg*/,
378    /* [retval][out] */ BOOL* /*result*/)
379{
380    return E_NOTIMPL;
381}
382
383HRESULT STDMETHODCALLTYPE DOMKeyboardEvent::initKeyboardEvent(
384    /* [in] */ BSTR /*type*/,
385    /* [in] */ BOOL /*canBubble*/,
386    /* [in] */ BOOL /*cancelable*/,
387    /* [in] */ IDOMWindow* /*view*/,
388    /* [in] */ BSTR /*keyIdentifier*/,
389    /* [in] */ unsigned long /*keyLocation*/,
390    /* [in] */ BOOL /*ctrlKey*/,
391    /* [in] */ BOOL /*altKey*/,
392    /* [in] */ BOOL /*shiftKey*/,
393    /* [in] */ BOOL /*metaKey*/,
394    /* [in] */ BOOL /*graphKey*/)
395{
396    return E_NOTIMPL;
397}
398
399// DOMMouseEvent --------------------------------------------------------------
400
401HRESULT STDMETHODCALLTYPE DOMMouseEvent::QueryInterface(REFIID riid, void** ppvObject)
402{
403    *ppvObject = 0;
404    if (IsEqualGUID(riid, IID_IDOMMouseEvent))
405        *ppvObject = static_cast<IDOMMouseEvent*>(this);
406    else
407        return DOMUIEvent::QueryInterface(riid, ppvObject);
408
409    AddRef();
410    return S_OK;
411}
412
413HRESULT STDMETHODCALLTYPE DOMMouseEvent::screenX(
414    /* [retval][out] */ long* /*result*/)
415{
416    return E_NOTIMPL;
417}
418
419HRESULT STDMETHODCALLTYPE DOMMouseEvent::screenY(
420    /* [retval][out] */ long* /*result*/)
421{
422    return E_NOTIMPL;
423}
424
425HRESULT STDMETHODCALLTYPE DOMMouseEvent::clientX(
426    /* [retval][out] */ long* /*result*/)
427{
428    return E_NOTIMPL;
429}
430
431HRESULT STDMETHODCALLTYPE DOMMouseEvent::clientY(
432    /* [retval][out] */ long* /*result*/)
433{
434    return E_NOTIMPL;
435}
436
437HRESULT STDMETHODCALLTYPE DOMMouseEvent::ctrlKey(
438    /* [retval][out] */ BOOL* result)
439{
440    *result = FALSE;
441    if (!m_event || !m_event->isMouseEvent())
442        return E_FAIL;
443    WebCore::MouseEvent* mouseEvent = static_cast<WebCore::MouseEvent*>(m_event.get());
444
445    *result = mouseEvent->ctrlKey() ? TRUE : FALSE;
446    return S_OK;
447}
448
449HRESULT STDMETHODCALLTYPE DOMMouseEvent::shiftKey(
450    /* [retval][out] */ BOOL* result)
451{
452    *result = FALSE;
453    if (!m_event || !m_event->isMouseEvent())
454        return E_FAIL;
455    WebCore::MouseEvent* mouseEvent = static_cast<WebCore::MouseEvent*>(m_event.get());
456
457    *result = mouseEvent->shiftKey() ? TRUE : FALSE;
458    return S_OK;
459}
460
461HRESULT STDMETHODCALLTYPE DOMMouseEvent::altKey(
462    /* [retval][out] */ BOOL* result)
463{
464    *result = FALSE;
465    if (!m_event || !m_event->isMouseEvent())
466        return E_FAIL;
467    WebCore::MouseEvent* mouseEvent = static_cast<WebCore::MouseEvent*>(m_event.get());
468
469    *result = mouseEvent->altKey() ? TRUE : FALSE;
470    return S_OK;
471}
472
473HRESULT STDMETHODCALLTYPE DOMMouseEvent::metaKey(
474    /* [retval][out] */ BOOL* result)
475{
476    *result = FALSE;
477    if (!m_event || !m_event->isMouseEvent())
478        return E_FAIL;
479    WebCore::MouseEvent* mouseEvent = static_cast<WebCore::MouseEvent*>(m_event.get());
480
481    *result = mouseEvent->metaKey() ? TRUE : FALSE;
482    return S_OK;
483}
484
485HRESULT STDMETHODCALLTYPE DOMMouseEvent::button(
486    /* [retval][out] */ unsigned short* /*result*/)
487{
488    return E_NOTIMPL;
489}
490
491HRESULT STDMETHODCALLTYPE DOMMouseEvent::relatedTarget(
492    /* [retval][out] */ IDOMEventTarget** /*result*/)
493{
494    return E_NOTIMPL;
495}
496
497HRESULT STDMETHODCALLTYPE DOMMouseEvent::initMouseEvent(
498    /* [in] */ BSTR /*type*/,
499    /* [in] */ BOOL /*canBubble*/,
500    /* [in] */ BOOL /*cancelable*/,
501    /* [in] */ IDOMWindow* /*view*/,
502    /* [in] */ long /*detail*/,
503    /* [in] */ long /*screenX*/,
504    /* [in] */ long /*screenY*/,
505    /* [in] */ long /*clientX*/,
506    /* [in] */ long /*clientY*/,
507    /* [in] */ BOOL /*ctrlKey*/,
508    /* [in] */ BOOL /*altKey*/,
509    /* [in] */ BOOL /*shiftKey*/,
510    /* [in] */ BOOL /*metaKey*/,
511    /* [in] */ unsigned short /*button*/,
512    /* [in] */ IDOMEventTarget* /*relatedTarget*/)
513{
514    return E_NOTIMPL;
515}
516
517HRESULT STDMETHODCALLTYPE DOMMouseEvent::offsetX(
518    /* [retval][out] */ long* /*result*/)
519{
520    return E_NOTIMPL;
521}
522
523HRESULT STDMETHODCALLTYPE DOMMouseEvent::offsetY(
524    /* [retval][out] */ long* /*result*/)
525{
526    return E_NOTIMPL;
527}
528
529HRESULT STDMETHODCALLTYPE DOMMouseEvent::x(
530    /* [retval][out] */ long* /*result*/)
531{
532    return E_NOTIMPL;
533}
534
535HRESULT STDMETHODCALLTYPE DOMMouseEvent::y(
536    /* [retval][out] */ long* /*result*/)
537{
538    return E_NOTIMPL;
539}
540
541HRESULT STDMETHODCALLTYPE DOMMouseEvent::fromElement(
542    /* [retval][out] */ IDOMNode** /*result*/)
543{
544    return E_NOTIMPL;
545}
546
547HRESULT STDMETHODCALLTYPE DOMMouseEvent::toElement(
548    /* [retval][out] */ IDOMNode** /*result*/)
549{
550    return E_NOTIMPL;
551}
552
553// DOMMutationEvent -----------------------------------------------------------
554
555HRESULT STDMETHODCALLTYPE DOMMutationEvent::QueryInterface(REFIID riid, void** ppvObject)
556{
557    *ppvObject = 0;
558    if (IsEqualGUID(riid, IID_IDOMMutationEvent))
559        *ppvObject = static_cast<IDOMMutationEvent*>(this);
560    else
561        return DOMEvent::QueryInterface(riid, ppvObject);
562
563    AddRef();
564    return S_OK;
565}
566
567HRESULT STDMETHODCALLTYPE DOMMutationEvent::relatedNode(
568    /* [retval][out] */ IDOMNode** /*result*/)
569{
570    return E_NOTIMPL;
571}
572
573HRESULT STDMETHODCALLTYPE DOMMutationEvent::prevValue(
574    /* [retval][out] */ BSTR* /*result*/)
575{
576    return E_NOTIMPL;
577}
578
579HRESULT STDMETHODCALLTYPE DOMMutationEvent::newValue(
580    /* [retval][out] */ BSTR* /*result*/)
581{
582    return E_NOTIMPL;
583}
584
585HRESULT STDMETHODCALLTYPE DOMMutationEvent::attrName(
586    /* [retval][out] */ BSTR* /*result*/)
587{
588    return E_NOTIMPL;
589}
590
591HRESULT STDMETHODCALLTYPE DOMMutationEvent::attrChange(
592    /* [retval][out] */ unsigned short* /*result*/)
593{
594    return E_NOTIMPL;
595}
596
597HRESULT STDMETHODCALLTYPE DOMMutationEvent::initMutationEvent(
598    /* [in] */ BSTR /*type*/,
599    /* [in] */ BOOL /*canBubble*/,
600    /* [in] */ BOOL /*cancelable*/,
601    /* [in] */ IDOMNode* /*relatedNode*/,
602    /* [in] */ BSTR /*prevValue*/,
603    /* [in] */ BSTR /*newValue*/,
604    /* [in] */ BSTR /*attrName*/,
605    /* [in] */ unsigned short /*attrChange*/)
606{
607    return E_NOTIMPL;
608}
609
610// DOMOverflowEvent -----------------------------------------------------------
611
612HRESULT STDMETHODCALLTYPE DOMOverflowEvent::QueryInterface(REFIID riid, void** ppvObject)
613{
614    *ppvObject = 0;
615    if (IsEqualGUID(riid, IID_IDOMOverflowEvent))
616        *ppvObject = static_cast<IDOMOverflowEvent*>(this);
617    else
618        return DOMEvent::QueryInterface(riid, ppvObject);
619
620    AddRef();
621    return S_OK;
622}
623
624HRESULT STDMETHODCALLTYPE DOMOverflowEvent::orient(
625    /* [retval][out] */ unsigned short* /*result*/)
626{
627    return E_NOTIMPL;
628}
629
630HRESULT STDMETHODCALLTYPE DOMOverflowEvent::horizontalOverflow(
631    /* [retval][out] */ BOOL* /*result*/)
632{
633    return E_NOTIMPL;
634}
635
636HRESULT STDMETHODCALLTYPE DOMOverflowEvent::verticalOverflow(
637    /* [retval][out] */ BOOL* /*result*/)
638{
639    return E_NOTIMPL;
640}
641
642// DOMWheelEvent --------------------------------------------------------------
643
644HRESULT STDMETHODCALLTYPE DOMWheelEvent::QueryInterface(REFIID riid, void** ppvObject)
645{
646    *ppvObject = 0;
647    if (IsEqualGUID(riid, IID_IDOMWheelEvent))
648        *ppvObject = static_cast<IDOMWheelEvent*>(this);
649    else
650        return DOMUIEvent::QueryInterface(riid, ppvObject);
651
652    AddRef();
653    return S_OK;
654}
655
656HRESULT STDMETHODCALLTYPE DOMWheelEvent::screenX(
657    /* [retval][out] */ long* /*result*/)
658{
659    return E_NOTIMPL;
660}
661
662HRESULT STDMETHODCALLTYPE DOMWheelEvent::screenY(
663    /* [retval][out] */ long* /*result*/)
664{
665    return E_NOTIMPL;
666}
667
668HRESULT STDMETHODCALLTYPE DOMWheelEvent::clientX(
669    /* [retval][out] */ long* /*result*/)
670{
671    return E_NOTIMPL;
672}
673
674HRESULT STDMETHODCALLTYPE DOMWheelEvent::clientY(
675    /* [retval][out] */ long* /*result*/)
676{
677    return E_NOTIMPL;
678}
679
680HRESULT STDMETHODCALLTYPE DOMWheelEvent::ctrlKey(
681    /* [retval][out] */ BOOL* /*result*/)
682{
683    return E_NOTIMPL;
684}
685
686HRESULT STDMETHODCALLTYPE DOMWheelEvent::shiftKey(
687    /* [retval][out] */ BOOL* /*result*/)
688{
689    return E_NOTIMPL;
690}
691
692HRESULT STDMETHODCALLTYPE DOMWheelEvent::altKey(
693    /* [retval][out] */ BOOL* /*result*/)
694{
695    return E_NOTIMPL;
696}
697
698HRESULT STDMETHODCALLTYPE DOMWheelEvent::metaKey(
699    /* [retval][out] */ BOOL* /*result*/)
700{
701    return E_NOTIMPL;
702}
703
704HRESULT STDMETHODCALLTYPE DOMWheelEvent::wheelDelta(
705    /* [retval][out] */ long* /*result*/)
706{
707    return E_NOTIMPL;
708}
709
710HRESULT STDMETHODCALLTYPE DOMWheelEvent::wheelDeltaX(
711    /* [retval][out] */ long* /*result*/)
712{
713    return E_NOTIMPL;
714}
715
716HRESULT STDMETHODCALLTYPE DOMWheelEvent::wheelDeltaY(
717    /* [retval][out] */ long* /*result*/)
718{
719    return E_NOTIMPL;
720}
721
722HRESULT STDMETHODCALLTYPE DOMWheelEvent::offsetX(
723    /* [retval][out] */ long* /*result*/)
724{
725    return E_NOTIMPL;
726}
727
728HRESULT STDMETHODCALLTYPE DOMWheelEvent::offsetY(
729    /* [retval][out] */ long* /*result*/)
730{
731    return E_NOTIMPL;
732}
733
734HRESULT STDMETHODCALLTYPE DOMWheelEvent::x(
735    /* [retval][out] */ long* /*result*/)
736{
737    return E_NOTIMPL;
738}
739
740HRESULT STDMETHODCALLTYPE DOMWheelEvent::y(
741    /* [retval][out] */ long* /*result*/)
742{
743    return E_NOTIMPL;
744}
745
746HRESULT STDMETHODCALLTYPE DOMWheelEvent::isHorizontal(
747    /* [retval][out] */ BOOL* /*result*/)
748{
749    return E_NOTIMPL;
750}
751
752HRESULT STDMETHODCALLTYPE DOMWheelEvent::initWheelEvent(
753    /* [in] */ long /*wheelDeltaX*/,
754    /* [in] */ long /*wheelDeltaY*/,
755    /* [in] */ IDOMWindow* /*view*/,
756    /* [in] */ long /*screenX*/,
757    /* [in] */ long /*screenY*/,
758    /* [in] */ long /*clientX*/,
759    /* [in] */ long /*clientY*/,
760    /* [in] */ BOOL /*ctrlKey*/,
761    /* [in] */ BOOL /*altKey*/,
762    /* [in] */ BOOL /*shiftKey*/,
763    /* [in] */ BOOL /*metaKey*/)
764{
765    return E_NOTIMPL;
766}
767