mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
4.0 KiB
157 lines
4.0 KiB
// This is a part of the Microsoft Foundation Classes C++ library.
|
|
// Copyright (C) 1992-1995 Microsoft Corporation
|
|
// All rights reserved.
|
|
//
|
|
// This source code is only intended as a supplement to the
|
|
// Microsoft Foundation Classes Reference and related
|
|
// electronic documentation provided with the library.
|
|
// See these sources for detailed information regarding the
|
|
// Microsoft Foundation Classes product.
|
|
|
|
#include "stdafx.h"
|
|
|
|
#ifdef AFX_OLE2_SEG
|
|
#pragma code_seg(AFX_OLE2_SEG)
|
|
#endif
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// more User interface for COleClientItem
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// OLE Object Verb Menu helpers
|
|
|
|
// simple wrapper for OleUIAddVerbMenu API
|
|
|
|
void AFXAPI AfxOleSetEditMenu(COleClientItem* pItem, CMenu* pMenu,
|
|
UINT iMenuItem, UINT nIDVerbMin, UINT nIDVerbMax, UINT nIDConvert)
|
|
{
|
|
ASSERT_VALID(pMenu);
|
|
if (pItem != NULL)
|
|
ASSERT_VALID(pItem);
|
|
|
|
HMENU hmenuDummy;
|
|
if (!::OleUIAddVerbMenu(pItem != NULL ? pItem->m_lpObject : NULL,
|
|
NULL, pMenu->GetSafeHmenu(), iMenuItem,
|
|
nIDVerbMin, nIDVerbMax, nIDConvert != 0, nIDConvert, &hmenuDummy))
|
|
{
|
|
// turn gray popup into gray disabled normal menu item
|
|
TCHAR szBuffer[256];
|
|
pMenu->GetMenuString(iMenuItem, szBuffer, sizeof szBuffer, MF_BYPOSITION);
|
|
pMenu->DeleteMenu(iMenuItem, MF_BYPOSITION);
|
|
pMenu->InsertMenu(
|
|
iMenuItem, MF_BYPOSITION|MF_STRING|MF_GRAYED|MF_DISABLED,
|
|
nIDVerbMin, szBuffer);
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// UI message handlers
|
|
|
|
void COleDocument::OnUpdatePasteMenu(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(COleClientItem::CanPaste());
|
|
}
|
|
|
|
void COleDocument::OnUpdatePasteLinkMenu(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(COleClientItem::CanPasteLink());
|
|
}
|
|
|
|
void COleDocument::OnUpdateEditLinksMenu(CCmdUI* pCmdUI)
|
|
{
|
|
POSITION pos = GetStartPosition();
|
|
COleClientItem* pItem;
|
|
while ((pItem = GetNextClientItem(pos)) != NULL)
|
|
{
|
|
if (pItem->GetType() == OT_LINK)
|
|
{
|
|
// we found a link!
|
|
pCmdUI->Enable(TRUE);
|
|
return;
|
|
}
|
|
}
|
|
pCmdUI->Enable(FALSE); // no links today
|
|
}
|
|
|
|
void COleDocument::OnEditLinks()
|
|
{
|
|
ASSERT_VALID(this);
|
|
|
|
COleLinksDialog dlg(this, GetRoutingView());
|
|
dlg.DoModal();
|
|
}
|
|
|
|
void COleDocument::OnEditConvert()
|
|
{
|
|
ASSERT_VALID(this);
|
|
|
|
// get selected item
|
|
COleClientItem* pItem = GetPrimarySelectedItem(GetRoutingView());
|
|
if (pItem == NULL)
|
|
return;
|
|
|
|
// do conversion dialog & convert for that item
|
|
COleConvertDialog dlg(pItem);
|
|
if (dlg.DoModal() == IDOK)
|
|
dlg.DoConvert(pItem);
|
|
}
|
|
|
|
void COleDocument::OnUpdateEditChangeIcon(CCmdUI* pCmdUI)
|
|
{
|
|
ASSERT_VALID(this);
|
|
|
|
pCmdUI->Enable(GetPrimarySelectedItem(GetRoutingView()) != NULL);
|
|
}
|
|
|
|
void COleDocument::OnEditChangeIcon()
|
|
{
|
|
ASSERT_VALID(this);
|
|
|
|
// get selected item
|
|
COleClientItem* pItem = GetPrimarySelectedItem(GetRoutingView());
|
|
if (pItem == NULL)
|
|
return;
|
|
|
|
// do conversion dialog & convert for that item
|
|
COleChangeIconDialog dlg(pItem);
|
|
if (dlg.DoModal() == IDOK)
|
|
dlg.DoChangeIcon(pItem);
|
|
}
|
|
|
|
void COleDocument::OnUpdateObjectVerbMenu(CCmdUI* pCmdUI)
|
|
{
|
|
if (pCmdUI->m_pMenu == NULL || pCmdUI->m_pParentMenu == NULL)
|
|
{
|
|
// not a menu or is on sub-menu (don't recurse)
|
|
pCmdUI->ContinueRouting();
|
|
return;
|
|
}
|
|
|
|
// check for single selection
|
|
COleClientItem* pItem = GetPrimarySelectedItem(GetRoutingView());
|
|
if (pItem == NULL || pItem->GetType() == OT_STATIC)
|
|
{
|
|
// no selection, or is 'static' item
|
|
pCmdUI->Enable(FALSE);
|
|
}
|
|
|
|
// only include Convert... if there is a handler for ID_OLE_EDIT_CONVERT
|
|
UINT nConvertID = ID_OLE_EDIT_CONVERT;
|
|
AFX_CMDHANDLERINFO info;
|
|
if (!OnCmdMsg(ID_OLE_EDIT_CONVERT, CN_COMMAND, NULL, &info))
|
|
nConvertID = 0;
|
|
|
|
// update the menu
|
|
AfxOleSetEditMenu(GetPrimarySelectedItem(GetRoutingView()),
|
|
pCmdUI->m_pMenu, pCmdUI->m_nIndex,
|
|
ID_OLE_VERB_FIRST, ID_OLE_VERB_LAST, nConvertID);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|