https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8bfebdf444d96337429a01cdf4a92711f39b4c91
commit 8bfebdf444d96337429a01cdf4a92711f39b4c91 Author: Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> AuthorDate: Tue Feb 6 13:34:34 2024 +0900 Commit: GitHub <nore...@github.com> CommitDate: Tue Feb 6 13:34:34 2024 +0900 [MSUTB] Add CUTBLBarMenu (#6445) Supporting Language Bar... JIRA issue: CORE-19363 - Implement CUTBLBarMenu class. --- dll/win32/msutb/msutb.cpp | 119 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/dll/win32/msutb/msutb.cpp b/dll/win32/msutb/msutb.cpp index 4585ed7e6ca..4d988b4f26b 100644 --- a/dll/win32/msutb/msutb.cpp +++ b/dll/win32/msutb/msutb.cpp @@ -725,6 +725,39 @@ public: /***********************************************************************/ +class CUTBLBarMenuItem; + +class CUTBLBarMenu : public CCicLibMenu +{ +protected: + CUTBMenuWnd *m_pMenuUI; + HINSTANCE m_hInst; + +public: + CUTBLBarMenu(HINSTANCE hInst); + ~CUTBLBarMenu() override; + + CUTBMenuWnd *CreateMenuUI(); + INT ShowPopup(CUIFWindow *pWindow, POINT pt, LPCRECT prcExclude); + + STDMETHOD_(CCicLibMenuItem*, CreateMenuItem)() override; + STDMETHOD_(CCicLibMenu*, CreateSubMenu)() override; +}; + +/***********************************************************************/ + +class CUTBLBarMenuItem : public CCicLibMenuItem +{ +public: + CUTBLBarMenu *m_pLBarMenu; + +public: + CUTBLBarMenuItem() { m_pLBarMenu = NULL; } + BOOL InsertToUI(CUTBMenuWnd *pMenuUI); +}; + +/***********************************************************************/ + class CTrayIconWnd { protected: @@ -2500,6 +2533,92 @@ STDMETHODIMP CLBarItemBase::GetTooltipString(BSTR *pbstrToolTip) return bstr ? S_OK : E_OUTOFMEMORY; } +/*********************************************************************** + * CUTBLBarMenu + */ + +CUTBLBarMenu::CUTBLBarMenu(HINSTANCE hInst) : CCicLibMenu() +{ + m_hInst = hInst; +} + +CUTBLBarMenu::~CUTBLBarMenu() +{ +} + +STDMETHODIMP_(CCicLibMenuItem*) CUTBLBarMenu::CreateMenuItem() +{ + CUTBLBarMenuItem *pItem = new(cicNoThrow) CUTBLBarMenuItem(); + if (!pItem) + return NULL; + pItem->m_pLBarMenu = this; + return pItem; +} + +CUTBMenuWnd *CUTBLBarMenu::CreateMenuUI() +{ + CUTBMenuWnd *pMenuUI = new(cicNoThrow) CUTBMenuWnd(m_hInst, g_dwMenuStyle, 0); + if (!pMenuUI) + return NULL; + + pMenuUI->Initialize(); + for (size_t iItem = 0; iItem < m_MenuItems.size(); ++iItem) + { + CUTBLBarMenuItem *pItem = (CUTBLBarMenuItem *)m_MenuItems[iItem]; + pItem->InsertToUI(pMenuUI); + } + + return pMenuUI; +} + +STDMETHODIMP_(CCicLibMenu*) CUTBLBarMenu::CreateSubMenu() +{ + return new(cicNoThrow) CUTBLBarMenu(m_hInst); +} + +INT CUTBLBarMenu::ShowPopup(CUIFWindow *pWindow, POINT pt, LPCRECT prcExclude) +{ + if (m_pMenuUI) + return 0; + + m_pMenuUI = CreateMenuUI(); + if (!m_pMenuUI) + return -1; + + INT nCommandId = m_pMenuUI->ShowModalPopup(pWindow, prcExclude, TRUE); + + if (m_pMenuUI) + { + delete m_pMenuUI; + m_pMenuUI = NULL; + } + + return nCommandId; +} + +/*********************************************************************** + * CUTBLBarMenuItem + */ + +/// @unimplemented +BOOL CUTBLBarMenuItem::InsertToUI(CUTBMenuWnd *pMenuUI) +{ + if ((m_dwFlags & 4) != 0) + { + pMenuUI->InsertSeparator(); + return TRUE; + } + if (m_dwFlags & 2) + { + //FIXME + } + else + { + //FIXME + } + return FALSE; +} + /*********************************************************************** * GetLibTls (MSUTB.@) *