summaryrefslogtreecommitdiff
path: root/coreengine/viewdisplaychannel.c
blob: a6ae3d56e358eb533e151ff4decf3b7a2dac655d (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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include "viewdisplaychannel.h"
#include "../config.h"

/************************************************************************************
* cViewChannel
************************************************************************************/

cViewChannel::cViewChannel(void) {
    veCustomTokens = NULL;
    ClearVariables();
    viewId = eViewType::DisplayChannel;
    viewName = strdup("displaychannel");
    numViewElements = (int)eVeDisplayChannel::count;
    viewElements = new cViewElement*[numViewElements];
    for (int i=0; i < numViewElements; i++) {
        viewElements[i] = NULL;
    }
    SetViewElements();
    veMessage = NULL;
    veChannelInfo = NULL;
    veChannelGroup = NULL;
    veEpgInfo = NULL;
    veProgressBar = NULL;
    veStatusInfo = NULL;
    veScraperContent = NULL;
    veEcmInfo = NULL;
}

cViewChannel::~cViewChannel() {
}

void cViewChannel::SetViewElements(void) {
    viewElementNames.insert(pair<string, int>("background", (int)eVeDisplayChannel::background));
    viewElementNames.insert(pair<string, int>("channelgroup", (int)eVeDisplayChannel::channelgroup));
    viewElementNames.insert(pair<string, int>("channelinfo", (int)eVeDisplayChannel::channelinfo));
    viewElementNames.insert(pair<string, int>("epginfo", (int)eVeDisplayChannel::epginfo));
    viewElementNames.insert(pair<string, int>("progressbar", (int)eVeDisplayChannel::progressbar));
    viewElementNames.insert(pair<string, int>("statusinfo", (int)eVeDisplayChannel::statusinfo));
    viewElementNames.insert(pair<string, int>("audioinfo", (int)eVeDisplayChannel::audioinfo));
    viewElementNames.insert(pair<string, int>("ecminfo", (int)eVeDisplayChannel::ecminfo));
    viewElementNames.insert(pair<string, int>("screenresolution", (int)eVeDisplayChannel::screenresolution));
    viewElementNames.insert(pair<string, int>("signalquality", (int)eVeDisplayChannel::signalquality));
    viewElementNames.insert(pair<string, int>("devices", (int)eVeDisplayChannel::devices));
    viewElementNames.insert(pair<string, int>("currentweather", (int)eVeDisplayChannel::currentweather));
    viewElementNames.insert(pair<string, int>("scrapercontent", (int)eVeDisplayChannel::scrapercontent));
    viewElementNames.insert(pair<string, int>("datetime", (int)eVeDisplayChannel::datetime));
    viewElementNames.insert(pair<string, int>("time", (int)eVeDisplayChannel::time));
    viewElementNames.insert(pair<string, int>("message", (int)eVeDisplayChannel::message));
    viewElementNames.insert(pair<string, int>("customtokens", (int)eVeDisplayChannel::customtokens));
}

void cViewChannel::SetViewElementObjects(void) {
    for (int i = 0; i < numViewElements; i++) {
        if (!viewElements[i])
            continue;
        if (dynamic_cast<cVeMessage*>(viewElements[i])) 
        {
            veMessage = dynamic_cast<cVeMessage*>(viewElements[i]);
        }
        else if (dynamic_cast<cVeDcChannelInfo*>(viewElements[i])) {

            veChannelInfo = dynamic_cast<cVeDcChannelInfo*>(viewElements[i]);
        }
        else if (dynamic_cast<cVeDcChannelGroup*>(viewElements[i])) 
        {
            veChannelGroup = dynamic_cast<cVeDcChannelGroup*>(viewElements[i]);
        }
        else if (dynamic_cast<cVeDcEpgInfo*>(viewElements[i])) 
        {
            veEpgInfo = dynamic_cast<cVeDcEpgInfo*>(viewElements[i]);
        }
        else if (dynamic_cast<cVeDcProgressBar*>(viewElements[i])) 
        {
            veProgressBar = dynamic_cast<cVeDcProgressBar*>(viewElements[i]);
        }
        else if (dynamic_cast<cVeDcStatusInfo*>(viewElements[i])) 
        {
            veStatusInfo = dynamic_cast<cVeDcStatusInfo*>(viewElements[i]);
        }
        else if (dynamic_cast<cVeDcScraperContent*>(viewElements[i])) 
        {
            veScraperContent = dynamic_cast<cVeDcScraperContent*>(viewElements[i]);
        }
        else if (dynamic_cast<cVeDcEcmInfo*>(viewElements[i])) 
        {
            veEcmInfo = dynamic_cast<cVeDcEcmInfo*>(viewElements[i]);
        }
        else if (dynamic_cast<cVeCustomTokens*>(viewElements[i])) 
        {
            veCustomTokens = dynamic_cast<cVeCustomTokens*>(viewElements[i]);
        }
        else if (dynamic_cast<cVeDevices*>(viewElements[i])) 
        {
            viewElements[i]->SetDetached();
        }
    }
}

void cViewChannel::ClearVariables(void) {
    cView::ClearVariables();
    channelChange = false;
    displayChannelGroups = false;
    if (veCustomTokens)
        veCustomTokens->Reset();
}

void cViewChannel::SetChannel(const cChannel *channel, int number) {
    channelChange = true;
    bool wasChannelGroups = displayChannelGroups;
    displayChannelGroups = false;

    if (veChannelInfo) {
        veChannelInfo->Set(channel, number);
    }

    if (channel) {
        if (!channel->GroupSep()) {
            if (wasChannelGroups)
                Clear((int)eVeDisplayChannel::channelgroup);
            if (veStatusInfo)
                veStatusInfo->Set(channel);
            if (veEcmInfo)
                veEcmInfo->Set(channel);
        } else {
            displayChannelGroups = true;
            Clear((int)eVeDisplayChannel::channelinfo, true);
            Clear((int)eVeDisplayChannel::epginfo, true);
            Clear((int)eVeDisplayChannel::statusinfo, true);
            Clear((int)eVeDisplayChannel::progressbar, true);
            Clear((int)eVeDisplayChannel::screenresolution, true);
            Clear((int)eVeDisplayChannel::signalquality, true);
            Clear((int)eVeDisplayChannel::audioinfo, true);
            Clear((int)eVeDisplayChannel::ecminfo, true);
            Clear((int)eVeDisplayChannel::devices, true);
            Clear((int)eVeDisplayChannel::customtokens, true);
            if (veChannelGroup)
                veChannelGroup->Set(channel);
        }
    }
}

void cViewChannel::SetEvents(const cEvent *present, const cEvent *following) {
    Clear((int)eVeDisplayChannel::epginfo);
    Clear((int)eVeDisplayChannel::progressbar);
    Clear((int)eVeDisplayChannel::scrapercontent);
    if (veProgressBar)
        veProgressBar->Set(present);

    if (!present && !following)
        return;
    
    if (veEpgInfo)
        veEpgInfo->Set(present, following);

    if (veScraperContent)
        veScraperContent->Set(present);
}

void cViewChannel::SetMessage(eMessageType type, const char *text) {
    if (veMessage) {
        if (text)
            veMessage->Set(type, text);
        else
            veMessage->Clear();
    }
}

void cViewChannel::Flush(void) {
    if (init) {
        sdOsd.LockFlush();
        Render((int)eVeDisplayChannel::background);
        Render((int)eVeDisplayChannel::currentweather);
    }
    
    if (!displayChannelGroups) {
        //normal display
        Render((int)eVeDisplayChannel::channelinfo);
        Render((int)eVeDisplayChannel::epginfo);
        Render((int)eVeDisplayChannel::statusinfo);
        Render((int)eVeDisplayChannel::scrapercontent);
        Render((int)eVeDisplayChannel::progressbar, channelChange);
        Render((int)eVeDisplayChannel::screenresolution);
        Render((int)eVeDisplayChannel::signalquality);
        Render((int)eVeDisplayChannel::audioinfo);
        Render((int)eVeDisplayChannel::ecminfo);
        Render((int)eVeDisplayChannel::devices);
        Render((int)eVeDisplayChannel::customtokens);
        Render((int)eVeDisplayChannel::message);
    } else {
        //channelgroup display
        Render((int)eVeDisplayChannel::channelgroup);
    }
    Render((int)eVeDisplayChannel::datetime);
    Render((int)eVeDisplayChannel::time);
    channelChange = false;
    cView::Flush();
}