merged 2.2 branch

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Bryan Petty
2000-07-15 19:51:35 +00:00
parent 8a693e6e04
commit f6bcfd974e
1835 changed files with 237729 additions and 67990 deletions

View File

@@ -49,6 +49,15 @@ extern wxMenu* wxCurrentPopupMenu;
//
static const int idMenuTitle = -2;
//
// The unique ID for Menus
//
#ifdef __VISAGECPP__
USHORT wxMenu::m_nextMenuId = 0;
#else
static USHORT wxMenu::m_nextMenuId = 0;
#endif
// ----------------------------------------------------------------------------
// macros
// ----------------------------------------------------------------------------
@@ -73,7 +82,7 @@ static wxString TextToLabel(const wxString& rTitle)
pc++;
Title << wxT('&');
}
else
else
Title << wxT('~');
}
// else if (*pc == wxT('/'))
@@ -113,7 +122,7 @@ void wxMenu::Init()
// Create the menu (to be used as a submenu or a popup)
//
if ((m_hMenu = ::WinCreateWindow( HWND_DESKTOP
,(const wxChar*)WC_MENU
,WC_MENU
,"Menu"
,0L
,0L
@@ -132,7 +141,7 @@ void wxMenu::Init()
m_vMenuData.iPosition = 0;
m_vMenuData.afStyle = MIS_SUBMENU | MIS_TEXT;
m_vMenuData.afAttribute = (USHORT)0;
m_vMenuData.id = (USHORT)0;
m_vMenuData.id = m_nextMenuId++;
m_vMenuData.hwndSubMenu = m_hMenu;
m_vMenuData.hItem = NULLHANDLE;
@@ -169,7 +178,9 @@ wxMenu::~wxMenu()
//
// Delete accels
//
#if (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 )))
WX_CLEAR_ARRAY(m_vAccels);
#endif
#endif // wxUSE_ACCEL
} // end of wxMenu::~wxMenu
@@ -254,13 +265,24 @@ bool wxMenu::DoInsertOrAppend(
{
ERRORID vError;
wxString sError;
MENUITEM vItem;
#if wxUSE_ACCEL
UpdateAccel(pItem);
#endif // wxUSE_ACCEL
memset(&vItem, '\0', sizeof(vItem));
//
// rItem is the member MENUITEM for the menu items and the submenu's
// MENUITEM for submenus as required by ::MM_INSERTITEM message API
//
wxMenu* pSubmenu = pItem->GetSubMenu();
MENUITEM &rItem = (pSubmenu != NULL)?pSubmenu->m_vMenuData:
pItem->m_vMenuData;
if(pSubmenu != NULL)
{
wxASSERT_MSG(pSubmenu->GetHMenu(), wxT("invalid submenu"));
pSubmenu->SetParent(this);
rItem.afStyle |= MIS_SUBMENU | MIS_TEXT;
}
//
// If "Break" has just been called, insert a menu break before this item
@@ -268,16 +290,10 @@ bool wxMenu::DoInsertOrAppend(
//
if (m_bDoBreak)
{
vItem.afStyle |= MIS_BREAK;
rItem.afStyle |= MIS_BREAK;
m_bDoBreak = FALSE;
}
//
// Menu items that are being inserted into a submenu MUST have a
// MENUITEM structure separate from the parent menu so we must use
// a local vItem not the object's m_vMenuItem as that is the MENUITEM
// associated with the parent submenu.
//
if (pItem->IsSeparator())
{
vItem.afStyle |= MIS_SEPARATOR;
@@ -314,7 +330,7 @@ bool wxMenu::DoInsertOrAppend(
// item draws itself, pass pointer to it in data parameter
// Will eventually need to set the image handle somewhere into vItem.hItem
//
vItem.afStyle |= MIS_OWNERDRAW;
rItem.afStyle |= MIS_OWNERDRAW;
pData = (BYTE*)pItem;
// vItem.hItem = ????
}
@@ -328,24 +344,22 @@ bool wxMenu::DoInsertOrAppend(
pData = (char*)pItem->GetText().c_str();
}
APIRET rc;
if (pSubmenu == NULL)
if (nPos == (size_t)-1)
{
//
// -1 means append at end
//
if (nPos == (size_t)-1)
{
vItem.iPosition = MIT_END;
}
else
{
vItem.iPosition = nPos;
}
rItem.iPosition = MIT_END;
}
else
{
rItem.iPosition = nPos;
}
rc = (APIRET)::WinSendMsg(GetHmenu(), MM_INSERTITEM, (MPARAM)&vItem, (MPARAM)pData);
APIRET rc;
rc = (APIRET)::WinSendMsg( GetHmenu()
,MM_INSERTITEM
,(MPARAM)&rItem
,(MPARAM)pData
);
if (rc == MIT_MEMERROR || rc == MIT_ERROR)
{
vError = ::WinGetLastError(vHabmain);
@@ -665,7 +679,6 @@ WXHMENU wxMenuBar::Create()
{
MENUITEM vItem;
HWND hFrame;
HWND hMenuBar = NULLHANDLE;
if (m_hMenu != 0 )
return m_hMenu;
@@ -682,39 +695,39 @@ WXHMENU wxMenuBar::Create()
//
// Create an empty menu and then fill it with insertions
//
if (!wxWindow::OS2Create( hFrame
,WC_MENU
,"Menu"
,MS_ACTIONBAR | WS_SYNCPAINT | WS_VISIBLE
,0L
,0L
,0L
,0L
,hFrame
,HWND_TOP
,FID_MENU
,(PVOID)NULL
,(PVOID)NULL
))
if ((m_hMenu = ::WinCreateWindow( hFrame
,WC_MENU
,(PSZ)NULL
,MS_ACTIONBAR | WS_SYNCPAINT | WS_VISIBLE
,0L
,0L
,0L
,0L
,hFrame
,HWND_TOP
,FID_MENU
,NULL
,NULL
)) == 0)
{
wxLogLastError("CreateMenu");
wxLogLastError("WinLoadMenu");
}
else
{
size_t nCount = GetMenuCount();
hMenuBar = GetHwnd();
for (size_t i = 0; i < nCount; i++)
{
APIRET rc;
ERRORID vError;
wxString sError;
MENUITEM vItem;
HWND hSubMenu;
//
// Set the parent and owner of the submenues to be the menubar, not the desktop
//
if (!::WinSetParent(m_menus[i]->m_vMenuData.hwndSubMenu, hMenuBar, FALSE))
hSubMenu = m_menus[i]->m_vMenuData.hwndSubMenu;
if (!::WinSetParent(m_menus[i]->m_vMenuData.hwndSubMenu, m_hMenu, FALSE))
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
@@ -722,7 +735,7 @@ WXHMENU wxMenuBar::Create()
return NULLHANDLE;
}
if (!::WinSetOwner(m_menus[i]->m_vMenuData.hwndSubMenu, hMenuBar))
if (!::WinSetOwner(m_menus[i]->m_vMenuData.hwndSubMenu, m_hMenu))
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
@@ -732,7 +745,7 @@ WXHMENU wxMenuBar::Create()
m_menus[i]->m_vMenuData.iPosition = i;
rc = (APIRET)::WinSendMsg(hMenuBar, MM_INSERTITEM, (MPARAM)&m_menus[i]->m_vMenuData, (MPARAM)m_titles[i].c_str());
rc = (APIRET)::WinSendMsg(m_hMenu, MM_INSERTITEM, (MPARAM)&m_menus[i]->m_vMenuData, (MPARAM)m_titles[i].c_str());
if (rc == MIT_MEMERROR || rc == MIT_ERROR)
{
vError = ::WinGetLastError(vHabmain);
@@ -742,7 +755,7 @@ WXHMENU wxMenuBar::Create()
}
}
}
return hMenuBar;
return m_hMenu;
} // end of wxMenuBar::Create
// ---------------------------------------------------------------------------
@@ -771,7 +784,7 @@ void wxMenuBar::EnableTop(
wxLogLastError("LogLastError");
return;
}
::WinSendMsg((HWND)m_hMenu, MM_SETITEMATTR, MPFROM2SHORT(nId, TRUE), MPFROM2SHORT(uFlag, uFlag));
::WinSendMsg((HWND)m_hMenu, MM_SETITEMATTR, MPFROM2SHORT(nId, TRUE), MPFROM2SHORT(MIA_DISABLED, uFlag));
Refresh();
} // end of wxMenuBar::EnableTop
@@ -852,7 +865,7 @@ wxMenu* wxMenuBar::Replace(
m_titles[nPos] = Title;
if (IsAttached())
{
::WinSendMsg((HWND)m_hMenu, MM_DELETEITEM, MPFROM2SHORT(nId, TRUE), (MPARAM)0);
::WinSendMsg((HWND)m_hMenu, MM_REMOVEITEM, MPFROM2SHORT(nId, TRUE), (MPARAM)0);
::WinSendMsg((HWND)m_hMenu, MM_INSERTITEM, (MPARAM)&pMenu->m_vMenuData, (MPARAM)Title.c_str());
#if wxUSE_ACCEL
@@ -955,7 +968,7 @@ wxMenu* wxMenuBar::Remove(
}
if (IsAttached())
{
::WinSendMsg((HWND)GetHmenu(), MM_DELETEITEM, MPFROM2SHORT(nId, TRUE), (MPARAM)0);
::WinSendMsg((HWND)GetHmenu(), MM_REMOVEITEM, MPFROM2SHORT(nId, TRUE), (MPARAM)0);
pMenu->Detach();
#if wxUSE_ACCEL
@@ -1016,6 +1029,14 @@ void wxMenuBar::Attach(
#if wxUSE_ACCEL
RebuildAccelTable();
//
// Ensure the accelerator table is set to the frame (not the client!)
//
if (!::WinSetAccelTable( vHabmain
,(HWND)pFrame->GetFrame()
,m_vAccelTable.GetHACCEL()
))
wxLogLastError("WinSetAccelTable");
#endif // wxUSE_ACCEL
} // end of wxMenuBar::Attach