2 #include <mof/widget/Menu.hpp>
3 #include <mof/widget/GridLayout.hpp>
4 #include <mof/widget/Container.hpp>
8 using mof::widget::Container;
9 using mof::widget::WidgetView;
10 using mof::widget::GridLayout;
11 using mof::widget::MenuItem;
20 std::vector< boost::function0<void> > actions;
21 std::shared_ptr<Container> pView;
25 : pView() , currentIndex(0)
32 const MenuItem& front ,
37 int length = &back - &front + 1;
38 std::vector< std::shared_ptr<mof::widget::WidgetView> > views;
39 for(int i = 0 ; i < length ; i++)
41 views.push_back( std::shared_ptr<WidgetView>( (&front + i)->view( ) ) );
42 m_pImpl->actions.push_back((&front + i)->action);
45 m_pImpl->pView = std::make_shared<Container>
47 views.front() , views.back() ,
48 makeFactoryMethod<GridLayout>(GridLayout::VERTICAL , 0)
51 m_pImpl->pView->getAt(m_pImpl->currentIndex)->focus();
57 const MenuItem& front ,
58 const MenuItem& back ,
59 const FactoryMethod<Layout>& layout
63 int length = &back - &front + 1;
64 std::vector< std::shared_ptr<mof::widget::WidgetView> > views;
65 for(int i = 0 ; i < length ; i++)
67 views.push_back( std::shared_ptr<WidgetView>( (&front + i)->view( ) ) );
68 m_pImpl->actions.push_back((&front + i)->action);
71 m_pImpl->pView = std::make_shared<Container>
73 views.front() , views.back() , layout
76 m_pImpl->pView->getAt(m_pImpl->currentIndex)->focus();
85 mof::FrameNumber Menu::show(bool imidiately)
87 return m_pImpl->pView->show(imidiately);
91 mof::FrameNumber Menu::hide(bool imidiately)
93 return m_pImpl->pView->hide(imidiately);
97 const std::shared_ptr<WidgetView> Menu::getView( ) const
99 return m_pImpl->pView;
103 std::shared_ptr<WidgetView> Menu::getView( )
105 return m_pImpl->pView;
111 m_pImpl->pView->update();
115 FrameNumber Menu::up()
117 int index = m_pImpl->pView->getAdjacencyAsUp(m_pImpl->currentIndex);
118 if(index == m_pImpl->currentIndex)return 0;
119 FrameNumber period_blured = m_pImpl->pView->getAt(m_pImpl->currentIndex)->blur();
120 m_pImpl->currentIndex = index;
121 FrameNumber period_focused = m_pImpl->pView->getAt(m_pImpl->currentIndex)->focus();
122 return max(period_blured, period_focused);
126 FrameNumber Menu::down()
128 int index = m_pImpl->pView->getAdjacencyAsDown(m_pImpl->currentIndex);
129 if(index == m_pImpl->currentIndex)return 0;
130 FrameNumber period_blured = m_pImpl->pView->getAt(m_pImpl->currentIndex)->blur();
131 m_pImpl->currentIndex = index;
132 FrameNumber period_focused = m_pImpl->pView->getAt(m_pImpl->currentIndex)->focus();
133 return max(period_blured, period_focused);
137 FrameNumber Menu::left()
139 int index = m_pImpl->pView->getAdjacencyAsLeft(m_pImpl->currentIndex);
140 if(index == m_pImpl->currentIndex)return 0;
141 FrameNumber period_blured = m_pImpl->pView->getAt(m_pImpl->currentIndex)->blur();
142 m_pImpl->currentIndex = index;
143 FrameNumber period_focused = m_pImpl->pView->getAt(m_pImpl->currentIndex)->focus();
144 return max(period_blured, period_focused);
148 FrameNumber Menu::right()
150 int index = m_pImpl->pView->getAdjacencyAsRight(m_pImpl->currentIndex);
151 if(index == m_pImpl->currentIndex)return 0;
152 FrameNumber period_blured = m_pImpl->pView->getAt(m_pImpl->currentIndex)->blur();
153 m_pImpl->currentIndex = index;
154 FrameNumber period_focused = m_pImpl->pView->getAt(m_pImpl->currentIndex)->focus();
155 return max(period_blured, period_focused);
159 FrameNumber Menu::performAction() const
161 m_pImpl->actions[m_pImpl->currentIndex]();
162 return m_pImpl->pView->getAt(m_pImpl->currentIndex)->click();
165 //{{{ getSelectedIndex
166 int Menu::getSelectedIndex() const
168 return m_pImpl->currentIndex;