#ifndef _ELM_APP_CLIENT_EO_H_
#define _ELM_APP_CLIENT_EO_H_

/**

 */
#define ELM_APP_CLIENT_CLASS elm_app_client_class_get()

const Eo_Class *elm_app_client_class_get(void) EINA_CONST;

/**
 * @def elm_app_client_constructor
 *
 * No description supplied.
 *
 * @param[in] package Package of application
 *
 */
EAPI void  elm_app_client_constructor(const char *package);

/**
 * @def elm_app_client_views_get
 *
 * Return a iterator with all views of application.
 *
 *
 */
EAPI Eina_Iterator * elm_app_client_views_get(void);

/**
 * @def elm_app_client_package_get
 *
 * Return the application package.
 *
 *
 */
EAPI const char * elm_app_client_package_get(void);

/**
 * @def elm_app_client_view_all_close
 *
 * Close all views of application.
 *
 *
 */
EAPI void  elm_app_client_view_all_close(void);

/**
 * @def elm_app_client_terminate
 *
 * Terminate application.
 *
 *
 */
EAPI void  elm_app_client_terminate(void);

/**
 * @def elm_app_client_view_open
 *
 * Open a application view.
 *
 * @param[in] args an array of
 * @param[in] view_open_cb callback to be called when view open
 * @param[in] data calback user data
 *
 */
EAPI Elm_App_Client_Pending * elm_app_client_view_open(Eina_Value *args, Elm_App_Client_Open_View_Cb view_open_cb, const void *data);

/**
 * @def elm_app_client_view_open_cancel
 *
 * Cancel a pending elm_app_client_view_open().
 *
 * @param[in] pending the view open handler
 *
 */
EAPI void  elm_app_client_view_open_cancel(Elm_App_Client_Pending *pending);

EAPI extern const Eo_Event_Description _ELM_APP_CLIENT_EVENT_VIEW_CREATED;
EAPI extern const Eo_Event_Description _ELM_APP_CLIENT_EVENT_VIEW_DELETED;
EAPI extern const Eo_Event_Description _ELM_APP_CLIENT_EVENT_VIEW_LIST_LOADED;
EAPI extern const Eo_Event_Description _ELM_APP_CLIENT_EVENT_APPLICATION_TERMINATED;

/**
 * Called when a view of this application is created.
 */
#define ELM_APP_CLIENT_EVENT_VIEW_CREATED (&(_ELM_APP_CLIENT_EVENT_VIEW_CREATED))

/**
 * Called when a view of this application is deleted.
 */
#define ELM_APP_CLIENT_EVENT_VIEW_DELETED (&(_ELM_APP_CLIENT_EVENT_VIEW_DELETED))

/**
 * Called when list of view is loaded.
 */
#define ELM_APP_CLIENT_EVENT_VIEW_LIST_LOADED (&(_ELM_APP_CLIENT_EVENT_VIEW_LIST_LOADED))

/**
 * Called when application is terminated.
 */
#define ELM_APP_CLIENT_EVENT_APPLICATION_TERMINATED (&(_ELM_APP_CLIENT_EVENT_APPLICATION_TERMINATED))

#endif