void ContextMenu::getContextMenuItems(HMENU menu, Vector<ContextMenuItem>& items) { #if OS(WINCE) notImplemented(); #else int count = ::GetMenuItemCount(menu); if (count <= 0) return; for (int i = 0; i < count; ++i) { MENUITEMINFO info = {0}; info.cbSize = sizeof(MENUITEMINFO); info.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING | MIIM_STATE | MIIM_SUBMENU; if (!::GetMenuItemInfo(menu, i, TRUE, &info)) continue; if (info.fType == MFT_SEPARATOR) { items.append(ContextMenuItem(SeparatorType, ContextMenuItemTagNoAction, String())); continue; } int menuStringLength = info.cch + 1; OwnArrayPtr<WCHAR> menuString = adoptArrayPtr(new WCHAR[menuStringLength]); info.dwTypeData = menuString.get(); info.cch = menuStringLength; if (::GetMenuItemInfo(menu, i, TRUE, &info)) items.append(ContextMenuItem(info)); } #endif }
void ContextMenu::getContextMenuItems(HMENU menu, Vector<ContextMenuItem>& items) { int count = ::GetMenuItemCount(menu); if (count <= 0) return; for (int i = 0; i < count; ++i) { MENUITEMINFO info = {0}; info.cbSize = sizeof(MENUITEMINFO); info.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING | MIIM_STATE | MIIM_SUBMENU; if (!::GetMenuItemInfo(menu, i, TRUE, &info)) continue; if (info.fType == MFT_SEPARATOR) { items.append(ContextMenuItem(SeparatorType, ContextMenuItemTagNoAction, String())); continue; } int menuStringLength = info.cch + 1; auto menuString = std::make_unique<WCHAR[]>(menuStringLength); info.dwTypeData = menuString.get(); info.cch = menuStringLength; if (::GetMenuItemInfo(menu, i, TRUE, &info)) items.append(ContextMenuItem(info)); } }
ContextMenuItem WebContextMenuItemData::core() const { if (m_type != SubmenuType) return ContextMenuItem(m_type, m_action, m_title, m_enabled, m_checked); Vector<ContextMenuItem> subMenuItems = coreItems(m_submenu); return ContextMenuItem(m_action, m_title, m_enabled, m_checked, subMenuItems); }
static bool populateContextMenuItems(v8::Isolate* isolate, const v8::Local<v8::Array>& itemArray, ContextMenu& menu) { v8::Local<v8::Context> context = isolate->GetCurrentContext(); for (size_t i = 0; i < itemArray->Length(); ++i) { v8::Local<v8::Object> item = itemArray->Get(context, i).ToLocalChecked().As<v8::Object>(); v8::Local<v8::Value> type; v8::Local<v8::Value> id; v8::Local<v8::Value> label; v8::Local<v8::Value> enabled; v8::Local<v8::Value> checked; v8::Local<v8::Value> subItems; if (!item->Get(context, v8AtomicString(isolate, "type")).ToLocal(&type) || !item->Get(context, v8AtomicString(isolate, "id")).ToLocal(&id) || !item->Get(context, v8AtomicString(isolate, "label")).ToLocal(&label) || !item->Get(context, v8AtomicString(isolate, "enabled")) .ToLocal(&enabled) || !item->Get(context, v8AtomicString(isolate, "checked")) .ToLocal(&checked) || !item->Get(context, v8AtomicString(isolate, "subItems")) .ToLocal(&subItems)) return false; if (!type->IsString()) continue; String typeString = toCoreStringWithNullCheck(type.As<v8::String>()); if (typeString == "separator") { ContextMenuItem item(ContextMenuItem( SeparatorType, ContextMenuItemCustomTagNoAction, String(), String())); menu.appendItem(item); } else if (typeString == "subMenu" && subItems->IsArray()) { ContextMenu subMenu; v8::Local<v8::Array> subItemsArray = v8::Local<v8::Array>::Cast(subItems); if (!populateContextMenuItems(isolate, subItemsArray, subMenu)) return false; TOSTRING_DEFAULT(V8StringResource<TreatNullAsNullString>, labelString, label, false); ContextMenuItem item(SubmenuType, ContextMenuItemCustomTagNoAction, labelString, String(), &subMenu); menu.appendItem(item); } else { int32_t int32Id; if (!v8Call(id->Int32Value(context), int32Id)) return false; ContextMenuAction typedId = static_cast<ContextMenuAction>( ContextMenuItemBaseCustomTag + int32Id); TOSTRING_DEFAULT(V8StringResource<TreatNullAsNullString>, labelString, label, false); ContextMenuItem menuItem( (typeString == "checkbox" ? CheckableActionType : ActionType), typedId, labelString, String()); if (checked->IsBoolean()) menuItem.setChecked(checked.As<v8::Boolean>()->Value()); if (enabled->IsBoolean()) menuItem.setEnabled(enabled.As<v8::Boolean>()->Value()); menu.appendItem(menuItem); } } return true; }
Vector<ContextMenuItem> contextMenuItemVector(const PlatformMenuDescription menu) { Vector<ContextMenuItem> menuItemVector; GOwnPtr<GList> children(gtk_container_get_children(GTK_CONTAINER(menu))); int itemCount = g_list_length(children.get()); menuItemVector.reserveCapacity(itemCount); for (GList* item = children.get(); item; item = g_list_next(item)) { GtkWidget* widget = static_cast<GtkWidget*>(item->data); if (!GTK_IS_MENU_ITEM(widget)) continue; menuItemVector.append(ContextMenuItem(GTK_MENU_ITEM(widget))); } return menuItemVector; }
void SaveButton::AddContextMenu(int menuType) { if (menuType == 0) //Save browser { menu = new ContextMenu(this); menu->AddItem(ContextMenuItem("Open", 0, true)); menu->AddItem(ContextMenuItem("Select", 1, true)); menu->AddItem(ContextMenuItem("View History", 2, true)); menu->AddItem(ContextMenuItem("More by this user", 3, true)); } else if (menuType == 1) //Local save browser { menu = new ContextMenu(this); menu->AddItem(ContextMenuItem("Open", 0, true)); menu->AddItem(ContextMenuItem("Rename", 2, true)); menu->AddItem(ContextMenuItem("Delete", 3, true)); } }
static bool populateContextMenuItems(v8::Local<v8::Array>& itemArray, ContextMenu& menu, v8::Isolate* isolate) { for (size_t i = 0; i < itemArray->Length(); ++i) { v8::Local<v8::Object> item = v8::Local<v8::Object>::Cast(itemArray->Get(i)); v8::Local<v8::Value> type = item->Get(v8AtomicString(isolate, "type")); v8::Local<v8::Value> id = item->Get(v8AtomicString(isolate, "id")); v8::Local<v8::Value> label = item->Get(v8AtomicString(isolate, "label")); v8::Local<v8::Value> enabled = item->Get(v8AtomicString(isolate, "enabled")); v8::Local<v8::Value> checked = item->Get(v8AtomicString(isolate, "checked")); v8::Local<v8::Value> subItems = item->Get(v8AtomicString(isolate, "subItems")); if (!type->IsString()) continue; String typeString = toCoreStringWithNullCheck(type.As<v8::String>()); if (typeString == "separator") { ContextMenuItem item(ContextMenuItem(SeparatorType, ContextMenuItemCustomTagNoAction, String())); menu.appendItem(item); } else if (typeString == "subMenu" && subItems->IsArray()) { ContextMenu subMenu; v8::Local<v8::Array> subItemsArray = v8::Local<v8::Array>::Cast(subItems); if (!populateContextMenuItems(subItemsArray, subMenu, isolate)) return false; V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(V8StringResource<WithNullCheck>, labelString, label, false); ContextMenuItem item(SubmenuType, ContextMenuItemCustomTagNoAction, labelString, &subMenu); menu.appendItem(item); } else { ContextMenuAction typedId = static_cast<ContextMenuAction>(ContextMenuItemBaseCustomTag + id->ToInt32()->Value()); V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(V8StringResource<WithNullCheck>, labelString, label, false); ContextMenuItem menuItem((typeString == "checkbox" ? CheckableActionType : ActionType), typedId, labelString); if (checked->IsBoolean()) menuItem.setChecked(checked->ToBoolean()->Value()); if (enabled->IsBoolean()) menuItem.setEnabled(enabled->ToBoolean()->Value()); menu.appendItem(menuItem); } } return true; }
static void populateContextMenuItems(v8::Local<v8::Array>& itemArray, ContextMenu& menu) { for (size_t i = 0; i < itemArray->Length(); ++i) { v8::Local<v8::Object> item = v8::Local<v8::Object>::Cast(itemArray->Get(i)); v8::Local<v8::Value> type = item->Get(v8::String::New("type")); v8::Local<v8::Value> id = item->Get(v8::String::New("id")); v8::Local<v8::Value> label = item->Get(v8::String::New("label")); v8::Local<v8::Value> enabled = item->Get(v8::String::New("enabled")); v8::Local<v8::Value> checked = item->Get(v8::String::New("checked")); v8::Local<v8::Value> subItems = item->Get(v8::String::New("subItems")); if (!type->IsString()) continue; String typeString = toWebCoreStringWithNullCheck(type); if (typeString == "separator") { ContextMenuItem item(ContextMenuItem(SeparatorType, ContextMenuItemCustomTagNoAction, String())); menu.appendItem(item); } else if (typeString == "subMenu" && subItems->IsArray()) { ContextMenu subMenu; v8::Local<v8::Array> subItemsArray = v8::Local<v8::Array>::Cast(subItems); populateContextMenuItems(subItemsArray, subMenu); ContextMenuItem item(SubmenuType, ContextMenuItemCustomTagNoAction, toWebCoreStringWithNullCheck(label), &subMenu); menu.appendItem(item); } else { ContextMenuAction typedId = static_cast<ContextMenuAction>(ContextMenuItemBaseCustomTag + id->ToInt32()->Value()); ContextMenuItem menuItem((typeString == "checkbox" ? CheckableActionType : ActionType), typedId, toWebCoreStringWithNullCheck(label)); if (checked->IsBoolean()) menuItem.setChecked(checked->ToBoolean()->Value()); if (enabled->IsBoolean()) menuItem.setEnabled(enabled->ToBoolean()->Value()); menu.appendItem(menuItem); } } }