1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008 Apple Computer, Inc. All rights reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * are met: 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * documentation and/or other materials provided with the distribution. 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h" 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "ContextMenu.h" 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "ContextMenuItem.h" 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "PlatformMenuDescription.h" 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "wx/menu.h" 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 33d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/HashMap.h> 34d0825bca7fe65beaee391d30da42e937db621564Steve Block 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectusing namespace WebCore; 36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projecttypedef WTF::HashMap<int, ContextMenuAction> ItemActionMap; 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic ItemActionMap s_itemActions; 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectContextMenuItem* ContextMenu::itemWithId(int id) 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return new ContextMenuItem(ActionType, s_itemActions.get(id), ""); 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 45f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochContextMenu::ContextMenu() 46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_platformDescription = new wxMenu(0); 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectContextMenu::~ContextMenu() 51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_platformDescription) 53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project delete m_platformDescription; 54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid ContextMenu::appendItem(ContextMenuItem& item) 57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!m_platformDescription) 59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project PlatformMenuItemDescription itemDescription = item.releasePlatformDescription(); 62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project wxItemKind menuKindWx = ( itemDescription.type == CheckableActionType ) ? wxITEM_CHECK : wxITEM_NORMAL; 63635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project wxString titleWx(itemDescription.title); 64635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project int idWx = wxID_ANY; 65635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project wxMenuItem * itemWx; 66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ItemActionMap::const_iterator end = s_itemActions.end(); 68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project for (ItemActionMap::const_iterator it = s_itemActions.begin(); it != end; ++it) { 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (it->second == itemDescription.action) 70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project idWx = it->first; 71635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (itemDescription.subMenu) { 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project itemWx = new wxMenuItem(m_platformDescription, idWx, titleWx, wxEmptyString, wxITEM_NORMAL, itemDescription.subMenu); 75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } else if (itemDescription.type != SeparatorType) { 76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project itemWx = new wxMenuItem(m_platformDescription, idWx, titleWx, wxT(""), menuKindWx); 77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } else { 78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project itemWx = new wxMenuItem(m_platformDescription); 79635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 80635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project s_itemActions.add(itemWx->GetId(), item.action()); 82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 83635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_platformDescription->Append(itemWx); 84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_platformDescription->Enable(itemWx->GetId(), itemDescription.enabled); 85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 86635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (menuKindWx == wxITEM_CHECK) 87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_platformDescription->Check(itemWx->GetId(), itemDescription.checked); 88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid ContextMenu::setPlatformDescription(PlatformMenuDescription menu) 91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!menu) 93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_platformDescription) 96635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project delete m_platformDescription; 97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_platformDescription = menu; 99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectPlatformMenuDescription ContextMenu::platformDescription() const 102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_platformDescription; 104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectPlatformMenuDescription ContextMenu::releasePlatformDescription() 107635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project PlatformMenuDescription description = m_platformDescription; 109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_platformDescription = 0; 110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return description; 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 113