summaryrefslogtreecommitdiffstats
path: root/xbmc/pvr/windows/GUIWindowPVRBase.h
blob: 1fe27bb828eedeb60162fea93f230fce102aecce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
 *  Copyright (C) 2012-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.
 */

#pragma once

#include "threads/CriticalSection.h"
#include "threads/SystemClock.h"
#include "windows/GUIMediaWindow.h"

#include <atomic>
#include <memory>
#include <string>

#define CONTROL_BTNVIEWASICONS            2
#define CONTROL_BTNSORTBY                 3
#define CONTROL_BTNSORTASC                4
#define CONTROL_BTNGROUPITEMS             5
#define CONTROL_BTNSHOWHIDDEN             6
#define CONTROL_BTNSHOWDELETED            7
#define CONTROL_BTNHIDEDISABLEDTIMERS     8
#define CONTROL_BTNSHOWMODE               10
#define CONTROL_LSTCHANNELGROUPS          11

#define CONTROL_BTNCHANNELGROUPS          28
#define CONTROL_BTNFILTERCHANNELS         31

#define CONTROL_LABEL_HEADER1             29
#define CONTROL_LABEL_HEADER2             30

class CGUIDialogProgressBarHandle;

namespace PVR
{
  enum class PVREvent;

  enum EPGSelectAction
  {
    EPG_SELECT_ACTION_CONTEXT_MENU = 0,
    EPG_SELECT_ACTION_SWITCH = 1,
    EPG_SELECT_ACTION_INFO = 2,
    EPG_SELECT_ACTION_RECORD = 3,
    EPG_SELECT_ACTION_PLAY_RECORDING = 4,
    EPG_SELECT_ACTION_SMART_SELECT = 5
  };

  class CPVRChannelGroup;
  class CGUIPVRChannelGroupsSelector;

  class CGUIWindowPVRBase : public CGUIMediaWindow
  {
  public:
    ~CGUIWindowPVRBase() override;

    void OnInitWindow() override;
    void OnDeinitWindow(int nextWindowID) override;
    bool OnMessage(CGUIMessage& message) override;
    bool Update(const std::string& strDirectory, bool updateFilterPath = true) override;
    void UpdateButtons() override;
    bool OnAction(const CAction& action) override;
    void SetInvalid() override;
    bool CanBeActivated() const override;

    bool UseFileDirectories() override { return false; }

    /*!
     * @brief CEventStream callback for PVR events.
     * @param event The event.
     */
    void Notify(const PVREvent& event);
    virtual void NotifyEvent(const PVREvent& event);

    /*!
     * @brief Refresh window content.
     * @return true, if refresh succeeded, false otherwise.
     */
    bool DoRefresh() { return Refresh(true); }

    bool ActivatePreviousChannelGroup();
    bool ActivateNextChannelGroup();
    bool OpenChannelGroupSelectionDialog();

  protected:
    CGUIWindowPVRBase(bool bRadio, int id, const std::string& xmlFile);

    virtual std::string GetDirectoryPath() = 0;

    virtual void ClearData();

    /*!
     * @brief Init this window's channel group with the currently active (the "playing") channel group.
     * @return true if group could be set, false otherwise.
     */
    bool InitChannelGroup();

    /*!
     * @brief Get the channel group for this window.
     * @return the group or null, if no group set.
     */
   std::shared_ptr<CPVRChannelGroup> GetChannelGroup();

    /*!
     * @brief Set a new channel group, start listening to this group, optionally update window content.
     * @param group The new group.
     * @param bUpdate if true, window content will be updated.
     */
    void SetChannelGroup(std::shared_ptr<CPVRChannelGroup> &&group, bool bUpdate = true);

    virtual void UpdateSelectedItemPath();

    CCriticalSection m_critSection;
    std::string m_channelGroupPath;
    bool m_bRadio;
    std::atomic_bool m_bUpdating = {false};

  private:
    /*!
     * @brief Show or update the progress dialog.
     * @param strText The current status.
     * @param iProgress The current progress in %.
     */
    void ShowProgressDialog(const std::string& strText, int iProgress);

    /*!
     * @brief Hide the progress dialog if it's visible.
     */
    void HideProgressDialog();

    std::unique_ptr<CGUIPVRChannelGroupsSelector> m_channelGroupsSelector;
    std::shared_ptr<CPVRChannelGroup> m_channelGroup;
    XbmcThreads::EndTime<> m_refreshTimeout;
    CGUIDialogProgressBarHandle* m_progressHandle; /*!< progress dialog that is displayed while the pvr manager is loading */
  };
}