1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
#include "platform_menu.h"
#include <cassert>
#include "leak_dumper.h"
namespace Shared{ namespace Platform{
int MenuBase::nextId= 1000;
// =====================================================
// class MenuBase
// =====================================================
void MenuBase::init(const string &text){
this->text= text;
id= nextId++;
}
// =====================================================
// class Menu
// =====================================================
void Menu::create(Menu *parent){
handle= CreatePopupMenu();
for(int i= 0; i<children.size(); ++i){
children[i]->create(this);
}
if(parent!=NULL){
BOOL result = AppendMenu(parent->getHandle(), MF_POPUP | MF_STRING, reinterpret_cast<UINT_PTR>(handle), text.c_str());
assert(result);
}
}
void Menu::destroy(){
for(int i= 0; i<children.size(); ++i){
children[i]->destroy();
}
children.clear();
BOOL result = DestroyMenu(handle);
assert(result);
}
// =====================================================
// class MenuItem
// =====================================================
void MenuItem::create(Menu *parent){
isChecked= false;
this->parent = parent;
assert(parent!=NULL);
BOOL result = AppendMenu(parent->getHandle(), MF_STRING, static_cast<UINT>(id), text.c_str());
assert(result);
}
void MenuItem::setChecked(bool checked){
isChecked= checked;
CheckMenuItem(parent->getHandle(), id, checked? MF_CHECKED: MF_UNCHECKED);
}
// =====================================================
// class MenuSeparator
// =====================================================
void MenuSeparator::create(Menu *parent){
assert(parent!=NULL);
BOOL result = AppendMenu(parent->getHandle(), MF_SEPARATOR, static_cast<UINT>(id), NULL);
assert(result);
}
}}//end namespace
|