#pragma once /* * Copyright (C) 2005-2013 Team XBMC * http://xbmc.org * * This Program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This Program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with XBMC; see the file COPYING. If not, see * . * */ #include #include #include #include #include #include "libXBMC_addon.h" typedef void* GUIHANDLE; #ifdef _WIN32 #define GUI_HELPER_DLL "\\library.xbmc.gui\\libXBMC_gui" ADDON_HELPER_EXT #else #define GUI_HELPER_DLL_NAME "libXBMC_gui-" ADDON_HELPER_ARCH ADDON_HELPER_EXT #define GUI_HELPER_DLL "/library.xbmc.gui/" GUI_HELPER_DLL_NAME #endif /* current ADDONGUI API version */ #define XBMC_GUI_API_VERSION "5.8.0" /* min. ADDONGUI API version */ #define XBMC_GUI_MIN_API_VERSION "5.8.0" #define ADDON_ACTION_PREVIOUS_MENU 10 #define ADDON_ACTION_CLOSE_DIALOG 51 #define ADDON_ACTION_NAV_BACK 92 class CAddonGUIWindow; class CAddonGUISpinControl; class CAddonGUIRadioButton; class CAddonGUIProgressControl; class CAddonListItem; class CAddonGUIRenderingControl; class CAddonGUISliderControl; class CAddonGUISettingsSliderControl; class CHelper_libXBMC_gui { public: CHelper_libXBMC_gui() { m_libXBMC_gui = NULL; m_Handle = NULL; } ~CHelper_libXBMC_gui() { if (m_libXBMC_gui) { GUI_unregister_me(m_Handle, m_Callbacks); dlclose(m_libXBMC_gui); } } bool RegisterMe(void *Handle) { m_Handle = Handle; std::string libBasePath; libBasePath = ((cb_array*)m_Handle)->libPath; libBasePath += GUI_HELPER_DLL; #if defined(ANDROID) struct stat st; if(stat(libBasePath.c_str(),&st) != 0) { std::string tempbin = getenv("XBMC_ANDROID_LIBS"); libBasePath = tempbin + "/" + GUI_HELPER_DLL_NAME; } #endif m_libXBMC_gui = dlopen(libBasePath.c_str(), RTLD_LAZY); if (m_libXBMC_gui == NULL) { fprintf(stderr, "Unable to load %s\n", dlerror()); return false; } GUI_register_me = (void* (*)(void *HANDLE)) dlsym(m_libXBMC_gui, "GUI_register_me"); if (GUI_register_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_unregister_me = (void (*)(void *HANDLE, void *CB)) dlsym(m_libXBMC_gui, "GUI_unregister_me"); if (GUI_unregister_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_lock = (void (*)(void *HANDLE, void *CB)) dlsym(m_libXBMC_gui, "GUI_lock"); if (GUI_lock == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_unlock = (void (*)(void *HANDLE, void *CB)) dlsym(m_libXBMC_gui, "GUI_unlock"); if (GUI_unlock == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_get_screen_height = (int (*)(void *HANDLE, void *CB)) dlsym(m_libXBMC_gui, "GUI_get_screen_height"); if (GUI_get_screen_height == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_get_screen_width = (int (*)(void *HANDLE, void *CB)) dlsym(m_libXBMC_gui, "GUI_get_screen_width"); if (GUI_get_screen_width == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_get_video_resolution = (int (*)(void *HANDLE, void *CB)) dlsym(m_libXBMC_gui, "GUI_get_video_resolution"); if (GUI_get_video_resolution == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_Window_create = (CAddonGUIWindow* (*)(void *HANDLE, void *CB, const char *xmlFilename, const char *defaultSkin, bool forceFallback, bool asDialog)) dlsym(m_libXBMC_gui, "GUI_Window_create"); if (GUI_Window_create == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_Window_destroy = (void (*)(CAddonGUIWindow* p)) dlsym(m_libXBMC_gui, "GUI_Window_destroy"); if (GUI_Window_destroy == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_get_spin = (CAddonGUISpinControl* (*)(void *HANDLE, void *CB, CAddonGUIWindow *window, int controlId)) dlsym(m_libXBMC_gui, "GUI_control_get_spin"); if (GUI_control_get_spin == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_release_spin = (void (*)(CAddonGUISpinControl* p)) dlsym(m_libXBMC_gui, "GUI_control_release_spin"); if (GUI_control_release_spin == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_get_radiobutton = (CAddonGUIRadioButton* (*)(void *HANDLE, void *CB, CAddonGUIWindow *window, int controlId)) dlsym(m_libXBMC_gui, "GUI_control_get_radiobutton"); if (GUI_control_get_radiobutton == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_release_radiobutton = (void (*)(CAddonGUIRadioButton* p)) dlsym(m_libXBMC_gui, "GUI_control_release_radiobutton"); if (GUI_control_release_radiobutton == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_get_progress = (CAddonGUIProgressControl* (*)(void *HANDLE, void *CB, CAddonGUIWindow *window, int controlId)) dlsym(m_libXBMC_gui, "GUI_control_get_progress"); if (GUI_control_get_progress == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_release_progress = (void (*)(CAddonGUIProgressControl* p)) dlsym(m_libXBMC_gui, "GUI_control_release_progress"); if (GUI_control_release_progress == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_ListItem_create = (CAddonListItem* (*)(void *HANDLE, void *CB, const char *label, const char *label2, const char *iconImage, const char *thumbnailImage, const char *path)) dlsym(m_libXBMC_gui, "GUI_ListItem_create"); if (GUI_ListItem_create == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_ListItem_destroy = (void (*)(CAddonListItem* p)) dlsym(m_libXBMC_gui, "GUI_ListItem_destroy"); if (GUI_ListItem_destroy == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_get_rendering = (CAddonGUIRenderingControl* (*)(void *HANDLE, void *CB, CAddonGUIWindow *window, int controlId)) dlsym(m_libXBMC_gui, "GUI_control_get_rendering"); if (GUI_control_get_rendering == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_release_rendering = (void (*)(CAddonGUIRenderingControl* p)) dlsym(m_libXBMC_gui, "GUI_control_release_rendering"); if (GUI_control_release_rendering == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_get_slider = (CAddonGUISliderControl* (*)(void *HANDLE, void *CB, CAddonGUIWindow *window, int controlId)) dlsym(m_libXBMC_gui, "GUI_control_get_slider"); if (GUI_control_get_slider == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_release_slider = (void (*)(CAddonGUISliderControl* p)) dlsym(m_libXBMC_gui, "GUI_control_release_slider"); if (GUI_control_release_slider == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_get_settings_slider = (CAddonGUISettingsSliderControl* (*)(void *HANDLE, void *CB, CAddonGUIWindow *window, int controlId)) dlsym(m_libXBMC_gui, "GUI_control_get_settings_slider"); if (GUI_control_get_settings_slider == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_control_release_settings_slider = (void (*)(CAddonGUISettingsSliderControl* p)) dlsym(m_libXBMC_gui, "GUI_control_release_settings_slider"); if (GUI_control_release_settings_slider == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_keyboard_show_and_get_input_with_head = (bool (*)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, bool hiddenInput, unsigned int autoCloseMs)) dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_get_input_with_head"); if (GUI_dialog_keyboard_show_and_get_input_with_head == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_keyboard_show_and_get_input = (bool (*)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, bool allowEmptyResult, unsigned int autoCloseMs)) dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_get_input"); if (GUI_dialog_keyboard_show_and_get_input == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_keyboard_show_and_get_new_password_with_head = (bool (*)(void *HANDLE, void *CB, char &newPassword, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, unsigned int autoCloseMs)) dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_get_new_password_with_head"); if (GUI_dialog_keyboard_show_and_get_new_password_with_head == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_keyboard_show_and_get_new_password = (bool (*)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs)) dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_get_new_password"); if (GUI_dialog_keyboard_show_and_get_new_password == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_keyboard_show_and_verify_new_password_with_head = (bool (*)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, unsigned int autoCloseMs)) dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_verify_new_password_with_head"); if (GUI_dialog_keyboard_show_and_verify_new_password_with_head == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_keyboard_show_and_verify_new_password = (bool (*)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs)) dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_verify_new_password"); if (GUI_dialog_keyboard_show_and_verify_new_password == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_keyboard_show_and_verify_password = (int (*)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries, unsigned int autoCloseMs)) dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_verify_password"); if (GUI_dialog_keyboard_show_and_verify_password == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_keyboard_show_and_get_filter = (bool (*)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, bool searching, unsigned int autoCloseMs)) dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_show_and_get_filter"); if (GUI_dialog_keyboard_show_and_get_filter == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_keyboard_send_text_to_active_keyboard = (bool (*)(void *HANDLE, void *CB, const char *aTextString, bool closeKeyboard)) dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_send_text_to_active_keyboard"); if (GUI_dialog_keyboard_send_text_to_active_keyboard == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_keyboard_is_activated = (bool (*)(void *HANDLE, void *CB)) dlsym(m_libXBMC_gui, "GUI_dialog_keyboard_is_activated"); if (GUI_dialog_keyboard_is_activated == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_numeric_show_and_verify_new_password = (bool (*)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize)) dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_verify_new_password"); if (GUI_dialog_numeric_show_and_verify_new_password == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_numeric_show_and_verify_password = (int (*)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries)) dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_verify_password"); if (GUI_dialog_numeric_show_and_verify_password == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_numeric_show_and_verify_input = (bool (*)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, bool bGetUserInput)) dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_verify_input"); if (GUI_dialog_numeric_show_and_verify_input == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_numeric_show_and_get_time = (bool (*)(void *HANDLE, void *CB, tm &time, const char *strHeading)) dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_get_time"); if (GUI_dialog_numeric_show_and_get_time == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_numeric_show_and_get_date = (bool (*)(void *HANDLE, void *CB, tm &date, const char *strHeading)) dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_get_date"); if (GUI_dialog_numeric_show_and_get_date == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_numeric_show_and_get_ipaddress = (bool (*)(void *HANDLE, void *CB, char &IPAddress, unsigned int iMaxStringSize, const char *strHeading)) dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_get_ipaddress"); if (GUI_dialog_numeric_show_and_get_ipaddress == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_numeric_show_and_get_number = (bool (*)(void *HANDLE, void *CB, char &strInput, unsigned int iMaxStringSize, const char *strHeading, unsigned int iAutoCloseTimeoutMs)) dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_get_number"); if (GUI_dialog_numeric_show_and_get_number == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_numeric_show_and_get_seconds = (bool (*)(void *HANDLE, void *CB, char &strTime, unsigned int iMaxStringSize, const char *strHeading)) dlsym(m_libXBMC_gui, "GUI_dialog_numeric_show_and_get_seconds"); if (GUI_dialog_numeric_show_and_get_seconds == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_filebrowser_show_and_get_file = (bool (*)(void *HANDLE, void *CB, const char *directory, const char *mask, const char *heading, char &path, unsigned int iMaxStringSize, bool useThumbs, bool useFileDirectories, bool singleList)) dlsym(m_libXBMC_gui, "GUI_dialog_filebrowser_show_and_get_file"); if (GUI_dialog_filebrowser_show_and_get_file == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_ok_show_and_get_input_single_text = (void (*)(void *HANDLE, void *CB, const char *heading, const char *text)) dlsym(m_libXBMC_gui, "GUI_dialog_ok_show_and_get_input_single_text"); if (GUI_dialog_ok_show_and_get_input_single_text == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_ok_show_and_get_input_line_text = (void (*)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2)) dlsym(m_libXBMC_gui, "GUI_dialog_ok_show_and_get_input_line_text"); if (GUI_dialog_ok_show_and_get_input_line_text == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_yesno_show_and_get_input_singletext = (bool (*)(void *HANDLE, void *CB, const char *heading, const char *text, bool& bCanceled, const char *noLabel, const char *yesLabel)) dlsym(m_libXBMC_gui, "GUI_dialog_yesno_show_and_get_input_singletext"); if (GUI_dialog_yesno_show_and_get_input_singletext == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_yesno_show_and_get_input_linetext = (bool (*)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2, const char *noLabel, const char *yesLabel)) dlsym(m_libXBMC_gui, "GUI_dialog_yesno_show_and_get_input_linetext"); if (GUI_dialog_yesno_show_and_get_input_linetext == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_yesno_show_and_get_input_linebuttontext = (bool (*)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2, bool &bCanceled, const char *noLabel, const char *yesLabel)) dlsym(m_libXBMC_gui, "GUI_dialog_yesno_show_and_get_input_linebuttontext"); if (GUI_dialog_yesno_show_and_get_input_linebuttontext == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_text_viewer = (void (*)(void *hdl, void *cb, const char *heading, const char *text)) dlsym(m_libXBMC_gui, "GUI_dialog_text_viewer"); if (GUI_dialog_text_viewer == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } GUI_dialog_select = (int (*)(void *hdl, void *cb, const char *heading, const char *entries[], unsigned int size, int selected)) dlsym(m_libXBMC_gui, "GUI_dialog_select"); if (GUI_dialog_select == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } m_Callbacks = GUI_register_me(m_Handle); return m_Callbacks != NULL; } void Lock() { return GUI_lock(m_Handle, m_Callbacks); } void Unlock() { return GUI_unlock(m_Handle, m_Callbacks); } int GetScreenHeight() { return GUI_get_screen_height(m_Handle, m_Callbacks); } int GetScreenWidth() { return GUI_get_screen_width(m_Handle, m_Callbacks); } int GetVideoResolution() { return GUI_get_video_resolution(m_Handle, m_Callbacks); } CAddonGUIWindow* Window_create(const char *xmlFilename, const char *defaultSkin, bool forceFallback, bool asDialog) { return GUI_Window_create(m_Handle, m_Callbacks, xmlFilename, defaultSkin, forceFallback, asDialog); } void Window_destroy(CAddonGUIWindow* p) { return GUI_Window_destroy(p); } CAddonGUISpinControl* Control_getSpin(CAddonGUIWindow *window, int controlId) { return GUI_control_get_spin(m_Handle, m_Callbacks, window, controlId); } void Control_releaseSpin(CAddonGUISpinControl* p) { return GUI_control_release_spin(p); } CAddonGUIRadioButton* Control_getRadioButton(CAddonGUIWindow *window, int controlId) { return GUI_control_get_radiobutton(m_Handle, m_Callbacks, window, controlId); } void Control_releaseRadioButton(CAddonGUIRadioButton* p) { return GUI_control_release_radiobutton(p); } CAddonGUIProgressControl* Control_getProgress(CAddonGUIWindow *window, int controlId) { return GUI_control_get_progress(m_Handle, m_Callbacks, window, controlId); } void Control_releaseProgress(CAddonGUIProgressControl* p) { return GUI_control_release_progress(p); } CAddonListItem* ListItem_create(const char *label, const char *label2, const char *iconImage, const char *thumbnailImage, const char *path) { return GUI_ListItem_create(m_Handle, m_Callbacks, label, label2, iconImage, thumbnailImage, path); } void ListItem_destroy(CAddonListItem* p) { return GUI_ListItem_destroy(p); } CAddonGUIRenderingControl* Control_getRendering(CAddonGUIWindow *window, int controlId) { return GUI_control_get_rendering(m_Handle, m_Callbacks, window, controlId); } void Control_releaseRendering(CAddonGUIRenderingControl* p) { return GUI_control_release_rendering(p); } CAddonGUISliderControl* Control_getSlider(CAddonGUIWindow *window, int controlId) { return GUI_control_get_slider(m_Handle, m_Callbacks, window, controlId); } void Control_releaseSlider(CAddonGUISliderControl* p) { return GUI_control_release_slider(p); } CAddonGUISettingsSliderControl* Control_getSettingsSlider(CAddonGUIWindow *window, int controlId) { return GUI_control_get_settings_slider(m_Handle, m_Callbacks, window, controlId); } void Control_releaseSettingsSlider(CAddonGUISettingsSliderControl* p) { return GUI_control_release_settings_slider(p); } /*! @name GUI Keyboard functions */ //@{ bool Dialog_Keyboard_ShowAndGetInput(char &strText, unsigned int iMaxStringSize, const char *strHeading, bool allowEmptyResult, bool hiddenInput, unsigned int autoCloseMs = 0) { return GUI_dialog_keyboard_show_and_get_input_with_head(m_Handle, m_Callbacks, strText, iMaxStringSize, strHeading, allowEmptyResult, hiddenInput, autoCloseMs); } bool Dialog_Keyboard_ShowAndGetInput(char &strText, unsigned int iMaxStringSize, bool allowEmptyResult, unsigned int autoCloseMs = 0) { return GUI_dialog_keyboard_show_and_get_input(m_Handle, m_Callbacks, strText, iMaxStringSize, allowEmptyResult, autoCloseMs); } bool Dialog_Keyboard_ShowAndGetNewPassword(char &strNewPassword, unsigned int iMaxStringSize, const char *strHeading, bool allowEmptyResult, unsigned int autoCloseMs = 0) { return GUI_dialog_keyboard_show_and_get_new_password_with_head(m_Handle, m_Callbacks, strNewPassword, iMaxStringSize, strHeading, allowEmptyResult, autoCloseMs); } bool Dialog_Keyboard_ShowAndGetNewPassword(char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs = 0) { return GUI_dialog_keyboard_show_and_get_new_password(m_Handle, m_Callbacks, strNewPassword, iMaxStringSize, autoCloseMs); } bool Dialog_Keyboard_ShowAndVerifyNewPassword(char &strNewPassword, unsigned int iMaxStringSize, const char *strHeading, bool allowEmptyResult, unsigned int autoCloseMs = 0) { return GUI_dialog_keyboard_show_and_verify_new_password_with_head(m_Handle, m_Callbacks, strNewPassword, iMaxStringSize, strHeading, allowEmptyResult, autoCloseMs); } bool Dialog_Keyboard_ShowAndVerifyNewPassword(char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs = 0) { return GUI_dialog_keyboard_show_and_verify_new_password(m_Handle, m_Callbacks, strNewPassword, iMaxStringSize, autoCloseMs); } int Dialog_Keyboard_ShowAndVerifyPassword(char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries, unsigned int autoCloseMs = 0) { return GUI_dialog_keyboard_show_and_verify_password(m_Handle, m_Callbacks, strPassword, iMaxStringSize, strHeading, iRetries, autoCloseMs); } bool Dialog_Keyboard_ShowAndGetFilter(char &strText, unsigned int iMaxStringSize, bool searching, unsigned int autoCloseMs = 0) { return GUI_dialog_keyboard_show_and_get_filter(m_Handle, m_Callbacks, strText, iMaxStringSize, searching, autoCloseMs); } bool Dialog_Keyboard_SendTextToActiveKeyboard(const char *aTextString, bool closeKeyboard = false) { return GUI_dialog_keyboard_send_text_to_active_keyboard(m_Handle, m_Callbacks, aTextString, closeKeyboard); } bool Dialog_Keyboard_isKeyboardActivated() { return GUI_dialog_keyboard_is_activated(m_Handle, m_Callbacks); } //@} /*! @name GUI Numeric functions */ //@{ bool Dialog_Numeric_ShowAndVerifyNewPassword(char &strNewPassword, unsigned int iMaxStringSize) { return GUI_dialog_numeric_show_and_verify_new_password(m_Handle, m_Callbacks, strNewPassword, iMaxStringSize); } int Dialog_Numeric_ShowAndVerifyPassword(char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries) { return GUI_dialog_numeric_show_and_verify_password(m_Handle, m_Callbacks, strPassword, iMaxStringSize, strHeading, iRetries); } bool Dialog_Numeric_ShowAndVerifyInput(char &strPassword, unsigned int iMaxStringSize, const char *strHeading, bool bGetUserInput) { return GUI_dialog_numeric_show_and_verify_input(m_Handle, m_Callbacks, strPassword, iMaxStringSize, strHeading, bGetUserInput); } bool Dialog_Numeric_ShowAndGetTime(tm &time, const char *strHeading) { return GUI_dialog_numeric_show_and_get_time(m_Handle, m_Callbacks, time, strHeading); } bool Dialog_Numeric_ShowAndGetDate(tm &date, const char *strHeading) { return GUI_dialog_numeric_show_and_get_date(m_Handle, m_Callbacks, date, strHeading); } bool Dialog_Numeric_ShowAndGetIPAddress(char &strIPAddress, unsigned int iMaxStringSize, const char *strHeading) { return GUI_dialog_numeric_show_and_get_ipaddress(m_Handle, m_Callbacks, strIPAddress, iMaxStringSize, strHeading); } bool Dialog_Numeric_ShowAndGetNumber(char &strInput, unsigned int iMaxStringSize, const char *strHeading, unsigned int iAutoCloseTimeoutMs = 0) { return GUI_dialog_numeric_show_and_get_number(m_Handle, m_Callbacks, strInput, iMaxStringSize, strHeading, iAutoCloseTimeoutMs = 0); } bool Dialog_Numeric_ShowAndGetSeconds(char &strTime, unsigned int iMaxStringSize, const char *strHeading) { return GUI_dialog_numeric_show_and_get_seconds(m_Handle, m_Callbacks, strTime, iMaxStringSize, strHeading); } //@} /*! @name GUI File browser functions */ //@{ bool Dialog_FileBrowser_ShowAndGetFile(const char *directory, const char *mask, const char *heading, char &strPath, unsigned int iMaxStringSize, bool useThumbs = false, bool useFileDirectories = false, bool singleList = false) { return GUI_dialog_filebrowser_show_and_get_file(m_Handle, m_Callbacks, directory, mask, heading, strPath, iMaxStringSize, useThumbs, useFileDirectories, singleList); } //@} /*! @name GUI OK Dialog functions */ //@{ void Dialog_OK_ShowAndGetInput(const char *heading, const char *text) { GUI_dialog_ok_show_and_get_input_single_text(m_Handle, m_Callbacks, heading, text); } void Dialog_OK_ShowAndGetInput(const char *heading, const char *line0, const char *line1, const char *line2) { GUI_dialog_ok_show_and_get_input_line_text(m_Handle, m_Callbacks, heading, line0, line1, line2); } //@} /*! @name GUI Yes No Dialog functions */ //@{ bool Dialog_YesNo_ShowAndGetInput(const char *heading, const char *text, bool& bCanceled, const char *noLabel = "", const char *yesLabel = "") { return GUI_dialog_yesno_show_and_get_input_singletext(m_Handle, m_Callbacks, heading, text, bCanceled, noLabel, yesLabel); } bool Dialog_YesNo_ShowAndGetInput(const char *heading, const char *line0, const char *line1, const char *line2, const char *noLabel = "", const char *yesLabel = "") { return GUI_dialog_yesno_show_and_get_input_linetext(m_Handle, m_Callbacks, heading, line0, line1, line2, noLabel, yesLabel); } bool Dialog_YesNo_ShowAndGetInput(const char *heading, const char *line0, const char *line1, const char *line2, bool &bCanceled, const char *noLabel = "", const char *yesLabel = "") { return GUI_dialog_yesno_show_and_get_input_linebuttontext(m_Handle, m_Callbacks, heading, line0, line1, line2, bCanceled, noLabel, yesLabel); } //@} /*! @name GUI Text viewer Dialog */ //@{ void Dialog_TextViewer(const char *heading, const char *text) { return GUI_dialog_text_viewer(m_Handle, m_Callbacks, heading, text); } //@} /*! @name GUI select Dialog */ //@{ int Dialog_Select(const char *heading, const char *entries[], unsigned int size, int selected = -1) { return GUI_dialog_select(m_Handle, m_Callbacks, heading, entries, size, selected); } //@} protected: void* (*GUI_register_me)(void *HANDLE); void (*GUI_unregister_me)(void *HANDLE, void* CB); void (*GUI_lock)(void *HANDLE, void* CB); void (*GUI_unlock)(void *HANDLE, void* CB); int (*GUI_get_screen_height)(void *HANDLE, void* CB); int (*GUI_get_screen_width)(void *HANDLE, void* CB); int (*GUI_get_video_resolution)(void *HANDLE, void* CB); CAddonGUIWindow* (*GUI_Window_create)(void *HANDLE, void* CB, const char *xmlFilename, const char *defaultSkin, bool forceFallback, bool asDialog); void (*GUI_Window_destroy)(CAddonGUIWindow* p); CAddonGUISpinControl* (*GUI_control_get_spin)(void *HANDLE, void* CB, CAddonGUIWindow *window, int controlId); void (*GUI_control_release_spin)(CAddonGUISpinControl* p); CAddonGUIRadioButton* (*GUI_control_get_radiobutton)(void *HANDLE, void* CB, CAddonGUIWindow *window, int controlId); void (*GUI_control_release_radiobutton)(CAddonGUIRadioButton* p); CAddonGUIProgressControl* (*GUI_control_get_progress)(void *HANDLE, void* CB, CAddonGUIWindow *window, int controlId); void (*GUI_control_release_progress)(CAddonGUIProgressControl* p); CAddonListItem* (*GUI_ListItem_create)(void *HANDLE, void* CB, const char *label, const char *label2, const char *iconImage, const char *thumbnailImage, const char *path); void (*GUI_ListItem_destroy)(CAddonListItem* p); CAddonGUIRenderingControl* (*GUI_control_get_rendering)(void *HANDLE, void* CB, CAddonGUIWindow *window, int controlId); void (*GUI_control_release_rendering)(CAddonGUIRenderingControl* p); CAddonGUISliderControl* (*GUI_control_get_slider)(void *HANDLE, void* CB, CAddonGUIWindow *window, int controlId); void (*GUI_control_release_slider)(CAddonGUISliderControl* p); CAddonGUISettingsSliderControl* (*GUI_control_get_settings_slider)(void *HANDLE, void* CB, CAddonGUIWindow *window, int controlId); void (*GUI_control_release_settings_slider)(CAddonGUISettingsSliderControl* p); bool (*GUI_dialog_keyboard_show_and_get_input_with_head)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, bool hiddenInput, unsigned int autoCloseMs); bool (*GUI_dialog_keyboard_show_and_get_input)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, bool allowEmptyResult, unsigned int autoCloseMs); bool (*GUI_dialog_keyboard_show_and_get_new_password_with_head)(void *HANDLE, void *CB, char &newPassword, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, unsigned int autoCloseMs); bool (*GUI_dialog_keyboard_show_and_get_new_password)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs); bool (*GUI_dialog_keyboard_show_and_verify_new_password_with_head)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, const char *heading, bool allowEmptyResult, unsigned int autoCloseMs); bool (*GUI_dialog_keyboard_show_and_verify_new_password)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize, unsigned int autoCloseMs); int (*GUI_dialog_keyboard_show_and_verify_password)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries, unsigned int autoCloseMs); bool (*GUI_dialog_keyboard_show_and_get_filter)(void *HANDLE, void *CB, char &aTextString, unsigned int iMaxStringSize, bool searching, unsigned int autoCloseMs); bool (*GUI_dialog_keyboard_send_text_to_active_keyboard)(void *HANDLE, void *CB, const char *aTextString, bool closeKeyboard); bool (*GUI_dialog_keyboard_is_activated)(void *HANDLE, void *CB); bool (*GUI_dialog_numeric_show_and_verify_new_password)(void *HANDLE, void *CB, char &strNewPassword, unsigned int iMaxStringSize); int (*GUI_dialog_numeric_show_and_verify_password)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, int iRetries); bool (*GUI_dialog_numeric_show_and_verify_input)(void *HANDLE, void *CB, char &strPassword, unsigned int iMaxStringSize, const char *strHeading, bool bGetUserInput); bool (*GUI_dialog_numeric_show_and_get_time)(void *HANDLE, void *CB, tm &time, const char *strHeading); bool (*GUI_dialog_numeric_show_and_get_date)(void *HANDLE, void *CB, tm &date, const char *strHeading); bool (*GUI_dialog_numeric_show_and_get_ipaddress)(void *HANDLE, void *CB, char &IPAddress, unsigned int iMaxStringSize, const char *strHeading); bool (*GUI_dialog_numeric_show_and_get_number)(void *HANDLE, void *CB, char &strInput, unsigned int iMaxStringSize, const char *strHeading, unsigned int iAutoCloseTimeoutMs); bool (*GUI_dialog_numeric_show_and_get_seconds)(void *HANDLE, void *CB, char &strTime, unsigned int iMaxStringSize, const char *strHeading); bool (*GUI_dialog_filebrowser_show_and_get_file)(void *HANDLE, void *CB, const char *directory, const char *mask, const char *heading, char &path, unsigned int iMaxStringSize, bool useThumbs, bool useFileDirectories, bool singleList); void (*GUI_dialog_ok_show_and_get_input_single_text)(void *HANDLE, void *CB, const char *heading, const char *text); void (*GUI_dialog_ok_show_and_get_input_line_text)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2); bool (*GUI_dialog_yesno_show_and_get_input_singletext)(void *HANDLE, void *CB, const char *heading, const char *text, bool& bCanceled, const char *noLabel, const char *yesLabel); bool (*GUI_dialog_yesno_show_and_get_input_linetext)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2, const char *noLabel, const char *yesLabel); bool (*GUI_dialog_yesno_show_and_get_input_linebuttontext)(void *HANDLE, void *CB, const char *heading, const char *line0, const char *line1, const char *line2, bool &bCanceled, const char *noLabel, const char *yesLabel); void (*GUI_dialog_text_viewer)(void *hdl, void *cb, const char *heading, const char *text); int (*GUI_dialog_select)(void *hdl, void *cb, const char *heading, const char *entries[], unsigned int size, int selected); private: void *m_libXBMC_gui; void *m_Handle; void *m_Callbacks; struct cb_array { const char* libPath; }; }; class CAddonGUISpinControl { public: CAddonGUISpinControl(void *hdl, void *cb, CAddonGUIWindow *window, int controlId); virtual ~CAddonGUISpinControl(void) {} virtual void SetVisible(bool yesNo); virtual void SetText(const char *label); virtual void Clear(); virtual void AddLabel(const char *label, int iValue); virtual int GetValue(); virtual void SetValue(int iValue); private: CAddonGUIWindow *m_Window; int m_ControlId; GUIHANDLE m_SpinHandle; void *m_Handle; void *m_cb; }; class CAddonGUIRadioButton { public: CAddonGUIRadioButton(void *hdl, void *cb, CAddonGUIWindow *window, int controlId); virtual ~CAddonGUIRadioButton() {} virtual void SetVisible(bool yesNo); virtual void SetText(const char *label); virtual void SetSelected(bool yesNo); virtual bool IsSelected(); private: CAddonGUIWindow *m_Window; int m_ControlId; GUIHANDLE m_ButtonHandle; void *m_Handle; void *m_cb; }; class CAddonGUIProgressControl { public: CAddonGUIProgressControl(void *hdl, void *cb, CAddonGUIWindow *window, int controlId); virtual ~CAddonGUIProgressControl(void) {} virtual void SetPercentage(float fPercent); virtual float GetPercentage() const; virtual void SetInfo(int iInfo); virtual int GetInfo() const; virtual std::string GetDescription() const; private: CAddonGUIWindow *m_Window; int m_ControlId; GUIHANDLE m_ProgressHandle; void *m_Handle; void *m_cb; }; class CAddonGUISliderControl { public: CAddonGUISliderControl(void *hdl, void *cb, CAddonGUIWindow *window, int controlId); virtual ~CAddonGUISliderControl(void) {} virtual void SetVisible(bool yesNo); virtual std::string GetDescription() const; virtual void SetIntRange(int iStart, int iEnd); virtual void SetIntValue(int iValue); virtual int GetIntValue() const; virtual void SetIntInterval(int iInterval); virtual void SetPercentage(float fPercent); virtual float GetPercentage() const; virtual void SetFloatRange(float fStart, float fEnd); virtual void SetFloatValue(float fValue); virtual float GetFloatValue() const; virtual void SetFloatInterval(float fInterval); private: CAddonGUIWindow *m_Window; int m_ControlId; GUIHANDLE m_SliderHandle; void *m_Handle; void *m_cb; }; class CAddonGUISettingsSliderControl { public: CAddonGUISettingsSliderControl(void *hdl, void *cb, CAddonGUIWindow *window, int controlId); virtual ~CAddonGUISettingsSliderControl(void) {} virtual void SetVisible(bool yesNo); virtual void SetText(const char *label); virtual std::string GetDescription() const; virtual void SetIntRange(int iStart, int iEnd); virtual void SetIntValue(int iValue); virtual int GetIntValue() const; virtual void SetIntInterval(int iInterval); virtual void SetPercentage(float fPercent); virtual float GetPercentage() const; virtual void SetFloatRange(float fStart, float fEnd); virtual void SetFloatValue(float fValue); virtual float GetFloatValue() const; virtual void SetFloatInterval(float fInterval); private: CAddonGUIWindow *m_Window; int m_ControlId; GUIHANDLE m_SettingsSliderHandle; void *m_Handle; void *m_cb; }; class CAddonListItem { friend class CAddonGUIWindow; public: CAddonListItem(void *hdl, void *cb, const char *label, const char *label2, const char *iconImage, const char *thumbnailImage, const char *path); virtual ~CAddonListItem(void) {} virtual const char *GetLabel(); virtual void SetLabel(const char *label); virtual const char *GetLabel2(); virtual void SetLabel2(const char *label); virtual void SetIconImage(const char *image); virtual void SetThumbnailImage(const char *image); virtual void SetInfo(const char *Info); virtual void SetProperty(const char *key, const char *value); virtual const char *GetProperty(const char *key) const; virtual void SetPath(const char *Path); // {(char*)"select(); // {(char*)"isSelected(); protected: GUIHANDLE m_ListItemHandle; void *m_Handle; void *m_cb; }; class CAddonGUIWindow { friend class CAddonGUISpinControl; friend class CAddonGUIRadioButton; friend class CAddonGUIProgressControl; friend class CAddonGUIRenderingControl; friend class CAddonGUISliderControl; friend class CAddonGUISettingsSliderControl; public: CAddonGUIWindow(void *hdl, void *cb, const char *xmlFilename, const char *defaultSkin, bool forceFallback, bool asDialog); virtual ~CAddonGUIWindow(); virtual bool Show(); virtual void Close(); virtual void DoModal(); virtual bool SetFocusId(int iControlId); virtual int GetFocusId(); virtual bool SetCoordinateResolution(int res); virtual void SetProperty(const char *key, const char *value); virtual void SetPropertyInt(const char *key, int value); virtual void SetPropertyBool(const char *key, bool value); virtual void SetPropertyDouble(const char *key, double value); virtual const char *GetProperty(const char *key) const; virtual int GetPropertyInt(const char *key) const; virtual bool GetPropertyBool(const char *key) const; virtual double GetPropertyDouble(const char *key) const; virtual void ClearProperties(); virtual int GetListSize(); virtual void ClearList(); virtual GUIHANDLE AddStringItem(const char *name, int itemPosition = -1); virtual void AddItem(GUIHANDLE item, int itemPosition = -1); virtual void AddItem(CAddonListItem *item, int itemPosition = -1); virtual void RemoveItem(int itemPosition); virtual GUIHANDLE GetListItem(int listPos); virtual void SetCurrentListPosition(int listPos); virtual int GetCurrentListPosition(); virtual void SetControlLabel(int controlId, const char *label); virtual void MarkDirtyRegion(); virtual bool OnClick(int controlId); virtual bool OnFocus(int controlId); virtual bool OnInit(); virtual bool OnAction(int actionId); GUIHANDLE m_cbhdl; bool (*CBOnInit)(GUIHANDLE cbhdl); bool (*CBOnFocus)(GUIHANDLE cbhdl, int controlId); bool (*CBOnClick)(GUIHANDLE cbhdl, int controlId); bool (*CBOnAction)(GUIHANDLE cbhdl, int actionId); protected: GUIHANDLE m_WindowHandle; void *m_Handle; void *m_cb; }; class CAddonGUIRenderingControl { public: CAddonGUIRenderingControl(void *hdl, void *cb, CAddonGUIWindow *window, int controlId); virtual ~CAddonGUIRenderingControl(); virtual void Init(); virtual bool Create(int x, int y, int w, int h, void *device); virtual void Render(); virtual void Stop(); virtual bool Dirty(); GUIHANDLE m_cbhdl; bool (*CBCreate)(GUIHANDLE cbhdl, int x, int y, int w, int h, void *device); void (*CBRender)(GUIHANDLE cbhdl); void (*CBStop)(GUIHANDLE cbhdl); bool (*CBDirty)(GUIHANDLE cbhdl); private: CAddonGUIWindow *m_Window; int m_ControlId; GUIHANDLE m_RenderingHandle; void *m_Handle; void *m_cb; };