diff options
Diffstat (limited to 'xbmc/pictures/GUIDialogPictureInfo.cpp')
-rw-r--r-- | xbmc/pictures/GUIDialogPictureInfo.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/xbmc/pictures/GUIDialogPictureInfo.cpp b/xbmc/pictures/GUIDialogPictureInfo.cpp new file mode 100644 index 0000000..90764e0 --- /dev/null +++ b/xbmc/pictures/GUIDialogPictureInfo.cpp @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "GUIDialogPictureInfo.h" + +#include "FileItem.h" +#include "GUIInfoManager.h" +#include "ServiceBroker.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" +#include "guilib/LocalizeStrings.h" +#include "guilib/guiinfo/GUIInfoLabels.h" +#include "input/Key.h" + +#define CONTROL_PICTURE_INFO 5 + +#define SLIDESHOW_STRING_BASE 21800 - SLIDESHOW_LABELS_START + +CGUIDialogPictureInfo::CGUIDialogPictureInfo(void) + : CGUIDialog(WINDOW_DIALOG_PICTURE_INFO, "DialogPictureInfo.xml") +{ + m_pictureInfo = new CFileItemList; + m_loadType = KEEP_IN_MEMORY; +} + +CGUIDialogPictureInfo::~CGUIDialogPictureInfo(void) +{ + delete m_pictureInfo; +} + +void CGUIDialogPictureInfo::SetPicture(CFileItem *item) +{ + CServiceBroker::GetGUI()->GetInfoManager().GetInfoProviders().GetPicturesInfoProvider().SetCurrentSlide(item); +} + +void CGUIDialogPictureInfo::OnInitWindow() +{ + UpdatePictureInfo(); + CGUIDialog::OnInitWindow(); +} + +bool CGUIDialogPictureInfo::OnAction(const CAction& action) +{ + switch (action.GetID()) + { + // if we're running from slideshow mode, drop the "next picture" and "previous picture" actions through. + case ACTION_NEXT_PICTURE: + case ACTION_PREV_PICTURE: + case ACTION_PLAYER_PLAY: + case ACTION_PAUSE: + if (CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow() == WINDOW_SLIDESHOW) + { + CGUIWindow* pWindow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow(WINDOW_SLIDESHOW); + return pWindow->OnAction(action); + } + break; + + case ACTION_SHOW_INFO: + Close(); + return true; + }; + return CGUIDialog::OnAction(action); +} + +void CGUIDialogPictureInfo::FrameMove() +{ + const CFileItem* item = CServiceBroker::GetGUI()->GetInfoManager().GetInfoProviders().GetPicturesInfoProvider().GetCurrentSlide(); + if (item && item->GetPath() != m_currentPicture) + { + UpdatePictureInfo(); + m_currentPicture = item->GetPath(); + } + CGUIDialog::FrameMove(); +} + +void CGUIDialogPictureInfo::UpdatePictureInfo() +{ + // add stuff from the current slide to the list + CGUIMessage msgReset(GUI_MSG_LABEL_RESET, GetID(), CONTROL_PICTURE_INFO); + OnMessage(msgReset); + m_pictureInfo->Clear(); + for (int info = SLIDESHOW_LABELS_START; info <= SLIDESHOW_LABELS_END; ++info) + { + // we only want to add SLIDESHOW_EXIF_DATE_TIME + // so we skip the other date formats + if (info == SLIDESHOW_EXIF_DATE || info == SLIDESHOW_EXIF_LONG_DATE || info == SLIDESHOW_EXIF_LONG_DATE_TIME ) + continue; + + std::string picInfo = + CServiceBroker::GetGUI()->GetInfoManager().GetLabel(info, INFO::DEFAULT_CONTEXT); + if (!picInfo.empty()) + { + CFileItemPtr item(new CFileItem(g_localizeStrings.Get(SLIDESHOW_STRING_BASE + info))); + item->SetLabel2(picInfo); + m_pictureInfo->Add(item); + } + } + CGUIMessage msg(GUI_MSG_LABEL_BIND, GetID(), CONTROL_PICTURE_INFO, 0, 0, m_pictureInfo); + OnMessage(msg); +} + +void CGUIDialogPictureInfo::OnDeinitWindow(int nextWindowID) +{ + CGUIDialog::OnDeinitWindow(nextWindowID); + CGUIMessage msgReset(GUI_MSG_LABEL_RESET, GetID(), CONTROL_PICTURE_INFO); + OnMessage(msgReset); + m_pictureInfo->Clear(); + m_currentPicture.clear(); +} |