18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2006, 2008 Apple Inc. All rights reserved.
3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2009-2010 ProFUSION embedded systems
5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2009-2010 Samsung Electronics
6db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "config.h"
26db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include "PopupMenuEfl.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
285af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#include "Chrome.h"
295af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#include "ChromeClientEfl.h"
30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "FrameView.h"
31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "NotImplemented.h"
32db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include "PopupMenuClient.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
36db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve BlockPopupMenuEfl::PopupMenuEfl(PopupMenuClient* client)
37dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    : m_popupClient(client)
385af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    , m_view(0)
39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
42db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve BlockPopupMenuEfl::~PopupMenuEfl()
43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
44967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    // Tell client to destroy data related to this popup since this object is
45967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    // going away.
46e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    if (m_view)
47e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        hide();
48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
50db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid PopupMenuEfl::show(const IntRect& rect, FrameView* view, int index)
51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
525af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    ASSERT(m_popupClient);
535af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    ChromeClientEfl* chromeClient = static_cast<ChromeClientEfl*>(view->frame()->page()->chrome()->client());
545af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    ASSERT(chromeClient);
555af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
565af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    m_view = view;
575af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    chromeClient->createSelectPopup(m_popupClient, index, rect);
58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
60db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid PopupMenuEfl::hide()
61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
625af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    ASSERT(m_view);
635af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    ChromeClientEfl* chromeClient = static_cast<ChromeClientEfl*>(m_view->frame()->page()->chrome()->client());
645af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    ASSERT(chromeClient);
655af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
665af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    chromeClient->destroySelectPopup();
67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
69db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid PopupMenuEfl::updateFromElement()
70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    client()->setTextFromItem(client()->selectedIndex());
72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
74db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid PopupMenuEfl::disconnectClient()
75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
76db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    m_popupClient = 0;
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
80