/xbmc/pictures/GUIDialogPictureInfo.cpp

http://github.com/xbmc/xbmc · C++ · 113 lines · 88 code · 14 blank · 11 comment · 14 complexity · a3b4cbdb1ebe19dc0dbd9334a4a70f5c MD5 · raw file

  1. /*
  2. * Copyright (C) 2005-2018 Team Kodi
  3. * This file is part of Kodi - https://kodi.tv
  4. *
  5. * SPDX-License-Identifier: GPL-2.0-or-later
  6. * See LICENSES/README.md for more information.
  7. */
  8. #include "GUIDialogPictureInfo.h"
  9. #include "FileItem.h"
  10. #include "GUIInfoManager.h"
  11. #include "ServiceBroker.h"
  12. #include "guilib/GUIComponent.h"
  13. #include "guilib/GUIWindowManager.h"
  14. #include "guilib/LocalizeStrings.h"
  15. #include "guilib/guiinfo/GUIInfoLabels.h"
  16. #include "input/Key.h"
  17. #define CONTROL_PICTURE_INFO 5
  18. #define SLIDESHOW_STRING_BASE 21800 - SLIDESHOW_LABELS_START
  19. CGUIDialogPictureInfo::CGUIDialogPictureInfo(void)
  20. : CGUIDialog(WINDOW_DIALOG_PICTURE_INFO, "DialogPictureInfo.xml")
  21. {
  22. m_pictureInfo = new CFileItemList;
  23. m_loadType = KEEP_IN_MEMORY;
  24. }
  25. CGUIDialogPictureInfo::~CGUIDialogPictureInfo(void)
  26. {
  27. delete m_pictureInfo;
  28. }
  29. void CGUIDialogPictureInfo::SetPicture(CFileItem *item)
  30. {
  31. CServiceBroker::GetGUI()->GetInfoManager().GetInfoProviders().GetPicturesInfoProvider().SetCurrentSlide(item);
  32. }
  33. void CGUIDialogPictureInfo::OnInitWindow()
  34. {
  35. UpdatePictureInfo();
  36. CGUIDialog::OnInitWindow();
  37. }
  38. bool CGUIDialogPictureInfo::OnAction(const CAction& action)
  39. {
  40. switch (action.GetID())
  41. {
  42. // if we're running from slideshow mode, drop the "next picture" and "previous picture" actions through.
  43. case ACTION_NEXT_PICTURE:
  44. case ACTION_PREV_PICTURE:
  45. case ACTION_PLAYER_PLAY:
  46. case ACTION_PAUSE:
  47. if (CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow() == WINDOW_SLIDESHOW)
  48. {
  49. CGUIWindow* pWindow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow(WINDOW_SLIDESHOW);
  50. return pWindow->OnAction(action);
  51. }
  52. break;
  53. case ACTION_SHOW_INFO:
  54. Close();
  55. return true;
  56. };
  57. return CGUIDialog::OnAction(action);
  58. }
  59. void CGUIDialogPictureInfo::FrameMove()
  60. {
  61. const CFileItem* item = CServiceBroker::GetGUI()->GetInfoManager().GetInfoProviders().GetPicturesInfoProvider().GetCurrentSlide();
  62. if (item && item->GetPath() != m_currentPicture)
  63. {
  64. UpdatePictureInfo();
  65. m_currentPicture = item->GetPath();
  66. }
  67. CGUIDialog::FrameMove();
  68. }
  69. void CGUIDialogPictureInfo::UpdatePictureInfo()
  70. {
  71. // add stuff from the current slide to the list
  72. CGUIMessage msgReset(GUI_MSG_LABEL_RESET, GetID(), CONTROL_PICTURE_INFO);
  73. OnMessage(msgReset);
  74. m_pictureInfo->Clear();
  75. for (int info = SLIDESHOW_LABELS_START; info <= SLIDESHOW_LABELS_END; ++info)
  76. {
  77. // we only want to add SLIDESHOW_EXIF_DATE_TIME
  78. // so we skip the other date formats
  79. if (info == SLIDESHOW_EXIF_DATE || info == SLIDESHOW_EXIF_LONG_DATE || info == SLIDESHOW_EXIF_LONG_DATE_TIME )
  80. continue;
  81. std::string picInfo = CServiceBroker::GetGUI()->GetInfoManager().GetLabel(info);
  82. if (!picInfo.empty())
  83. {
  84. CFileItemPtr item(new CFileItem(g_localizeStrings.Get(SLIDESHOW_STRING_BASE + info)));
  85. item->SetLabel2(picInfo);
  86. m_pictureInfo->Add(item);
  87. }
  88. }
  89. CGUIMessage msg(GUI_MSG_LABEL_BIND, GetID(), CONTROL_PICTURE_INFO, 0, 0, m_pictureInfo);
  90. OnMessage(msg);
  91. }
  92. void CGUIDialogPictureInfo::OnDeinitWindow(int nextWindowID)
  93. {
  94. CGUIDialog::OnDeinitWindow(nextWindowID);
  95. CGUIMessage msgReset(GUI_MSG_LABEL_RESET, GetID(), CONTROL_PICTURE_INFO);
  96. OnMessage(msgReset);
  97. m_pictureInfo->Clear();
  98. m_currentPicture.clear();
  99. }