diff options
author | Ben Murdoch <benm@google.com> | 2009-08-11 17:01:47 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2009-08-11 18:21:02 +0100 |
commit | 0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5 (patch) | |
tree | 2943df35f62d885c89d01063cc528dd73b480fea /WebCore/platform/haiku/ContextMenuItemHaiku.cpp | |
parent | 7e7a70bfa49a1122b2597a1e6367d89eb4035eca (diff) | |
download | external_webkit-0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5.zip external_webkit-0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5.tar.gz external_webkit-0bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5.tar.bz2 |
Merge in WebKit r47029.
Diffstat (limited to 'WebCore/platform/haiku/ContextMenuItemHaiku.cpp')
-rw-r--r-- | WebCore/platform/haiku/ContextMenuItemHaiku.cpp | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/WebCore/platform/haiku/ContextMenuItemHaiku.cpp b/WebCore/platform/haiku/ContextMenuItemHaiku.cpp new file mode 100644 index 0000000..cd5abaf --- /dev/null +++ b/WebCore/platform/haiku/ContextMenuItemHaiku.cpp @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2006 Zack Rusin <zack@kde.org> + * Copyright (C) 2007 Ryan Leavengood <leavengood@gmail.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#include "config.h" +#include "ContextMenuItem.h" + +#include "ContextMenu.h" +#include "NotImplemented.h" + +#include <Menu.h> +#include <MenuItem.h> +#include <Message.h> +#include <String.h> + + +using namespace WebCore; + +ContextMenuItem::ContextMenuItem(PlatformMenuItemDescription item) +{ + m_platformDescription = item; +} + +ContextMenuItem::ContextMenuItem(ContextMenu* subMenu) +{ + m_platformDescription = new BMenuItem(subMenu->platformDescription(), + new BMessage(ContextMenuItemTagNoAction)); +} + +ContextMenuItem::ContextMenuItem(ContextMenuItemType type, ContextMenuAction action, + const String& title, ContextMenu* subMenu) +{ + if (type == ActionType) + m_platformDescription = new BMenuItem(BString(title).String(), new BMessage(action)); + else if (type == SeparatorType) + m_platformDescription = new BSeparatorItem(); + else { + m_platformDescription = new BMenuItem(subMenu->platformDescription(), new BMessage(action)); + m_platformDescription->SetLabel(BString(title).String()); + } +} + +ContextMenuItem::~ContextMenuItem() +{ + delete m_platformDescription; +} + +PlatformMenuItemDescription ContextMenuItem::releasePlatformDescription() +{ + BMenuItem* item = m_platformDescription; + m_platformDescription = NULL; + return item; +} + +ContextMenuItemType ContextMenuItem::type() const +{ + if (dynamic_cast<BSeparatorItem*>(m_platformDescription)) + return SeparatorType; + if (m_platformDescription->Submenu()) + return SubmenuType; + return ActionType; +} + +void ContextMenuItem::setType(ContextMenuItemType type) +{ + ContextMenuAction theAction = action(); + String theTitle = title(); + BMenu* subMenu = platformSubMenu(); + delete m_platformDescription; + + if (type == ActionType) + m_platformDescription = new BMenuItem(BString(theTitle).String(), new BMessage(theAction)); + else if (type == SeparatorType) + m_platformDescription = new BSeparatorItem(); + else { + if (subMenu) { + m_platformDescription = new BMenuItem(subMenu, new BMessage(theAction)); + m_platformDescription->SetLabel(BString(theTitle).String()); + } else + m_platformDescription = new BMenuItem(BString(theTitle).String(), new BMessage(theAction)); + } +} + +ContextMenuAction ContextMenuItem::action() const +{ + if (!m_platformDescription) + return ContextMenuItemTagNoAction; + return static_cast<WebCore::ContextMenuAction>(m_platformDescription->Message()->what); +} + +void ContextMenuItem::setAction(ContextMenuAction action) +{ + if (m_platformDescription) + m_platformDescription->Message()->what = action; +} + +String ContextMenuItem::title() const +{ + if (m_platformDescription) + return ""; + return BString(m_platformDescription->Label()); +} + +void ContextMenuItem::setTitle(const String& title) +{ + // FIXME: We need to find a better way to convert WebKit Strings into c strings + m_platformDescription->SetLabel(BString(title).String()); +} + +PlatformMenuDescription ContextMenuItem::platformSubMenu() const +{ + return m_platformDescription->Submenu(); +} + +void ContextMenuItem::setSubMenu(ContextMenu* menu) +{ + // FIXME: We assume m_platformDescription is valid + const char* title = m_platformDescription->Label(); + delete m_platformDescription; + m_platformDescription = new BMenuItem(menu->platformDescription(), new BMessage(action())); + m_platformDescription->SetLabel(title); +} + +void ContextMenuItem::setChecked(bool checked) +{ + if (m_platformDescription) + m_platformDescription->SetMarked(checked); +} + +void ContextMenuItem::setEnabled(bool enable) +{ + if (m_platformDescription) + m_platformDescription->SetEnabled(enable); +} + +bool ContextMenuItem::enabled() const +{ + if (!m_platformDescription) + return true; + return m_platformDescription->IsEnabled(); +} + |