summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/chromium/PopupMenuChromium.h
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/chromium/PopupMenuChromium.h')
-rw-r--r--WebCore/platform/chromium/PopupMenuChromium.h227
1 files changed, 0 insertions, 227 deletions
diff --git a/WebCore/platform/chromium/PopupMenuChromium.h b/WebCore/platform/chromium/PopupMenuChromium.h
deleted file mode 100644
index ca47ccf..0000000
--- a/WebCore/platform/chromium/PopupMenuChromium.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef PopupMenuChromium_h
-#define PopupMenuChromium_h
-
-#include "config.h"
-
-#include "FramelessScrollView.h"
-#include "IntRect.h"
-#include "PlatformString.h"
-#include "PopupMenu.h"
-#include "PopupMenuPrivate.h"
-#include "PopupMenuStyle.h"
-
-namespace WebCore {
-
-class ChromeClientChromium;
-class FrameView;
-class PopupListBox;
-class PopupMenuClient;
-
-// A container for the data for each menu item (e.g. represented by <option>
-// or <optgroup> in a <select> widget) and is used by PopupListBox.
-struct PopupItem {
- enum Type {
- TypeOption,
- TypeGroup,
- TypeSeparator
- };
-
- PopupItem(const String& label, Type type)
- : label(label)
- , type(type)
- , yOffset(0)
- {
- }
- String label;
- Type type;
- int yOffset; // y offset of this item, relative to the top of the popup.
- bool enabled;
-};
-
-// FIXME: Our FramelessScrollView classes should probably implement HostWindow!
-
-// The PopupContainer 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).
-
-struct PopupContainerSettings {
- // Whether the PopupMenuClient should be told to change its text when a
- // new item is selected by using the arrow keys.
- bool setTextOnIndexChange;
-
- // Whether the selection should be accepted when the popup menu is
- // closed (through ESC being pressed or the focus going away).
- // Note that when TAB is pressed, the selection is always accepted
- // regardless of this setting.
- bool acceptOnAbandon;
-
- // Whether we should move the selection to the first/last item when
- // the user presses down/up arrow keys and the last/first item is
- // selected.
- bool loopSelectionNavigation;
-
- // Whether we should restrict the width of the PopupListBox or not.
- // Autocomplete popups are restricted, combo-boxes (select tags) aren't.
- bool restrictWidthOfListBox;
-
- // A hint on the display directionality of the item text in popup menu.
- //
- // We could either display the items in the drop-down using its DOM element's
- // directionality, or we could display the items in the drop-down using heuristics:
- // such as in its first strong directionality character's direction.
- // Please refer to the discussion (especially comment #7 and #10) in
- // https://bugs.webkit.org/show_bug.cgi?id=27889 for details.
- enum DirectionalityHint {
- // Use the DOM element's directionality to display the item text in popup menu.
- DOMElementDirection,
- // Use the item text's first strong-directional character's directionality
- // to display the item text in popup menu.
- FirstStrongDirectionalCharacterDirection,
- };
- DirectionalityHint itemTextDirectionalityHint;
-};
-
-class PopupContainer : public FramelessScrollView {
-public:
- enum PopupType {
- Select, // HTML select popup.
- Suggestion, // Autocomplete/autofill popup.
- };
-
- static PassRefPtr<PopupContainer> create(PopupMenuClient*, PopupType,
- const PopupContainerSettings&);
-
- // Whether a key event should be sent to this popup.
- virtual bool isInterestedInEventForKey(int keyCode);
-
- // FramelessScrollView
- virtual void paint(GraphicsContext*, const IntRect&);
- virtual void hide();
- virtual bool handleMouseDownEvent(const PlatformMouseEvent&);
- virtual bool handleMouseMoveEvent(const PlatformMouseEvent&);
- virtual bool handleMouseReleaseEvent(const PlatformMouseEvent&);
- virtual bool handleWheelEvent(const PlatformWheelEvent&);
- virtual bool handleKeyEvent(const PlatformKeyboardEvent&);
-
- // PopupContainer methods
-
- // Show the popup
- void showPopup(FrameView*);
-
- // Used on Mac Chromium for HTML select popup menus.
- void showExternal(const IntRect&, FrameView*, int index);
-
- // 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. This method is used for
- // displaying auto complete popup menus on Mac Chromium, and for all
- // popups on other platforms.
- void show(const IntRect&, FrameView*, int index);
-
- // Hides the popup.
- void hidePopup();
-
- // The popup was hidden.
- void notifyPopupHidden();
-
- // Compute size of widget and children.
- void layout();
-
- PopupListBox* listBox() const { return m_listBox.get(); }
-
- // Gets the index of the item that the user is currently moused-over or
- // has selected with the keyboard up/down arrows.
- int selectedIndex() const;
-
- // Refresh the popup values from the PopupMenuClient.
- void refresh();
-
- // The menu per-item data.
- const WTF::Vector<PopupItem*>& popupData() const;
-
- // The height of a row in the menu.
- int menuItemHeight() const;
-
- // The size of the font being used.
- int menuItemFontSize() const;
-
- // The style of the menu being used.
- PopupMenuStyle menuStyle() const;
-
- PopupType popupType() const { return m_popupType; }
-
-private:
- friend class WTF::RefCounted<PopupContainer>;
-
- PopupContainer(PopupMenuClient*, PopupType popupType, const PopupContainerSettings&);
- ~PopupContainer();
-
- // Paint the border.
- void paintBorder(GraphicsContext*, const IntRect&);
-
- // Returns the ChromeClient of the page this popup is associated with.
- ChromeClientChromium* chromeClientChromium();
-
- RefPtr<PopupListBox> m_listBox;
- RefPtr<FrameView> m_frameView;
-
- PopupContainerSettings m_settings;
- PopupType m_popupType;
- // Whether the popup is currently open.
- bool m_popupOpen;
-};
-
-class PopupMenuChromium : public PopupMenu {
-public:
- PopupMenuChromium(PopupMenuClient*);
- ~PopupMenuChromium();
-
- virtual void show(const IntRect&, FrameView*, int index);
- virtual void hide();
- virtual void updateFromElement();
- virtual void disconnectClient();
-
-private:
- PopupMenuClient* client() const { return m_popupClient; }
-
- PopupMenuClient* m_popupClient;
- PopupMenuPrivate p;
-};
-
-} // namespace WebCore
-
-#endif