| Index: third_party/active_doc/in_place_menu.h
|
| diff --git a/third_party/active_doc/in_place_menu.h b/third_party/active_doc/in_place_menu.h
|
| deleted file mode 100644
|
| index 4b7be502b5f5ff96fce1f6167fdc1a761aee4c56..0000000000000000000000000000000000000000
|
| --- a/third_party/active_doc/in_place_menu.h
|
| +++ /dev/null
|
| @@ -1,198 +0,0 @@
|
| -// in_place_menu.h : menu merging implementation
|
| -//
|
| -// This file is a modified version of the menu.h file, which is
|
| -// part of the ActiveDoc MSDN sample. The modifications are largely
|
| -// conversions to Google coding guidelines. Below is the original header
|
| -// from the file.
|
| -
|
| -// This is a part of the Active Template Library.
|
| -// Copyright (c) Microsoft Corporation. All rights reserved.
|
| -//
|
| -// This source code is only intended as a supplement to the
|
| -// Active Template Library Reference and related
|
| -// electronic documentation provided with the library.
|
| -// See these sources for detailed information regarding the
|
| -// Active Template Library product.
|
| -
|
| -#ifndef CHROME_FRAME_IN_PLACE_MENU_H_
|
| -#define CHROME_FRAME_IN_PLACE_MENU_H_
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/win/scoped_comptr.h"
|
| -
|
| -template <class T>
|
| -class InPlaceMenu {
|
| - public:
|
| - InPlaceMenu() : shared_menu_(NULL), ole_menu_(NULL), our_menu_(NULL) {
|
| - }
|
| -
|
| - ~InPlaceMenu() {
|
| - InPlaceMenuDestroy();
|
| - }
|
| -
|
| - HRESULT InPlaceMenuCreate(LPCWSTR menu_name) {
|
| - // We might already have an in-place menu set, because we set menus
|
| - // IOleDocumentView::UIActivate as well as in
|
| - // IOleInPlaceActiveObject::OnDocWindowActivate. If we have already
|
| - // done our work, just return silently
|
| - if (ole_menu_ || shared_menu_)
|
| - return S_OK;
|
| -
|
| - base::win::ScopedComPtr<IOleInPlaceFrame> in_place_frame;
|
| - GetInPlaceFrame(in_place_frame.Receive());
|
| - // We have no IOleInPlaceFrame, no menu merging possible
|
| - if (!in_place_frame) {
|
| - NOTREACHED();
|
| - return E_FAIL;
|
| - }
|
| - // Create a blank menu and ask the container to add
|
| - // its menus into the OLEMENUGROUPWIDTHS structure
|
| - shared_menu_ = ::CreateMenu();
|
| - OLEMENUGROUPWIDTHS mgw = {0};
|
| - HRESULT hr = in_place_frame->InsertMenus(shared_menu_, &mgw);
|
| - if (FAILED(hr)) {
|
| - ::DestroyMenu(shared_menu_);
|
| - shared_menu_ = NULL;
|
| - return hr;
|
| - }
|
| - // Insert our menus
|
| - our_menu_ = LoadMenu(_AtlBaseModule.GetResourceInstance(),menu_name);
|
| - MergeMenus(shared_menu_, our_menu_, &mgw.width[0], 1);
|
| - // Send the menu to the client
|
| - ole_menu_ = (HMENU)OleCreateMenuDescriptor(shared_menu_, &mgw);
|
| - T* t = static_cast<T*>(this);
|
| - in_place_frame->SetMenu(shared_menu_, ole_menu_, t->m_hWnd);
|
| - return S_OK;
|
| - }
|
| -
|
| - HRESULT InPlaceMenuDestroy() {
|
| - base::win::ScopedComPtr<IOleInPlaceFrame> in_place_frame;
|
| - GetInPlaceFrame(in_place_frame.Receive());
|
| - if (in_place_frame) {
|
| - in_place_frame->RemoveMenus(shared_menu_);
|
| - in_place_frame->SetMenu(NULL, NULL, NULL);
|
| - }
|
| - if (ole_menu_) {
|
| - OleDestroyMenuDescriptor(ole_menu_);
|
| - ole_menu_ = NULL;
|
| - }
|
| - if (shared_menu_) {
|
| - UnmergeMenus(shared_menu_, our_menu_);
|
| - DestroyMenu(shared_menu_);
|
| - shared_menu_ = NULL;
|
| - }
|
| - if (our_menu_) {
|
| - DestroyMenu(our_menu_);
|
| - our_menu_ = NULL;
|
| - }
|
| - return S_OK;
|
| - }
|
| -
|
| - void MergeMenus(HMENU shared_menu, HMENU source_menu, LONG* menu_widths,
|
| - unsigned int width_index) {
|
| - // Copy the popups from the source menu
|
| - // Insert at appropriate spot depending on width_index
|
| - DCHECK(width_index == 0 || width_index == 1);
|
| - int position = 0;
|
| - if (width_index == 1)
|
| - position = (int)menu_widths[0];
|
| - int group_width = 0;
|
| - int menu_items = GetMenuItemCount(source_menu);
|
| - for (int index = 0; index < menu_items; index++) {
|
| - // Get the HMENU of the popup
|
| - HMENU popup_menu = ::GetSubMenu(source_menu, index);
|
| - // Separators move us to next group
|
| - UINT state = GetMenuState(source_menu, index, MF_BYPOSITION);
|
| - if (!popup_menu && (state & MF_SEPARATOR)) {
|
| - // Servers should not touch past 5
|
| - DCHECK(width_index <= 5);
|
| - menu_widths[width_index] = group_width;
|
| - group_width = 0;
|
| - if (width_index < 5)
|
| - position += static_cast<int>(menu_widths[width_index+1]);
|
| - width_index += 2;
|
| - } else {
|
| - // Get the menu item text
|
| - TCHAR item_text[256] = {0};
|
| - int text_length = GetMenuString(source_menu, index, item_text,
|
| - ARRAYSIZE(item_text), MF_BYPOSITION);
|
| - // Popups are handled differently than normal menu items
|
| - if (popup_menu) {
|
| - if (::GetMenuItemCount(popup_menu) != 0) {
|
| - // Strip the HIBYTE because it contains a count of items
|
| - state = LOBYTE(state) | MF_POPUP; // Must be popup
|
| - // Non-empty popup -- add it to the shared menu bar
|
| - InsertMenu(shared_menu, position, state|MF_BYPOSITION,
|
| - reinterpret_cast<UINT_PTR>(popup_menu), item_text);
|
| - ++position;
|
| - ++group_width;
|
| - }
|
| - } else if (text_length > 0) {
|
| - // only non-empty items are added
|
| - DCHECK(item_text[0] != 0);
|
| - // here the state does not contain a count in the HIBYTE
|
| - InsertMenu(shared_menu, position, state|MF_BYPOSITION,
|
| - GetMenuItemID(source_menu, index), item_text);
|
| - ++position;
|
| - ++group_width;
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - void UnmergeMenus(HMENU shared_menu, HMENU source_menu) {
|
| - int our_item_count = GetMenuItemCount(source_menu);
|
| - int shared_item_count = GetMenuItemCount(shared_menu);
|
| -
|
| - for (int index = shared_item_count - 1; index >= 0; index--) {
|
| - // Check the popup menus
|
| - HMENU popup_menu = ::GetSubMenu(shared_menu, index);
|
| - if (popup_menu) {
|
| - // If it is one of ours, remove it from the shared menu
|
| - for (int sub_index = 0; sub_index < our_item_count; sub_index++) {
|
| - if (::GetSubMenu(source_menu, sub_index) == popup_menu) {
|
| - // Remove the menu from hMenuShared
|
| - RemoveMenu(shared_menu, index, MF_BYPOSITION);
|
| - break;
|
| - }
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - protected:
|
| - HRESULT GetInPlaceFrame(IOleInPlaceFrame** in_place_frame) {
|
| - if (!in_place_frame) {
|
| - NOTREACHED();
|
| - return E_POINTER;
|
| - }
|
| - T* t = static_cast<T*>(this);
|
| - HRESULT hr = E_FAIL;
|
| - if (S_OK != t->GetInPlaceFrame(in_place_frame)) {
|
| - // We weren't given an IOleInPlaceFrame pointer, so
|
| - // we'll have to get it ourselves.
|
| - if (t->m_spInPlaceSite) {
|
| - t->frame_info_.cb = sizeof(OLEINPLACEFRAMEINFO);
|
| - base::win::ScopedComPtr<IOleInPlaceUIWindow> in_place_ui_window;
|
| - RECT position_rect = {0};
|
| - RECT clip_rect = {0};
|
| - hr = t->m_spInPlaceSite->GetWindowContext(in_place_frame,
|
| - in_place_ui_window.Receive(),
|
| - &position_rect, &clip_rect,
|
| - &t->frame_info_);
|
| - }
|
| - }
|
| - return hr;
|
| - }
|
| -
|
| - protected:
|
| - // The OLE menu descriptor created by the OleCreateMenuDescriptor
|
| - HMENU ole_menu_;
|
| - // The shared menu that we pass to IOleInPlaceFrame::SetMenu
|
| - HMENU shared_menu_;
|
| - // Our menu resource that we want to insert
|
| - HMENU our_menu_;
|
| -};
|
| -
|
| -#endif // CHROME_FRAME_IN_PLACE_MENU_H_
|
| -
|
|
|