11#include "../AddonBase.h"
12#include "../c-api/gui/window.h"
14#include "input/ActionIDs.h"
109class ATTR_DLL_LOCAL
CWindow :
public CAddonGUIControlBase
127 const std::string& defaultSkin,
129 bool isMedia =
false)
130 : CAddonGUIControlBase(nullptr)
132 m_controlHandle = m_interface->kodi_gui->window->create(
133 m_interface->kodiBase, xmlFilename.c_str(), defaultSkin.c_str(), asDialog, isMedia);
134 if (!m_controlHandle)
136 m_interface->kodi_gui->window->set_callbacks(m_interface->kodiBase, m_controlHandle,
this,
137 CBOnInit, CBOnFocus, CBOnClick, CBOnAction,
138 CBGetContextButtons, CBOnContextButton);
149 m_interface->kodi_gui->window->destroy(m_interface->kodiBase, m_controlHandle);
171 return m_interface->kodi_gui->window->show(m_interface->kodiBase, m_controlHandle);
182 void Close() { m_interface->kodi_gui->window->close(m_interface->kodiBase, m_controlHandle); }
191 m_interface->kodi_gui->window->do_modal(m_interface->kodiBase, m_controlHandle);
204 return m_interface->kodi_gui->window->set_focus_id(m_interface->kodiBase, m_controlHandle,
217 return m_interface->kodi_gui->window->get_focus_id(m_interface->kodiBase, m_controlHandle);
230 m_interface->kodi_gui->window->set_control_label(m_interface->kodiBase, m_controlHandle,
231 controlId, label.c_str());
244 m_interface->kodi_gui->window->set_control_visible(m_interface->kodiBase, m_controlHandle,
258 m_interface->kodi_gui->window->set_control_selected(m_interface->kodiBase, m_controlHandle,
259 controlId, selected);
276 void SetProperty(
const std::string& key,
const std::string& value)
278 m_interface->kodi_gui->window->set_property(m_interface->kodiBase, m_controlHandle, key.c_str(),
299 char* ret = m_interface->kodi_gui->window->get_property(m_interface->kodiBase, m_controlHandle,
303 if (std::strlen(ret))
305 m_interface->free_string(m_interface->kodiBase, ret);
320 m_interface->kodi_gui->window->set_property_int(m_interface->kodiBase, m_controlHandle,
334 return m_interface->kodi_gui->window->get_property_int(m_interface->kodiBase, m_controlHandle,
348 m_interface->kodi_gui->window->set_property_bool(m_interface->kodiBase, m_controlHandle,
362 return m_interface->kodi_gui->window->get_property_bool(m_interface->kodiBase, m_controlHandle,
376 m_interface->kodi_gui->window->set_property_double(m_interface->kodiBase, m_controlHandle,
390 return m_interface->kodi_gui->window->get_property_double(m_interface->kodiBase,
391 m_controlHandle, key.c_str());
401 m_interface->kodi_gui->window->clear_properties(m_interface->kodiBase, m_controlHandle);
429 m_interface->kodi_gui->window->clear_property(m_interface->kodiBase, m_controlHandle,
441 m_interface->kodi_gui->window->clear_item_list(m_interface->kodiBase, m_controlHandle);
452 void AddListItem(
const std::shared_ptr<CListItem>& item,
int itemPosition = -1)
454 m_interface->kodi_gui->window->add_list_item(m_interface->kodiBase, m_controlHandle,
455 item->m_controlHandle, itemPosition);
452 void AddListItem(
const std::shared_ptr<CListItem>& item,
int itemPosition = -1) {
…}
468 m_interface->kodi_gui->window->add_list_item(
469 m_interface->kodiBase, m_controlHandle,
470 std::make_shared<kodi::gui::CListItem>(item)->m_controlHandle, itemPosition);
482 m_interface->kodi_gui->window->remove_list_item_from_position(m_interface->kodiBase,
483 m_controlHandle, itemPosition);
495 m_interface->kodi_gui->window->remove_list_item(m_interface->kodiBase, m_controlHandle,
496 item->m_controlHandle);
511 KODI_GUI_LISTITEM_HANDLE handle = m_interface->kodi_gui->window->get_list_item(
512 m_interface->kodiBase, m_controlHandle, listPos);
514 return std::shared_ptr<CListItem>();
516 return std::make_shared<kodi::gui::CListItem>(handle);
528 m_interface->kodi_gui->window->set_current_list_position(m_interface->kodiBase, m_controlHandle,
541 return m_interface->kodi_gui->window->get_current_list_position(m_interface->kodiBase,
554 return m_interface->kodi_gui->window->get_list_size(m_interface->kodiBase, m_controlHandle);
572 m_interface->kodi_gui->window->set_container_property(m_interface->kodiBase, m_controlHandle,
573 key.c_str(), value.c_str());
611 m_interface->kodi_gui->window->set_container_content(m_interface->kodiBase, m_controlHandle,
624 return m_interface->kodi_gui->window->get_current_container_id(m_interface->kodiBase,
636 return m_interface->kodi_gui->window->mark_dirty_region(m_interface->kodiBase, m_controlHandle);
671 virtual bool OnFocus(
int controlId) {
return false; }
683 virtual bool OnClick(
int controlId) {
return false; }
762 std::vector<std::pair<unsigned int, std::string>>& buttons)
842 unsigned int* size) =
nullptr,
845 unsigned int button) =
nullptr)
847 if (!cbhdl || !CBOnInit || !CBOnFocus || !CBOnClick || !CBOnAction)
853 m_interface->kodi_gui->window->set_callbacks(m_interface->kodiBase, m_controlHandle, cbhdl,
854 CBOnInit, CBOnFocus, CBOnClick, CBOnAction,
855 CBGetContextButtons, CBOnContextButton);
861 static bool CBOnInit(KODI_GUI_CLIENT_HANDLE cbhdl)
863 return static_cast<CWindow*
>(cbhdl)->OnInit();
866 static bool CBOnFocus(KODI_GUI_CLIENT_HANDLE cbhdl,
int controlId)
868 return static_cast<CWindow*
>(cbhdl)->OnFocus(controlId);
871 static bool CBOnClick(KODI_GUI_CLIENT_HANDLE cbhdl,
int controlId)
873 return static_cast<CWindow*
>(cbhdl)->OnClick(controlId);
876 static bool CBOnAction(KODI_GUI_CLIENT_HANDLE cbhdl,
ADDON_ACTION actionId)
878 return static_cast<CWindow*
>(cbhdl)->OnAction(actionId);
881 static void CBGetContextButtons(KODI_GUI_CLIENT_HANDLE cbhdl,
883 gui_context_menu_pair* buttons,
886 std::vector<std::pair<unsigned int, std::string>> buttonList;
887 static_cast<CWindow*
>(cbhdl)->GetContextButtons(itemNumber, buttonList);
888 if (!buttonList.empty())
890 unsigned int presentSize =
static_cast<unsigned int>(buttonList.size());
891 if (presentSize > *size)
896 for (
unsigned int i = 0; i < *size; ++i)
898 buttons[i].id = buttonList[i].first;
899 strncpy(buttons[i].name, buttonList[i].second.c_str(), ADDON_MAX_CONTEXT_ENTRY_NAME_LENGTH);
904 static bool CBOnContextButton(KODI_GUI_CLIENT_HANDLE cbhdl,
int itemNumber,
unsigned int button)
906 return static_cast<CWindow*
>(cbhdl)->OnContextButton(itemNumber, button);
109class ATTR_DLL_LOCAL
CWindow :
public CAddonGUIControlBase {
…};
~CWindow() override
Class destructor.
Definition Window.h:146
@ ADDON_LOG_FATAL
4 : To notify fatal unrecoverable errors, which can may also indicate upcoming crashes.
Definition addon_base.h:197
@ ADDON_LOG_WARNING
2 : To write warnings in the log file.
Definition addon_base.h:190
ADDON_ACTION
Definition action_ids.h:19
@ ADDON_ACTION_PREVIOUS_MENU
10: Previous menu.
Definition action_ids.h:54
@ ADDON_ACTION_NAV_BACK
90: Nav back.
Definition action_ids.h:286
KODI_GUI_CLIENT_HANDLE ClientHandle
Handler for addon-sided processing class If the callback functions used by the window are not used di...
Definition Window.h:43
virtual bool OnContextButton(int itemNumber, unsigned int button)
Called after selection in context menu.
Definition Window.h:775
virtual void GetContextButtons(int itemNumber, std::vector< std::pair< unsigned int, std::string > > &buttons)
Get context menu buttons for list entry.
Definition Window.h:761
virtual bool OnAction(ADDON_ACTION actionId)
OnAction method.
Definition Window.h:738
virtual bool OnInit()
OnInit method.
Definition Window.h:659
virtual bool OnFocus(int controlId)
OnFocus method.
Definition Window.h:671
void SetIndependentCallbacks(kodi::gui::ClientHandle cbhdl, bool(*CBOnInit)(kodi::gui::ClientHandle cbhdl), bool(*CBOnFocus)(kodi::gui::ClientHandle cbhdl, int controlId), bool(*CBOnClick)(kodi::gui::ClientHandle cbhdl, int controlId), bool(*CBOnAction)(kodi::gui::ClientHandle cbhdl, ADDON_ACTION actionId), void(*CBGetContextButtons)(kodi::gui::ClientHandle cbhdl, int itemNumber, gui_context_menu_pair *buttons, unsigned int *size)=nullptr, bool(*CBOnContextButton)(kodi::gui::ClientHandle cbhdl, int itemNumber, unsigned int button)=nullptr)
Set independent callbacks
Definition Window.h:833
virtual bool OnClick(int controlId)
OnClick method.
Definition Window.h:683
bool SetFocusId(int controlId)
Gives the control with the supplied focus.
Definition Window.h:202
void RemoveListItem(const std::shared_ptr< CListItem > &item)
Remove item with given control class from list.
Definition Window.h:493
int GetListSize()
To get the amount of entries in the list.
Definition Window.h:552
CWindow(const std::string &xmlFilename, const std::string &defaultSkin, bool asDialog, bool isMedia=false)
Class constructor with needed values for window / dialog.
Definition Window.h:126
void ClearList()
Function delete all entries in integrated list.
Definition Window.h:439
void SetContainerContent(const std::string &value)
Sets the content type of the container.
Definition Window.h:609
void SetPropertyDouble(const std::string &key, double value)
Sets a window property with double value.
Definition Window.h:374
void SetPropertyInt(const std::string &key, int value)
Sets a window property with integer value.
Definition Window.h:318
std::shared_ptr< CListItem > GetListItem(int listPos)
To get list item control class on wanted position.
Definition Window.h:509
void SetControlLabel(int controlId, const std::string &label)
To set the used label on given control id.
Definition Window.h:228
void MarkDirtyRegion()
To inform Kodi that it need to render region new.
Definition Window.h:634
void SetControlVisible(int controlId, bool visible)
To set the visibility on given control id.
Definition Window.h:242
void SetControlSelected(int controlId, bool selected)
To set the selection on given control id.
Definition Window.h:256
void SetProperty(const std::string &key, const std::string &value)
Sets a window property, similar to an infolabel.
Definition Window.h:276
void Close()
Closes this window.
Definition Window.h:182
int GetCurrentListPosition()
To get current selected position in list.
Definition Window.h:539
void DoModal()
Display this window until close() is called.
Definition Window.h:189
void ClearProperty(const std::string &key)
Clears the specific window property.
Definition Window.h:427
void SetPropertyBool(const std::string &key, bool value)
Sets a window property with boolean value.
Definition Window.h:346
std::string GetProperty(const std::string &key) const
Returns a window property as a string, similar to an infolabel.
Definition Window.h:296
bool GetPropertyBool(const std::string &key) const
Returns a window property with boolean value.
Definition Window.h:360
bool Show()
Show this window.
Definition Window.h:169
void SetContainerProperty(const std::string &key, const std::string &value)
Sets a container property, similar to an infolabel.
Definition Window.h:570
int GetPropertyInt(const std::string &key) const
Returns a window property with integer value.
Definition Window.h:332
void SetCurrentListPosition(int listPos)
To set position of selected part in list.
Definition Window.h:526
void AddListItem(const std::shared_ptr< CListItem > &item, int itemPosition=-1)
To add a list item in the on window integrated list.
Definition Window.h:452
void ClearProperties()
Remove all present properties from window.
Definition Window.h:399
void RemoveListItem(int itemPosition)
Remove list item on position.
Definition Window.h:480
int GetCurrentContainerId()
Get the id of the currently visible container.
Definition Window.h:622
void AddListItem(const std::string &item, int itemPosition=-1)
To add a list item based upon string in the on window integrated list.
Definition Window.h:466
double GetPropertyDouble(const std::string &key) const
Returns a window property with double value.
Definition Window.h:388
int GetFocusId()
Returns the id of the control which is focused.
Definition Window.h:215
void ATTR_DLL_LOCAL Log(const ADDON_LOG loglevel, const char *format,...)
Add a message to Kodi's log.
Definition AddonBase.h:1935