tagging release
[dasher.git] / Src / Win32 / Widgets / Menu.cpp
blob8e959b95f78daa818053cb39187120827eb773a7
1 // Menu.cpp
2 //
3 /////////////////////////////////////////////////////////////////////////////
4 //
5 // Copyright (c) 2002 Iain Murray, Inference Group, Cavendish, Cambridge.
6 //
7 /////////////////////////////////////////////////////////////////////////////
9 #include "WinCommon.h"
11 #include "Menu.h"
12 #include "../resource.h"
14 // Track memory leaks on Windows to the line that new'd the memory
15 #ifdef _WIN32
16 #ifdef _DEBUG
17 #define DEBUG_NEW new( _NORMAL_BLOCK, THIS_FILE, __LINE__ )
18 #define new DEBUG_NEW
19 #undef THIS_FILE
20 static char THIS_FILE[] = __FILE__;
21 #endif
22 #endif
24 void CMenu::SetStatus(UINT Command, bool Grayed, bool Checked) {
25 MenuOptions Options;
26 Options.Grayed = Grayed;
27 Options.Checked = Checked;
28 m_Items[Command] = Options;
31 bool CMenu::GetCheck(UINT Command) {
32 return m_Items[Command].Checked;
35 void CMenu::SortOut(HMENU Menu) {
36 // Clipboard special case (not a saved option - depends on
37 // current state of Windows's clipboard)
38 if(IsClipboardFormatAvailable(CF_TEXT))
39 SetStatus(ID_EDIT_PASTE, false, false);
40 else
41 SetStatus(ID_EDIT_PASTE, true, false);
43 int NumberItems = GetMenuItemCount(Menu);
45 for(int i = 0; i < NumberItems; i++) {
46 UINT MenuItem = GetMenuItemID(Menu, i);
48 // If we don't know, do nothing
49 if(m_Items.find(MenuItem) == m_Items.end())
50 continue;
52 if(m_Items[MenuItem].Checked)
53 CheckMenuItem(Menu, MenuItem, MF_CHECKED);
54 else
55 CheckMenuItem(Menu, MenuItem, MF_UNCHECKED);
57 if(m_Items[MenuItem].Grayed)
58 EnableMenuItem(Menu, MenuItem, MF_GRAYED);
59 else
60 EnableMenuItem(Menu, MenuItem, MF_ENABLED);