diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /xbmc/dialogs/GUIDialogTextViewer.cpp | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/dialogs/GUIDialogTextViewer.cpp')
-rw-r--r-- | xbmc/dialogs/GUIDialogTextViewer.cpp | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/xbmc/dialogs/GUIDialogTextViewer.cpp b/xbmc/dialogs/GUIDialogTextViewer.cpp new file mode 100644 index 0000000..363f102 --- /dev/null +++ b/xbmc/dialogs/GUIDialogTextViewer.cpp @@ -0,0 +1,132 @@ +/* + * 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 "GUIDialogTextViewer.h" + +#include "GUIUserMessages.h" +#include "ServiceBroker.h" +#include "filesystem/File.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" +#include "input/actions/Action.h" +#include "input/actions/ActionIDs.h" +#include "utils/URIUtils.h" +#include "utils/log.h" + +using namespace XFILE; + +#define CONTROL_HEADING 1 +#define CONTROL_TEXTAREA 5 + +CGUIDialogTextViewer::CGUIDialogTextViewer(void) + : CGUIDialog(WINDOW_DIALOG_TEXT_VIEWER, "DialogTextViewer.xml") +{ + m_loadType = KEEP_IN_MEMORY; +} + +CGUIDialogTextViewer::~CGUIDialogTextViewer(void) = default; + +bool CGUIDialogTextViewer::OnAction(const CAction &action) +{ + if (action.GetID() == ACTION_TOGGLE_FONT) + { + UseMonoFont(!m_mono); + return true; + } + + return CGUIDialog::OnAction(action); +} + +bool CGUIDialogTextViewer::OnMessage(CGUIMessage& message) +{ + switch ( message.GetMessage() ) + { + case GUI_MSG_WINDOW_INIT: + { + CGUIDialog::OnMessage(message); + SetHeading(); + SetText(); + UseMonoFont(m_mono); + return true; + } + break; + case GUI_MSG_NOTIFY_ALL: + { + if (message.GetParam1() == GUI_MSG_UPDATE) + { + SetText(); + SetHeading(); + return true; + } + } + break; + default: + break; + } + return CGUIDialog::OnMessage(message); +} + +void CGUIDialogTextViewer::SetText() +{ + CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), CONTROL_TEXTAREA); + msg.SetLabel(m_strText); + OnMessage(msg); +} + +void CGUIDialogTextViewer::SetHeading() +{ + CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), CONTROL_HEADING); + msg.SetLabel(m_strHeading); + OnMessage(msg); +} + +void CGUIDialogTextViewer::UseMonoFont(bool use) +{ + m_mono = use; + CGUIMessage msg(GUI_MSG_SET_TYPE, GetID(), CONTROL_TEXTAREA, use ? 1 : 0); + OnMessage(msg); +} + +void CGUIDialogTextViewer::OnDeinitWindow(int nextWindowID) +{ + CGUIDialog::OnDeinitWindow(nextWindowID); + + // reset text area + CGUIMessage msgReset(GUI_MSG_LABEL_RESET, GetID(), CONTROL_TEXTAREA); + OnMessage(msgReset); + + // reset heading + SET_CONTROL_LABEL(CONTROL_HEADING, ""); +} + +void CGUIDialogTextViewer::ShowForFile(const std::string& path, bool useMonoFont) +{ + CFile file; + if (file.Open(path)) + { + std::string data; + try + { + data.resize(file.GetLength()+1); + file.Read(&data[0], file.GetLength()); + CGUIDialogTextViewer* pDialog = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIDialogTextViewer>(WINDOW_DIALOG_TEXT_VIEWER); + pDialog->SetHeading(URIUtils::GetFileName(path)); + pDialog->SetText(data); + pDialog->UseMonoFont(useMonoFont); + pDialog->Open(); + } + catch(const std::bad_alloc&) + { + CLog::Log(LOGERROR, "Not enough memory to load text file {}", path); + } + catch(...) + { + CLog::Log(LOGERROR, "Exception while trying to view text file {}", path); + } + } +} |