OSDN Git Service

fix cmake/Macros.cmake
[moflib/moflib.git] / moflib-1.0 / moflib / moflib / mof / widget / Message.cpp
1 #include <memory>
2 #include <algorithm>
3 #include <mof/widget/NullView.hpp>
4 #include <mof/widget/Message.hpp>
5 #include <mof/widget/AbstractTextCompiler.hpp>
6 #include <mof/widget/Page.hpp>
7 #include <mof/widget/Pager.hpp>
8 #include <mof/widget/WidgetView.hpp>
9 #include <mof/ConsoleIO.hpp>
10 //#include <queue>
11
12 namespace mof
13 {
14 namespace widget
15 {
16 //{{{ MessageView
17         class MessageView : public WidgetView
18         {
19                 std::shared_ptr<mof::widget::WidgetView> view_;
20                 std::shared_ptr<mof::widget::WidgetView> old_view_;
21                 mof::Vector2D region_;
22                 //const mof::Vector2D& region_; なんでconstやったん?
23                 bool visible_;
24         public:
25
26                 MessageView(const mof::Vector2D& region)
27                         : region_(region), visible_(true)
28                 {
29                         view_ = std::make_shared<mof::widget::NullView>();
30                         view_->getPositionStream() << getPositionStream();
31                         view_->getSizeStream() << getSizeStream();//TODO regionを入れる?
32                         view_->getColorStream() << getColorStream();
33                 }
34
35                 ~MessageView()
36                 {
37
38                 }
39
40                 FrameNumber show(bool imidiately)
41                 {
42                         
43                         return view_->show(imidiately);
44                 }
45                 
46                 FrameNumber hide(bool imidiately)
47                 {
48                         return view_->hide(imidiately);
49                 }
50
51                 FrameNumber focus(bool imidiately)
52                 {
53                         return show(imidiately);
54                 }
55                 
56                 FrameNumber blur(bool imidiately)
57                 {
58                         return hide(imidiately);
59                 }
60                 
61                 FrameNumber click(bool)
62                 {
63                         return 0;
64                 }
65                 
66                 void update()
67                 {
68                         getPositionStream().update();
69                         getSizeStream().update();
70                         getColorStream().update();
71                         if (old_view_.get()) old_view_->update();
72                         view_->update();
73                 }
74                 
75                 void draw() const
76                 {
77                         if (old_view_.get()) old_view_->draw();
78                         view_->draw();
79                 }
80
81                 void setVisible(bool visible)
82                 {
83                         visible_ = visible;
84                         if (old_view_.get()) old_view_->setVisible(visible);
85                         if (view_.get()) view_->setVisible(visible);
86                 }
87
88                 mof::Vector2D getPreferredSize() const
89                 {
90                         return region_;
91                 }
92
93                 FrameNumber swap(std::shared_ptr<mof::widget::WidgetView> view)
94                 {
95                         old_view_ = view_;
96                         view_ = view;
97                         view_->setVisible(visible_);
98                         FrameNumber period = view_->show();
99                         period = max(period, old_view_->hide());
100
101                         view_->getPositionStream() << getPositionStream();
102                         view_->getSizeStream() << view_->getSizeStream().value() << getSizeStream();
103                         view_->getColorStream() << getColorStream();
104                         return period;
105                 }
106
107         
108         };
109 //}}}
110 //{{{ Impl
111     struct Message::Impl
112     {
113         std::shared_ptr<AbstractTextCompiler> pCompiler;
114         std::shared_ptr<Pager> pPager;
115                 std::shared_ptr<MessageView> view_;
116       
117         Impl(const mof::Vector2D& region, const std::shared_ptr<AbstractTextCompiler>& pCompiler)
118         : pCompiler(pCompiler), pPager(new Pager), view_(new MessageView(region))
119         {
120         }
121     };
122 //}}}
123 //{{{ constructor
124     Message::Message(const mof::Vector2D& region, const std::shared_ptr<AbstractTextCompiler>& pCompiler)
125     : pImpl_(new Impl(region, pCompiler))
126     {
127     }
128 //}}}
129 //{{{ destructor
130     Message::~Message()
131     {
132     }
133 //}}}
134 //{{{ show
135     mof::FrameNumber Message::show(bool imidiately)
136     {
137         //return pImpl_->pPager->show();
138         return 0;
139     }
140 //}}}
141 //{{{ hide
142     mof::FrameNumber Message::hide(bool imidiately)
143     {
144         //return pImpl_->pPager->hide();
145         return 0;
146     }
147 //}}}
148 //{{{ getView
149     const std::shared_ptr<mof::widget::WidgetView> Message::getView() const
150     {
151                 return pImpl_->view_;
152     }
153 //}}}
154 //{{{ getView
155     std::shared_ptr<mof::widget::WidgetView> Message::getView() 
156     {
157                 return pImpl_->view_;
158     }
159 //}}}
160 //{{{ update 
161     void Message::update() 
162     {
163                 return pImpl_->view_->update();
164     }
165 //}}}
166 //{{{  addPage
167     void Message::addPage(const tstring& page) 
168     {
169         pImpl_->pPager->addPage( *pImpl_->pCompiler->compile(page) );
170     }
171 //}}}
172 //{{{ nextPage
173     FrameNumber Message::nextPage() 
174     {
175         pImpl_->pPager->next();
176                 return pImpl_->view_->swap(pImpl_->pPager->getPage().view());
177     }
178 //}}}
179
180 }// namespace widget
181 }// mof