summaryrefslogtreecommitdiffstats
path: root/xbmc/pictures/GUIDialogPictureInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/pictures/GUIDialogPictureInfo.cpp')
-rw-r--r--xbmc/pictures/GUIDialogPictureInfo.cpp114
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();
+}