diff options
author | XhmikosR <xhmikosr@users.sourceforge.net> | 2010-09-16 14:24:14 +0400 |
---|---|---|
committer | XhmikosR <xhmikosr@users.sourceforge.net> | 2010-09-16 14:24:14 +0400 |
commit | 1cba01c08b61ee81033bfdfdc3cf6d65dd91d9f7 (patch) | |
tree | 545648e6867a7bb88a5fbced2e361613b38d57c7 /src/CmdUI/CmdUI.cpp | |
parent | 41735446a0e29866794583674dcd2973efead7f1 (diff) |
moved thirdparty UI code in the thirdparty/ui dir and CmdUI in the src dir
git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@2569 10f7b99b-c216-0410-bff0-8a66a9350fd8
Diffstat (limited to 'src/CmdUI/CmdUI.cpp')
-rw-r--r-- | src/CmdUI/CmdUI.cpp | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/src/CmdUI/CmdUI.cpp b/src/CmdUI/CmdUI.cpp new file mode 100644 index 000000000..6d720e8d5 --- /dev/null +++ b/src/CmdUI/CmdUI.cpp @@ -0,0 +1,211 @@ +/*
+ * Copyright (C) 2003-2006 Gabest
+ * http://www.gabest.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+// CmdUIDialog.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include <afxpriv.h>
+#include "CmdUI.h"
+
+// CCmdUIDialog dialog
+
+IMPLEMENT_DYNAMIC(CCmdUIDialog, CDialog)
+
+CCmdUIDialog::CCmdUIDialog()
+{
+}
+
+CCmdUIDialog::CCmdUIDialog(UINT nIDTemplate, CWnd* pParent /*=NULL*/)
+ : CDialog(nIDTemplate, pParent)
+{
+}
+
+CCmdUIDialog::CCmdUIDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
+ : CDialog(lpszTemplateName, pParentWnd)
+{
+}
+
+CCmdUIDialog::~CCmdUIDialog()
+{
+}
+
+LRESULT CCmdUIDialog::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
+{
+ LRESULT ret = __super::DefWindowProc(message, wParam, lParam);
+
+ if(message == WM_INITDIALOG)
+ {
+ SendMessage(WM_KICKIDLE);
+ }
+
+ return(ret);
+}
+
+BEGIN_MESSAGE_MAP(CCmdUIDialog, CDialog)
+ ON_MESSAGE_VOID(WM_KICKIDLE, OnKickIdle)
+ ON_WM_INITMENUPOPUP()
+END_MESSAGE_MAP()
+
+
+// CCmdUIDialog message handlers
+
+void CCmdUIDialog::OnKickIdle()
+{
+ UpdateDialogControls(this, false);
+
+ // TODO: maybe we should send this call to modeless child cdialogs too
+}
+
+// Q242577
+
+void CCmdUIDialog::OnInitMenuPopup(CMenu *pPopupMenu, UINT /*nIndex*/, BOOL /*bSysMenu*/)
+{
+ ASSERT(pPopupMenu != NULL);
+ // Check the enabled state of various menu items.
+
+ CCmdUI state;
+ state.m_pMenu = pPopupMenu;
+ ASSERT(state.m_pOther == NULL);
+ ASSERT(state.m_pParentMenu == NULL);
+
+ // Determine if menu is popup in top-level menu and set m_pOther to
+ // it if so (m_pParentMenu == NULL indicates that it is secondary popup).
+ HMENU hParentMenu;
+ if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu)
+ state.m_pParentMenu = pPopupMenu; // Parent == child for tracking popup.
+ else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL)
+ {
+ CWnd* pParent = this;
+ // Child windows don't have menus--need to go to the top!
+ if (pParent != NULL &&
+ (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL)
+ {
+ int nIndexMax = ::GetMenuItemCount(hParentMenu);
+ for (int nIndex = 0; nIndex < nIndexMax; nIndex++)
+ {
+ if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu)
+ {
+ // When popup is found, m_pParentMenu is containing menu.
+ state.m_pParentMenu = CMenu::FromHandle(hParentMenu);
+ break;
+ }
+ }
+ }
+ }
+
+ state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
+ for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
+ state.m_nIndex++)
+ {
+ state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
+ if (state.m_nID == 0)
+ continue; // Menu separator or invalid cmd - ignore it.
+
+ ASSERT(state.m_pOther == NULL);
+ ASSERT(state.m_pMenu != NULL);
+ if (state.m_nID == (UINT)-1)
+ {
+ // Possibly a popup menu, route to first item of that popup.
+ state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
+ if (state.m_pSubMenu == NULL ||
+ (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
+ state.m_nID == (UINT)-1)
+ {
+ continue; // First item of popup can't be routed to.
+ }
+ state.DoUpdate(this, TRUE); // Popups are never auto disabled.
+ }
+ else
+ {
+ // Normal menu item.
+ // Auto enable/disable if frame window has m_bAutoMenuEnable
+ // set and command is _not_ a system command.
+ state.m_pSubMenu = NULL;
+ state.DoUpdate(this, FALSE);
+ }
+
+ // Adjust for menu deletions and additions.
+ UINT nCount = pPopupMenu->GetMenuItemCount();
+ if (nCount < state.m_nIndexMax)
+ {
+ state.m_nIndex -= (state.m_nIndexMax - nCount);
+ while (state.m_nIndex < nCount &&
+ pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID)
+ {
+ state.m_nIndex++;
+ }
+ }
+ state.m_nIndexMax = nCount;
+ }
+}
+
+// CCmdUIPropertyPage
+
+IMPLEMENT_DYNAMIC(CCmdUIPropertyPage, CPropertyPage)
+CCmdUIPropertyPage::CCmdUIPropertyPage(UINT nIDTemplate, UINT nIDCaption)
+ : CPropertyPage(nIDTemplate, nIDCaption)
+{
+}
+
+CCmdUIPropertyPage::~CCmdUIPropertyPage()
+{
+}
+
+LRESULT CCmdUIPropertyPage::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
+{
+ if(message == WM_COMMAND)
+ {
+ switch(HIWORD(wParam))
+ {
+ case BN_CLICKED:
+ case CBN_SELCHANGE:
+ case EN_CHANGE:
+ SetModified();
+ default:
+ ;
+ }
+ }
+
+ LRESULT ret = __super::DefWindowProc(message, wParam, lParam);
+
+ if(message == WM_INITDIALOG)
+ {
+ SendMessage(WM_KICKIDLE);
+ }
+
+ return(ret);
+}
+
+BEGIN_MESSAGE_MAP(CCmdUIPropertyPage, CPropertyPage)
+ ON_MESSAGE_VOID(WM_KICKIDLE, OnKickIdle)
+END_MESSAGE_MAP()
+
+
+// CCmdUIPropertyPage message handlers
+
+void CCmdUIPropertyPage::OnKickIdle()
+{
+ UpdateDialogControls(this, false);
+
+ // TODO: maybe we should send this call to modeless child cPropertyPages too
+}
+
|