18a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/* 28a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Copyright (C) 2010 Google Inc. All rights reserved. 38a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * 48a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Redistribution and use in source and binary forms, with or without 58a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * modification, are permitted provided that the following conditions are 68a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * met: 78a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * 88a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * * Redistributions of source code must retain the above copyright 98a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * notice, this list of conditions and the following disclaimer. 108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * * Redistributions in binary form must reproduce the above 118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * copyright notice, this list of conditions and the following disclaimer 128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * in the documentation and/or other materials provided with the 138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * distribution. 148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * * Neither the name of Google Inc. nor the names of its 158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * contributors may be used to endorse or promote products derived from 168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * this software without specific prior written permission. 178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * 188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#ifndef AutoFillPopupMenuClient_h 328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#define AutoFillPopupMenuClient_h 338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 34ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include "PopupMenuClient.h" 358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blocknamespace WebCore { 378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockclass HTMLInputElement; 38ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockclass PopupMenuStyle; 39ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockclass RenderStyle; 408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blocknamespace WebKit { 438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockclass WebString; 44ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockclass WebViewImpl; 458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blocktemplate <typename T> class WebVector; 468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block// The AutoFill suggestions popup menu client, used to display name suggestions 488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block// with right-justified labels. 49ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockclass AutoFillPopupMenuClient : public WebCore::PopupMenuClient { 508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockpublic: 51ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block AutoFillPopupMenuClient(); 52ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual ~AutoFillPopupMenuClient(); 53ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 54ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Returns the number of suggestions available. 558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block virtual unsigned getSuggestionsCount() const; 56ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 57ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Returns the suggestion at |listIndex|. 588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block virtual WebString getSuggestion(unsigned listIndex) const; 59ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 60967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // Returns the label at |listIndex|. 61967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch virtual WebString getLabel(unsigned listIndex) const; 62967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 630617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen // Returns the icon at |listIndex|. 640617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen virtual WebString getIcon(unsigned listIndex) const; 650617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 66ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Removes the suggestion at |listIndex| from the list of suggestions. 678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block virtual void removeSuggestionAtIndex(unsigned listIndex); 688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 69967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // Returns true if the suggestion at |listIndex| can be removed. 70967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch bool canRemoveSuggestionAtIndex(unsigned listIndex); 71967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 72ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // WebCore::PopupMenuClient methods: 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void valueChanged(unsigned listIndex, bool fireEvents = true); 74ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual void selectionChanged(unsigned, bool); 75545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual void selectionCleared(); 76dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch virtual WTF::String itemText(unsigned listIndex) const; 77dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch virtual WTF::String itemLabel(unsigned listIndex) const; 78dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch virtual WTF::String itemIcon(unsigned listIndex) const; 79dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch virtual WTF::String itemToolTip(unsigned lastIndex) const { return WTF::String(); } 80dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch virtual WTF::String itemAccessibilityText(unsigned lastIndex) const { return WTF::String(); } 816b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual bool itemIsEnabled(unsigned listIndex) const; 82ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual WebCore::PopupMenuStyle itemStyle(unsigned listIndex) const; 83ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual WebCore::PopupMenuStyle menuStyle() const; 84ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual int clientInsetLeft() const { return 0; } 85ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual int clientInsetRight() const { return 0; } 86ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual int clientPaddingLeft() const; 87ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual int clientPaddingRight() const; 88ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual int listSize() const { return getSuggestionsCount(); } 89ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual int selectedIndex() const { return m_selectedIndex; } 90545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual void popupDidHide(); 91545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual bool itemIsSeparator(unsigned listIndex) const; 92ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual bool itemIsLabel(unsigned listIndex) const { return false; } 93ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual bool itemIsSelected(unsigned listIndex) const { return false; } 94ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual bool shouldPopOver() const { return false; } 95ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual bool valueShouldChangeOnHotTrack() const { return false; } 96ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual void setTextFromItem(unsigned listIndex); 97ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual WebCore::FontSelector* fontSelector() const; 98ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual WebCore::HostWindow* hostWindow() const; 99ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual PassRefPtr<WebCore::Scrollbar> createScrollbar( 100ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebCore::ScrollableArea* client, 101ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block WebCore::ScrollbarOrientation orientation, 102ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block WebCore::ScrollbarControlSize size); 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block void initialize(WebCore::HTMLInputElement*, 1058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block const WebVector<WebString>& names, 1068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block const WebVector<WebString>& labels, 1070617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen const WebVector<WebString>& icons, 108967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch const WebVector<int>& uniqueIDs, 109545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch int separatorIndex); 1108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block void setSuggestions(const WebVector<WebString>& names, 112545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch const WebVector<WebString>& labels, 1130617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen const WebVector<WebString>& icons, 114967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch const WebVector<int>& uniqueIDs, 115545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch int separatorIndex); 1168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockprivate: 118967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // Convert the specified index from an index into the visible list (which might 119967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // include a separator entry) to an index to |m_names| and |m_labels|. 120967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // Returns -1 if the given index points to the separator. 121967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch int convertListIndexToInternalIndex(unsigned) const; 122ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block WebViewImpl* getWebView() const; 123ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block WebCore::HTMLInputElement* getTextField() const { return m_textField.get(); } 124ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block WebCore::RenderStyle* textFieldStyle() const; 125ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 126ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block int getSelectedIndex() const { return m_selectedIndex; } 127ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void setSelectedIndex(int index) { m_selectedIndex = index; } 128ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 1296b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner bool itemIsWarning(unsigned listIndex) const; 1306b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1310617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen // The names, labels and icons that make up the contents of the menu items. 132dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Vector<WTF::String> m_names; 133dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Vector<WTF::String> m_labels; 134dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Vector<WTF::String> m_icons; 135967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch Vector<int> m_uniqueIDs; 136545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 137545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // The index of the separator. -1 if there is no separator. 138545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch int m_separatorIndex; 139ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 140ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // The index of the selected item. -1 if there is no selected item. 141ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block int m_selectedIndex; 142ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 143ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block RefPtr<WebCore::HTMLInputElement> m_textField; 1446b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner OwnPtr<WebCore::PopupMenuStyle> m_regularStyle; 1456b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner OwnPtr<WebCore::PopupMenuStyle> m_warningStyle; 1468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 1478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} // namespace WebKit 1498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#endif 151