00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
#ifndef UMENUMANAGER_HPP
00029
#define UMENUMANAGER_HPP
00030
00031
#include "uobject.hpp"
00032
00033
#include <vector>
00034
00035
namespace ufo {
00036
00037
class UMenuItem;
00038
class UMenu;
00039
class UEvent;
00040
00041
class UKeyEvent;
00042
class UMouseEvent;
00043
00049 class UFO_EXPORT UMenuManager :
public UObject {
00050 UFO_DECLARE_DYNAMIC_CLASS(UMenuManager)
00051
public:
00052 UMenuManager();
00053
00054
virtual void highlightItem(
UMenuItem * item);
00055
virtual void activateItem(
UMenuItem * item);
00056
00057
virtual void clearPath();
00058
00059
virtual void processKeyEvent(
UKeyEvent * e);
00060
virtual void processMouseEvent(
UMouseEvent * e);
00061
00062
public:
00063
static void setMenuManager(UMenuManager * manager);
00064
static UMenuManager * getMenuManager();
00065
00066
protected:
00070 std::vector<UMenu*>::iterator getIteratorOfSameHierarchy(
UMenuItem * item);
00072
void clearPathFrom(
const std::vector<UMenu*>::iterator & iter);
00074
void closeMenuPopups(
UEvent * e);
00075
00076
void openMenu(
UMenu * menu);
00077
00078
void recalcPathWithLeaf(
UMenuItem * item);
00079
00080
void highlightNextSibling(
UMenuItem * item);
00081
void highlightPreviousSibling(
UMenuItem * item);
00082
void highlightNextTopLevel(
UMenuItem * item);
00083
void highlightPreviousTopLevel(
UMenuItem * item);
00084
00085
private:
00086 std::vector<UMenu*> m_menuPath;
00087
UMenuItem * m_currentItem;
00088
00089
private:
00090
static UMenuManager * sm_menuManager;
00091 };
00092
00093
00094
00095
00096
00097
inline UMenuManager *
00098 UMenuManager::getMenuManager() {
00099
return sm_menuManager;
00100 }
00101
00102 }
00103
00104
#endif // UMENUMANAGER_HPP