| Index: webkit/port/platform/chromium/PopupMenuChromium.h
|
| ===================================================================
|
| --- webkit/port/platform/chromium/PopupMenuChromium.h (revision 0)
|
| +++ webkit/port/platform/chromium/PopupMenuChromium.h (revision 0)
|
| @@ -0,0 +1,82 @@
|
| +// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef PopupMenuChromium_h
|
| +#define PopupMenuChromium_h
|
| +
|
| +#pragma warning(push, 0)
|
| +#include "PopupMenuClient.h"
|
| +
|
| +#include "FramelessScrollView.h"
|
| +#include "IntRect.h"
|
| +#pragma warning(pop)
|
| +
|
| +
|
| +namespace WebCore {
|
| +
|
| +class PopupListBox;
|
| +
|
| +// TODO(darin): Our FramelessScrollView classes need to implement HostWindow!
|
| +
|
| +// This class holds a PopupListBox (see cpp file). Its sole purpose is to be
|
| +// able to draw a border around its child. All its paint/event handling is just
|
| +// forwarded to the child listBox (with the appropriate transforms).
|
| +// NOTE: this class is exposed so it can be instantiated direcly for the
|
| +// autofill popup. We cannot use the Popup class directly in that case as the
|
| +// autofill popup should not be focused when shown and we want to forward the
|
| +// key events to it (through handleKeyEvent).
|
| +
|
| +class PopupContainer : public FramelessScrollView, public RefCounted<PopupContainer> {
|
| +public:
|
| + static PassRefPtr<PopupContainer> create(PopupMenuClient* client,
|
| + bool focusOnShow);
|
| +
|
| + // Whether a key event should be sent to this popup.
|
| + virtual bool isInterestedInEventForKey(int key_code);
|
| +
|
| + // FramelessScrollView
|
| + virtual void paint(GraphicsContext* gc, const IntRect& rect);
|
| + virtual void hide();
|
| + virtual bool handleMouseDownEvent(const PlatformMouseEvent& event);
|
| + virtual bool handleMouseMoveEvent(const PlatformMouseEvent& event);
|
| + virtual bool handleMouseReleaseEvent(const PlatformMouseEvent& event);
|
| + virtual bool handleWheelEvent(const PlatformWheelEvent& event);
|
| + virtual bool handleKeyEvent(const PlatformKeyboardEvent& event);
|
| +
|
| + // PopupContainer methods
|
| +
|
| + // Show the popup
|
| + void showPopup(FrameView* view);
|
| +
|
| + // Show the popup in the specified rect for the specified frame.
|
| + // Note: this code was somehow arbitrarily factored-out of the Popup class
|
| + // so WebViewImpl can create a PopupContainer.
|
| + void show(const IntRect& r, FrameView* v, int index);
|
| +
|
| + // Hide the popup. Do not call this directly: use client->hidePopup().
|
| + void hidePopup();
|
| +
|
| + // Compute size of widget and children.
|
| + void layout();
|
| +
|
| + PopupListBox* listBox() const { return m_listBox.get(); }
|
| +
|
| +private:
|
| + friend class WTF::RefCounted<PopupContainer>;
|
| +
|
| + PopupContainer(PopupMenuClient* client, bool focusOnShow);
|
| + ~PopupContainer();
|
| +
|
| + // Paint the border.
|
| + void paintBorder(GraphicsContext* gc, const IntRect& rect);
|
| +
|
| + RefPtr<PopupListBox> m_listBox;
|
| +
|
| + // Whether the window showing this popup should be focused when shown.
|
| + bool m_focusOnShow;
|
| +};
|
| +
|
| +}
|
| +
|
| +#endif // PopupMenuChromium_h
|
|
|