File: FilterPopupMenu.cpp

package info (click to toggle)
darkradiant 3.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 41,080 kB
  • sloc: cpp: 264,743; ansic: 10,659; python: 1,852; xml: 1,650; sh: 92; makefile: 21
file content (43 lines) | stat: -rw-r--r-- 1,008 bytes parent folder | download | duplicates (3)
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
#include "FilterPopupMenu.h"

#include "ui/ieventmanager.h"
#include <wx/menu.h>

#include "wxutil/menu/IconTextMenuItem.h"

namespace wxutil
{

namespace
{
	const char* const MENU_ICON = "iconFilter16.png";
}

FilterPopupMenu::FilterPopupMenu()
{
	// Visit the filters in the FilterSystem to populate the menu
	GlobalFilterSystem().forEachFilter(std::bind(&FilterPopupMenu::visitFilter, this, std::placeholders::_1));
}

FilterPopupMenu::~FilterPopupMenu()
{
	for (const auto& item : _filterItems)
	{
		GlobalEventManager().unregisterMenuItem(item.first, item.second);
	}
}

void FilterPopupMenu::visitFilter(const std::string& filterName)
{
	auto* item = Append(new wxutil::IconTextMenuItem(filterName, MENU_ICON));
	item->SetCheckable(true);

	std::string eventName = GlobalFilterSystem().getFilterEventName(filterName);

	GlobalEventManager().registerMenuItem(eventName, item);

    // We remember the item mapping for deregistration on shutdown
	_filterItems.emplace(eventName, item);
}

} // namespace