namespace ui_viewmanager {
-template<typename T, typename T2>
+template<typename T>
class ui_iface_viewmgr;
/**
* @warning When the transitions are finished, the view must to call ui_iface_viewmgr :: _push_finished(), ui_iface_viewmgr :: _pop_finished() in order that
* The ui_iface_viewmgr keeps the view states exactly.
*/
-template<typename T, typename T2>
+template<typename T>
class ui_iface_view : public ui_iface_rotatable
{
- friend class ui_iface_viewmgr<T, T2>;
+ friend class ui_iface_viewmgr<T>;
private:
T content; ///< A content instance for a screen as a view.
string name; ///< View name.
string transition_style; ///< View transition style name.
- ui_iface_viewmgr<T, T2> *viewmgr; ///< Viewmgr which this view belongs to.
+ ui_iface_viewmgr<T> *viewmgr; ///< Viewmgr which this view belongs to.
ui_view_state state; ///< View state.
ui_view_indicator indicator; ///< View indicator mode.
bool event_block; ///< State of event block.
/** @brief Return a viewmgr which this view is belonging to.
*/
//FIXME: Is it necessary?
- ui_iface_viewmgr<T, T2> *get_viewmgr();
+ ui_iface_viewmgr<T> *get_viewmgr();
/** @brief This is for replacing or setting a content of the view.
*
};
-template<typename T, typename T2>
-bool ui_iface_view<T, T2>::get_event_block()
+template<typename T>
+bool ui_iface_view<T>::get_event_block()
{
return this->event_block;
}
-template<typename T, typename T2>
-ui_iface_viewmgr<T, T2> *ui_iface_view<T, T2>::get_viewmgr()
+template<typename T>
+ui_iface_viewmgr<T> *ui_iface_view<T>::get_viewmgr()
{
return this->viewmgr;
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::set_event_block(bool block)
+template<typename T>
+void ui_iface_view<T>::set_event_block(bool block)
{
this->event_block = block;
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::on_load()
+template<typename T>
+void ui_iface_view<T>::on_load()
{
this->state = UI_VIEW_STATE_LOAD;
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::on_unload()
+template<typename T>
+void ui_iface_view<T>::on_unload()
{
this->state = UI_VIEW_STATE_UNLOAD;
if (this->get_removable_content())
}
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::on_activate()
+template<typename T>
+void ui_iface_view<T>::on_activate()
{
this->state = UI_VIEW_STATE_ACTIVATE;
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::on_deactivate()
+template<typename T>
+void ui_iface_view<T>::on_deactivate()
{
this->state = UI_VIEW_STATE_DEACTIVATE;
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::on_pause()
+template<typename T>
+void ui_iface_view<T>::on_pause()
{
this->state = UI_VIEW_STATE_PAUSE;
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::on_resume()
+template<typename T>
+void ui_iface_view<T>::on_resume()
{
this->state = UI_VIEW_STATE_ACTIVATE;
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::on_destroy()
+template<typename T>
+void ui_iface_view<T>::on_destroy()
{
}
-template<typename T, typename T2>
-ui_iface_view<T, T2>::ui_iface_view(const char *name)
+template<typename T>
+ui_iface_view<T>::ui_iface_view(const char *name)
: content(NULL), name(string(name ? name : "")), transition_style(string("default")), viewmgr(NULL), state(UI_VIEW_STATE_LOAD),
indicator(UI_VIEW_INDICATOR_DEFAULT), event_block(false), removable_content(true)
{
this->state = UI_VIEW_STATE_UNLOAD;
}
-template<typename T, typename T2>
-ui_iface_view<T, T2>::~ui_iface_view()
+template<typename T>
+ui_iface_view<T>::~ui_iface_view()
{
this->viewmgr->remove_view(this);
}
-template<typename T, typename T2>
-bool ui_iface_view<T, T2>::set_content(T content)
+template<typename T>
+bool ui_iface_view<T>::set_content(T content)
{
this->content = content;
return true;
}
-template<typename T, typename T2>
-T ui_iface_view<T, T2>::unset_content()
+template<typename T>
+T ui_iface_view<T>::unset_content()
{
T prev = this->content;
this->content = NULL;
return prev;
}
-template<typename T, typename T2>
-bool ui_iface_view<T, T2>::set_transition_style(const char *style)
+template<typename T>
+bool ui_iface_view<T>::set_transition_style(const char *style)
{
this->transition_style.assign(style);
return true;
}
-template<typename T, typename T2>
-bool ui_iface_view<T, T2>::set_name(const char *name)
+template<typename T>
+bool ui_iface_view<T>::set_name(const char *name)
{
this->name.assign(name);
return true;
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::set_removable_content(bool removable)
+template<typename T>
+void ui_iface_view<T>::set_removable_content(bool removable)
{
this->removable_content = removable;
//FIXME: If this api is called on unload state? should we remove content right now?
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::set_indicator(ui_view_indicator indicator)
+template<typename T>
+void ui_iface_view<T>::set_indicator(ui_view_indicator indicator)
{
this->indicator = indicator;
}
-template<typename T, typename T2>
-const char *ui_iface_view<T, T2>::get_transition_style()
+template<typename T>
+const char *ui_iface_view<T>::get_transition_style()
{
return this->transition_style.c_str();
}
-template<typename T, typename T2>
-const char *ui_iface_view<T, T2>::get_name()
+template<typename T>
+const char *ui_iface_view<T>::get_name()
{
return this->name.c_str();
}
-template<typename T, typename T2>
-T ui_iface_view<T, T2>::get_content()
+template<typename T>
+T ui_iface_view<T>::get_content()
{
return this->content;
}
-template<typename T, typename T2>
-ui_view_state ui_iface_view<T, T2>::get_state()
+template<typename T>
+ui_view_state ui_iface_view<T>::get_state()
{
return this->state;
}
-template<typename T, typename T2>
-bool ui_iface_view<T, T2>::get_removable_content()
+template<typename T>
+bool ui_iface_view<T>::get_removable_content()
{
return this->removable_content;
}
-template<typename T, typename T2>
-ui_view_indicator ui_iface_view<T, T2>::get_indicator()
+template<typename T>
+ui_view_indicator ui_iface_view<T>::get_indicator()
{
return this->indicator;
}
-template<typename T, typename T2>
-void ui_iface_view<T, T2>::on_back()
+template<typename T>
+void ui_iface_view<T>::on_back()
{
- ui_iface_viewmgr<T, T2> *viewmgr = this->get_viewmgr();
+ ui_iface_viewmgr<T> *viewmgr = this->get_viewmgr();
if (!viewmgr)
{
LOGE("Failed to get a viewmgr, view =%p", this);
namespace ui_viewmanager {
-template<typename T, typename T2>
+template<typename T>
class ui_iface_view;
/**
*
* @warning viewmgr will remove all containing views when it's destroyed.
*/
-template<typename T, typename T2>
-class ui_iface_viewmgr: public singleton<T2>
+template<typename T>
+class ui_iface_viewmgr
{
- friend class ui_iface_view<T, T2>;
+ friend class ui_iface_view<T>;
private:
- static bool soft_key; //If system doesn't support HW back key, then this value is @c true.
- static bool event_block; //Event block on view transition. This value should be configurable by system.
- list<ui_iface_view<T, T2> *> view_list; //View list.
- bool activated; //Activated status of this viewmgr.
+ static ui_iface_viewmgr<T> *inst;
+ static bool soft_key; //If system doesn't support HW back key, then this value is @c true.
+ static bool event_block; //Event block on view transition. This value should be configurable by system.
+ list<ui_iface_view<T> *> view_list; //View list.
+ bool activated; //Activated status of this viewmgr.
/**
* @brief Connect a given view to this viewmgr.
* @warning If the given view is already connected to a viewmgr, this call will be failed.
* @see disconnect_view()
*/
- bool connect_view(ui_iface_view<T, T2> *view);
+ bool connect_view(ui_iface_view<T> *view);
/**
* @brief Disconnect a given view from this viewmgr.
*
* @see connect_view()
*/
- bool disconnect_view(ui_iface_view<T, T2> *view);
+ bool disconnect_view(ui_iface_view<T> *view);
/**
* @brief Toggle event blocking to the given view.
* @param view A view to toggle event blocking.
* @param block @c true is blocking event, otherwise @c false.
*/
- void set_event_block(ui_iface_view<T, T2> *view, bool block);
+ void set_event_block(ui_iface_view<T> *view, bool block);
protected:
/**
*
* @warning This function must be called when push transition is finished.
*/
- bool push_view_finished(ui_iface_view<T, T2> *view);
+ bool push_view_finished(ui_iface_view<T> *view);
/**
* @brief This function is designed for finishing process for pop transition.
*
* @warning This function must be called when push transition is finished.
*/
- bool pop_view_finished(ui_iface_view<T, T2> *view);
-
-//FIXME: Necessary?
-#if 0
- /**
- * @brief Return a list of views which this viewmgr has.
- *
- * @return a pointer of list of views.
- *
- * @warning Don't modify this view list.
- */
- const list<ui_iface_view<T, T2>*>* const get_view_list()
- {
- return &this->view_list;
- }
-#endif
+ bool pop_view_finished(ui_iface_view<T> *view);
/**
* @brief Push a new view into this viewmgr. This function is used for when application switches a current view to a new one.
* @see insert_view_after()
* @see pop_view()
*/
- ui_iface_view<T, T2> *push_view(ui_iface_view<T, T2> *view);
+ ui_iface_view<T> *push_view(ui_iface_view<T> *view);
/**
* @brief Pop the top(last) view from this viewmgr view list.
*
* @return @c true on success or @c false otherwise.
*/
- bool insert_view_before(ui_iface_view<T, T2> *view, ui_iface_view<T, T2> *before);
+ bool insert_view_before(ui_iface_view<T> *view, ui_iface_view<T> *before);
/**
* @brief Insert a view in this viewmgr view list. Specifically, insert a given @p view right after of the given view, @after.
*
* @return @c true on success or @c false otherwise.
*/
- bool insert_view_after(ui_iface_view<T, T2> *view, ui_iface_view<T, T2> *after);
+ bool insert_view_after(ui_iface_view<T> *view, ui_iface_view<T> *after);
/**
* @brief Remove the given view from this viewmgr view list.
* @see insert_view_after()
* @see push_view()
*/
- bool remove_view(ui_iface_view<T, T2> *view);
+ bool remove_view(ui_iface_view<T> *view);
/**
* @brief Return a view which is matched with the index @p idx.
* @see get_view_index()
* @see get_view_count()
*/
- ui_iface_view<T, T2>* get_view(unsigned int idx);
+ ui_iface_view<T>* get_view(unsigned int idx);
/**
* @brief Return a view which is matched with the @p name.
*
* @see ui_iface_view::set_name()
*/
- ui_iface_view<T, T2> *get_view(const char *name);
+ ui_iface_view<T> *get_view(const char *name);
/**
* @brief Return a last(top) view.
*
* @return The view which is last view of the viewmgr view list.
*/
- ui_iface_view<T, T2> *get_last_view();
+ ui_iface_view<T> *get_last_view();
/**
* @brief Return a view index(page) number of the given view.
*
* @warning The index number of views are variable since the view list is variable.
*/
- int get_view_index(const ui_iface_view<T, T2> *view);
+ int get_view_index(const ui_iface_view<T> *view);
///Constructor.
ui_iface_viewmgr();
* @return @c true if soft key is required, @c false otherwise.
*/
static bool need_soft_key();
+ static ui_iface_viewmgr<T>* get_instance();
};
-#define VIEW_ITR typename list<ui_iface_view<T, T2> *>::iterator
-#define VIEW_RITR typename list<ui_iface_view<T, T2> *>::reverse_iterator
+template<typename T> ui_iface_viewmgr<T> *ui_iface_viewmgr<T>::inst = NULL;
+
+#define VIEW_ITR typename list<ui_iface_view<T> *>::iterator
+#define VIEW_RITR typename list<ui_iface_view<T> *>::reverse_iterator
//FIXME: Read system profile to decide whether support software key or not.
-template<typename T, typename T2> bool ui_iface_viewmgr<T, T2>::soft_key = true;
+template<typename T> bool ui_iface_viewmgr<T>::soft_key = true;
//FIXME: Read system profile to decide whether support event block or not.
-template<typename T, typename T2> bool ui_iface_viewmgr<T, T2>::event_block = true;
+template<typename T> bool ui_iface_viewmgr<T>::event_block = true;
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::insert_view_after(ui_iface_view<T, T2> *view, ui_iface_view<T, T2> *after)
+template<typename T>
+bool ui_iface_viewmgr<T>::insert_view_after(ui_iface_view<T> *view, ui_iface_view<T> *after)
{
VIEW_ITR it;
return true;
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::need_soft_key()
+template<typename T>
+bool ui_iface_viewmgr<T>::need_soft_key()
{
- return ui_iface_viewmgr<T, T2>::soft_key;
+ return ui_iface_viewmgr<T>::soft_key;
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::connect_view(ui_iface_view<T, T2> *view)
+template<typename T>
+bool ui_iface_viewmgr<T>::connect_view(ui_iface_view<T> *view)
{
//FIXME: If user call a set_viewmgr() before, It should not return false.
/*
return true;
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::disconnect_view(ui_iface_view<T, T2> *view)
+template<typename T>
+bool ui_iface_viewmgr<T>::disconnect_view(ui_iface_view<T> *view)
{
if (!view->viewmgr) return false;
view->viewmgr = NULL;
return true;
}
-template<typename T, typename T2>
-void ui_iface_viewmgr<T, T2>::set_event_block(ui_iface_view<T, T2> *view, bool block)
+template<typename T>
+void ui_iface_viewmgr<T>::set_event_block(ui_iface_view<T> *view, bool block)
{
if (!ui_iface_viewmgr::event_block) return;
view->set_event_block(block);
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::push_view_finished(ui_iface_view<T, T2> *view)
+template<typename T>
+bool ui_iface_viewmgr<T>::push_view_finished(ui_iface_view<T> *view)
{
- ui_iface_view<T, T2> *last = this->view_list.back();
+ ui_iface_view<T> *last = this->view_list.back();
//The previous view has been pushed. This should be unload.
if (last != view)
return true;
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::pop_view_finished(ui_iface_view<T, T2> *view)
+template<typename T>
+bool ui_iface_viewmgr<T>::pop_view_finished(ui_iface_view<T> *view)
{
- ui_iface_view<T, T2> *last = this->view_list.back();
+ ui_iface_view<T> *last = this->view_list.back();
//This view has been popped. It should be destroyed.
if (last == view)
return true;
}
-template<typename T, typename T2>
-ui_iface_viewmgr<T, T2>::ui_iface_viewmgr(const ui_iface_viewmgr<T, T2>& viewmgr)
+template<typename T>
+ui_iface_viewmgr<T>::ui_iface_viewmgr(const ui_iface_viewmgr<T>& viewmgr)
{
-
}
-template<typename T, typename T2>
-ui_iface_viewmgr<T, T2>::ui_iface_viewmgr()
- : singleton<T2>(), activated(false)
+template<typename T>
+ui_iface_viewmgr<T>::ui_iface_viewmgr()
+ : activated(false)
{
+ ui_iface_viewmgr<T>::inst = this;
}
-template<typename T, typename T2>
-ui_iface_viewmgr<T, T2>::~ui_iface_viewmgr()
+template<typename T>
+ui_iface_viewmgr<T>::~ui_iface_viewmgr()
{
//Terminate views
for (VIEW_RITR it = this->view_list.rbegin(); it != this->view_list.rend(); it++)
{
- ui_iface_view<T, T2> *view = *it;
+ ui_iface_view<T> *view = *it;
view->on_deactivate();
view->on_unload();
view->on_destroy();
//FIXME: Window is destroyed. Terminate Application!
ui_app_exit();
+
+ ui_iface_viewmgr::inst = NULL;
}
-template<typename T, typename T2>
-ui_iface_view<T, T2> *ui_iface_viewmgr<T, T2>::push_view(ui_iface_view<T, T2> *view)
+template<typename T>
+ui_iface_view<T> *ui_iface_viewmgr<T>::push_view(ui_iface_view<T> *view)
{
if (!view)
{
return NULL;
}
- ui_iface_view<T, T2> *pview;
+ ui_iface_view<T> *pview;
//Previous view
if (this->view_list.size() > 0)
return view;
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::pop_view()
+template<typename T>
+bool ui_iface_viewmgr<T>::pop_view()
{
//FIXME: No more view?
if (this->get_view_count() == 0)
if (this->get_view_count() == 1)
{
//destroy viewmgr?
- ui_iface_view<T, T2>*view = this->view_list.back();
+ ui_iface_view<T>*view = this->view_list.back();
view->on_deactivate();
view->on_unload();
view->on_destroy();
}
//last page to be popped.
- ui_iface_view<T, T2>*view = this->view_list.back();
+ ui_iface_view<T>*view = this->view_list.back();
view->on_deactivate();
this->set_event_block(view, true);
//Make this getter method? or define instance?
//previous page is to be an active page.
auto nx = prev(this->view_list.end(), 2);
- ui_iface_view<T, T2>*pview = *nx;
+ ui_iface_view<T>*pview = *nx;
pview->on_load();
pview->on_deactivate();
this->set_event_block(pview, true);
return true;
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::insert_view_before(ui_iface_view<T, T2> *view, ui_iface_view<T, T2> *before)
+template<typename T>
+bool ui_iface_viewmgr<T>::insert_view_before(ui_iface_view<T> *view, ui_iface_view<T> *before)
{
VIEW_ITR it;
return true;
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::remove_view(ui_iface_view<T, T2> *view)
+template<typename T>
+bool ui_iface_viewmgr<T>::remove_view(ui_iface_view<T> *view)
{
this->view_list.remove(view);
this->disconnect_view(view);
return true;
}
-template<typename T, typename T2>
-ui_iface_view<T, T2> *ui_iface_viewmgr<T, T2>::get_view(unsigned int idx)
+template<typename T>
+ui_iface_view<T> *ui_iface_viewmgr<T>::get_view(unsigned int idx)
{
if (idx < 0 || idx >= this->view_list.size())
{
return *it;
}
-template<typename T, typename T2>
-int ui_iface_viewmgr<T, T2>::get_view_index(const ui_iface_view<T, T2> *view)
+template<typename T>
+int ui_iface_viewmgr<T>::get_view_index(const ui_iface_view<T> *view)
{
int idx = 0;
return -1;
}
-template<typename T, typename T2>
-ui_iface_view<T, T2> *ui_iface_viewmgr<T, T2>::get_last_view()
+template<typename T>
+ui_iface_view<T> *ui_iface_viewmgr<T>::get_last_view()
{
int cnt = this->get_view_count();
return this->get_view(cnt - 1);
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::activate()
+template<typename T>
+bool ui_iface_viewmgr<T>::activate()
{
if (this->activated) return false;
if (this->get_view_count() == 0) return false;
return true;
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::deactivate()
+template<typename T>
+bool ui_iface_viewmgr<T>::deactivate()
{
if (!this->activated) return false;
this->activated = false;
return true;
}
-template<typename T, typename T2>
-ui_iface_view<T, T2> *ui_iface_viewmgr<T, T2>::get_view(const char *name)
+template<typename T>
+ui_iface_view<T> *ui_iface_viewmgr<T>::get_view(const char *name)
{
//FIXME: ...
return NULL;
}
-template<typename T, typename T2>
-bool ui_iface_viewmgr<T, T2>::is_activated()
+template<typename T>
+bool ui_iface_viewmgr<T>::is_activated()
{
return this->activated;
}
-template<typename T, typename T2>
-unsigned int ui_iface_viewmgr<T, T2>::get_view_count()
+template<typename T>
+unsigned int ui_iface_viewmgr<T>::get_view_count()
{
return this->view_list.size();
}
+template<typename T>
+ui_iface_viewmgr<T>* ui_iface_viewmgr<T>::get_instance()
+{
+ return ui_iface_viewmgr::inst;
+}
+
}
#endif /* _UI_IFACE_VIEWMGR_H_ */