OSDN Git Service

4039600f6ec9176da1b20cc30fec458bf085fffe
[moflib/moflib.git] / moflib-1.0 / moflib / moflib / mof / widget / Menu.hpp
1 #pragma once
2 #include <mof/widget/Widget.hpp>
3 #include <boost/function/function0.hpp>
4 #include <mof/FactoryMethod.hpp>
5 #include <mof/widget/Layout.hpp>
6 #include <memory>
7
8 namespace mof
9 {
10 namespace widget
11 {
12
13     inline void emptyFunc(){}
14
15     struct MenuItem
16     {
17         mof::FactoryMethod<WidgetView> view;
18         boost::function0<void> action;
19         
20         MenuItem
21         (
22             const mof::FactoryMethod<WidgetView>& view_ ,
23             const boost::function0<void>& action_
24         )
25         : view(view_) , action(action_)
26         {
27         }
28         
29         MenuItem
30         (
31             const mof::FactoryMethod<WidgetView>& view_ 
32         )
33         : view(view_) , action(emptyFunc)
34         {
35         }
36
37     };
38
39         class Menu  : public Widget
40     {
41         public:
42                 Menu(const MenuItem& front , const MenuItem& back );
43                 Menu
44         (
45             const MenuItem& front ,
46             const MenuItem& back ,
47             const FactoryMethod<Layout>& layout
48         );
49
50                 virtual ~Menu();
51                 virtual FrameNumber show(bool imidiately = false);
52                 virtual FrameNumber hide(bool imidiately = false);
53         virtual const std::shared_ptr<WidgetView> getView( ) const;
54         virtual std::shared_ptr<WidgetView> getView( );
55                 virtual void update();
56         
57         virtual FrameNumber up();
58                 virtual FrameNumber down();
59                 virtual FrameNumber left();
60                 virtual FrameNumber right();
61                 virtual FrameNumber performAction() const;
62                 int getSelectedIndex() const;
63     protected:
64         struct Impl;
65                 std::unique_ptr<Impl> m_pImpl;
66         };
67
68 }
69 } // namespace mof