source: titan/titan/channellist.h @ 43326

Last change on this file since 43326 was 41783, checked in by obi, 6 years ago

add dm920 / wetek step 2

File size: 56.2 KB
Line 
1#ifndef CHANNELLIST_H
2#define CHANNELLIST_H
3
4int selectchannel(struct skin* listbox, int sid, uint64_t tid)
5{
6        struct skin* node = listbox;
7        struct channel* chnode = NULL;
8        listbox->aktpage = -1;
9        listbox->aktline = 1;
10
11        listbox->select = NULL;
12
13        if(status.servicetype == 0)
14        {
15                if(sid != 0 && tid != 0)
16                        chnode = getchannel(sid, tid);
17                else
18                        chnode = getchannel(getconfigint("serviceid", NULL), getconfigllu("transponderid", NULL));
19        }
20        else
21        {
22                if(sid != 0 && tid != 0)
23                        chnode = getchannel(sid, tid);
24                else
25                        chnode = getchannel(getconfigint("rserviceid", NULL), getconfigllu("rtransponderid", NULL));
26        }
27
28        if(chnode == NULL)
29        {
30                debug(1000, "out -> NULL detect");
31                return 1;
32        }
33
34        while(node != NULL)
35        {
36                if(node->deaktivcol > -1 || node->hidden == YES)
37                {
38                        node = node->next;
39                        continue;
40                }
41                if(chnode == (struct channel*) node->handle)
42                        return 0;
43                if(node->del == 1) listbox->aktline++;
44                node = node->next;
45        }
46        listbox->aktline = 1;
47        return 1;
48}
49
50void changechannelepg(struct channel* chnode, struct skin* node)
51{
52        struct epg* epgnode = NULL;
53        char* tmpstr = NULL;
54
55        epgnode = getepgakt(chnode);
56        if(epgnode != NULL)
57        {
58                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
59                tmpstr = ostrcat(tmpstr, epgnode->title, 1, 0);
60                changetext2(node, tmpstr);
61                free(tmpstr); tmpstr = NULL;
62        }
63}
64
65void showallchannel(struct skin* channellist, struct skin* listbox, struct skin* channeltimeline, int mode)
66{
67        struct skin* chnode = NULL;
68        struct channel* tmpchannel = channel;
69        long long deaktivcol = convertcol("deaktivcol");
70
71        while(tmpchannel != NULL)
72        {
73                if(tmpchannel->servicetype == status.servicetype)
74                {
75                        chnode = addlistbox(channellist, listbox, chnode, 1);
76                        if(chnode != NULL)
77                        {
78                                changechannelepg(tmpchannel, chnode);
79                                if(checkbouquet(tmpchannel) == 1)
80                                        chnode->fontcol = convertcol("favcol");
81                                if(tmpchannel->protect > 0)
82                                        chnode->fontcol = convertcol("protectcol");
83                                changetext(chnode, tmpchannel->name);
84                                chnode->handle = (char*) tmpchannel;
85                                chnode->handle1 = (char*) tmpchannel;
86                                if(mode == 0 && channelnottunable(tmpchannel) == 1)
87                                {
88                                        if(status.channellistview == 0)
89                                                chnode->hidden = YES;
90                                        else
91                                                chnode->deaktivcol = deaktivcol;
92                                }
93                                if(status.showchanneltimeline == 1 && channeltimeline != status.skinerr)
94                                {
95                                        chnode->textposx = channeltimeline->width + 10;
96                                        struct skin* chnode1 = NULL;
97                                        chnode1 = addlistbox(channellist, chnode, chnode, 1);
98                                        if(chnode1 != NULL)
99                                        {
100                                                chnode1->progresscol = channeltimeline->progresscol;
101                                                chnode1->skinfunc = convertfunc("getepgchanneltimeline", &chnode1->funcrettype);
102                                                chnode1->handle = (char*) tmpchannel;
103                                                chnode1->posy = channeltimeline->posy;
104                                                chnode1->width = channeltimeline->width;
105                                                chnode1->height = channeltimeline->height;
106                                                chnode1->bordersize = channeltimeline->bordersize;
107                                                chnode1->bordercol = channeltimeline->bordercol;
108                                                chnode1->prozwidth = 0;
109                                        }
110                                }
111                        }
112                }
113                tmpchannel = tmpchannel->next;
114        }
115}
116
117int checkbouquet(struct channel* tmpchannel)
118{
119        struct mainbouquet* mainbouquetnode = mainbouquet;
120        struct bouquet* bouquetnode = NULL;
121        while(mainbouquetnode != NULL)
122        {
123                bouquetnode = mainbouquetnode->bouquet;
124                while(bouquetnode != NULL)
125                {
126                        if(bouquetnode->channel != NULL && bouquetnode->channel->serviceid == tmpchannel->serviceid && bouquetnode->channel->transponderid == tmpchannel->transponderid)
127                                return 1;
128
129                        bouquetnode = bouquetnode->next;
130                }
131                mainbouquetnode = mainbouquetnode->next;
132        }
133        return 0;       
134}
135
136void showbouquetchannel(struct skin* channellist, struct skin* listbox, struct skin* channeltimeline, struct bouquet* firstbouquet, struct mainbouquet* mbouquet, int mode)
137{
138        struct skin* chnode = NULL;
139        struct bouquet* tmpbouquet = firstbouquet;
140        char* tmpstr = NULL, *tmpnr = NULL;
141        long long deaktivcol = convertcol("deaktivcol");
142
143        if(mbouquet != NULL && ostrcmp(mbouquet->filename, "0") == 0)
144        {
145                mostzaptobouquet(mbouquet);
146                tmpbouquet = mbouquet->bouquet;
147        }
148
149        while(tmpbouquet != NULL)
150        {
151                if(tmpbouquet->channel != NULL)
152                {
153                        if(tmpbouquet->channel->servicetype == status.servicetype)
154                        {
155                                chnode = addlistbox(channellist, listbox, chnode, 1);
156                                if(chnode != NULL)
157                                {
158                                        tmpnr = oitoa(tmpbouquet->nr);
159                                        changeret(chnode, tmpnr);
160                                        tmpstr = ostrcat(tmpstr, tmpnr, 1, 1);
161                                        tmpstr = ostrcat(tmpstr, "  ", 1, 0);
162                                        tmpstr = ostrcat(tmpstr, tmpbouquet->channel->name, 1, 0);
163                                        changetext(chnode, tmpstr);
164                                        free(tmpstr); tmpstr = NULL;
165                                        if(tmpbouquet->channel->protect > 0)
166                                                chnode->fontcol = convertcol("protectcol");
167
168                                        changechannelepg(tmpbouquet->channel, chnode);
169                                        chnode->handle = (char*) tmpbouquet->channel;
170                                        chnode->handle1 = (char*) tmpbouquet;
171                                        if(mode == 0 && channelnottunable(tmpbouquet->channel) == 1)
172                                        {
173                                                if(status.channellistview == 0)
174                                                        chnode->hidden = YES;
175                                                else
176                                                        chnode->deaktivcol = deaktivcol;
177                                        }
178                                        if(status.showchanneltimeline == 1 && channeltimeline != status.skinerr)
179                                        {
180                                                chnode->textposx = channeltimeline->width + 10;
181                                                struct skin* chnode1 = NULL;
182                                                chnode1 = addlistbox(channellist, chnode, chnode, 1);
183                                                if(chnode1 != NULL)
184                                                {
185                                                        chnode1->progresscol = channeltimeline->progresscol;
186                                                        chnode1->skinfunc = convertfunc("getepgchanneltimeline", &chnode1->funcrettype);
187                                                        chnode1->handle = (char*)tmpbouquet->channel;
188                                                        chnode1->posy = channeltimeline->posy;
189                                                        chnode1->width = channeltimeline->width;
190                                                        chnode1->height = channeltimeline->height;
191                                                        chnode1->bordersize = channeltimeline->bordersize;
192                                                        chnode1->bordercol = channeltimeline->bordercol;
193                                                        chnode1->prozwidth = 0;
194                                                }
195                                        }
196                                }
197                        }
198                }
199                tmpbouquet = tmpbouquet->next;
200        }
201}
202
203void showproviderchannel(struct skin* channellist, struct skin* listbox, struct skin* channeltimeline, struct provider* providernode, int mode)
204{
205        struct skin* chnode = NULL;
206        struct channel* tmpchannel = channel;
207        long long deaktivcol = convertcol("deaktivcol");
208
209        while(tmpchannel != NULL)
210        {
211                if(tmpchannel->provider == providernode)
212                {
213                        if(tmpchannel->servicetype == status.servicetype)
214                        {
215                                chnode = addlistbox(channellist, listbox, chnode, 1);
216                                if(chnode != NULL)
217                                {
218                                        changechannelepg(tmpchannel, chnode);
219                                        changetext(chnode, tmpchannel->name);
220                                        if(tmpchannel->protect > 0)
221                                                chnode->fontcol = convertcol("protectcol");
222                                        chnode->handle = (char*) tmpchannel;
223                                        chnode->handle1 = (char*) tmpchannel;
224                                        if(mode == 0 && channelnottunable(tmpchannel) == 1)
225                                        {
226                                                if(status.channellistview == 0)
227                                                        chnode->hidden = YES;
228                                                else
229                                                        chnode->deaktivcol = deaktivcol;
230                                        }
231                                        if(status.showchanneltimeline == 1 && channeltimeline != status.skinerr)
232                                        {
233                                                chnode->textposx = channeltimeline->width + 10;
234                                                struct skin* chnode1 = NULL;
235                                                if(chnode1 != NULL)
236                                                {
237                                                        chnode1 = addlistbox(channellist, chnode, chnode, 1);
238                                                        chnode1->progresscol = channeltimeline->progresscol;
239                                                        chnode1->skinfunc = convertfunc("getepgchanneltimeline", &chnode1->funcrettype);
240                                                        chnode1->handle = (char*) tmpchannel;
241                                                        chnode1->posy = channeltimeline->posy;
242                                                        chnode1->width = channeltimeline->width;
243                                                        chnode1->height = channeltimeline->height;
244                                                        chnode1->bordersize = channeltimeline->bordersize;
245                                                        chnode1->bordercol = channeltimeline->bordercol;
246                                                        chnode1->prozwidth = 0;
247                                                }
248                                        }
249                                }
250                        }
251                }
252                tmpchannel = tmpchannel->next;
253        }
254}
255
256int checkprovider(struct provider* providernode)
257{
258        struct channel* tmpchannel = channel;
259
260        while(tmpchannel != NULL)
261        {
262                if(tmpchannel->provider == providernode)
263                {
264                        if(tmpchannel->servicetype == status.servicetype && channelnottunable(tmpchannel) != 1)
265                                return 1;
266                }
267                tmpchannel = tmpchannel->next;
268        }
269        return 0;
270}
271
272void showprovider(struct skin* channellist, struct skin* listbox)
273{
274        struct provider *node = provider;
275        struct skin* providernode = NULL;
276
277        while(node != NULL)
278        {
279                if(checkprovider(node) == 1)
280                {
281                        node->flag = 1;
282                        providernode = addlistbox(channellist, listbox, providernode, 2);
283                        if(providernode != NULL)
284                        {
285                                changetext(providernode, node->name);
286                                changename(providernode, node->name);
287                                providernode->handle = (char*) node;
288                                providernode->handle1 = (char*) node;
289                        }
290                }
291                else
292                        node->flag = 0;
293
294                node = node->next;
295        }
296}
297
298void showsatchannel(struct skin* channellist, struct skin* listbox, struct skin* channeltimeline, struct sat* satnode, int mode)
299{
300        struct skin* chnode = NULL;
301        struct channel* tmpchannel = channel;
302        long long deaktivcol = convertcol("deaktivcol");
303
304        if(satnode == NULL)
305                return;
306
307        while(tmpchannel != NULL)
308        {
309                if(tmpchannel->transponder != NULL && tmpchannel->transponder->orbitalpos == satnode->orbitalpos)
310                {
311                        if(tmpchannel->servicetype == status.servicetype)
312                        {
313                                chnode = addlistbox(channellist, listbox, chnode, 1);
314                                if(chnode != NULL)
315                                {
316                                        changechannelepg(tmpchannel, chnode);
317                                        changetext(chnode, tmpchannel->name);
318                                        if(tmpchannel->protect > 0)
319                                                chnode->fontcol = convertcol("protectcol");
320                                        chnode->handle = (char*) tmpchannel;
321                                        chnode->handle1 = (char*) tmpchannel;
322                                        if(mode == 0 && channelnottunable(tmpchannel) == 1)
323                                        {
324                                                if(status.channellistview == 0)
325                                                        chnode->hidden = YES;
326                                                else
327                                                        chnode->deaktivcol = deaktivcol;
328                                        }
329                                        if(status.showchanneltimeline == 1 && channeltimeline != status.skinerr)
330                                        {
331                                                chnode->textposx = channeltimeline->width + 10;
332                                                struct skin* chnode1 = NULL;
333                                                if(chnode1 != NULL)
334                                                {
335                                                        chnode1 = addlistbox(channellist, chnode, chnode, 1);
336                                                        chnode1->progresscol = channeltimeline->progresscol;
337                                                        chnode1->skinfunc = convertfunc("getepgchanneltimeline", &chnode1->funcrettype);
338                                                        chnode1->handle = (char*) tmpchannel;
339                                                        chnode1->posy = channeltimeline->posy;
340                                                        chnode1->width = channeltimeline->width;
341                                                        chnode1->height = channeltimeline->height;
342                                                        chnode1->bordersize = channeltimeline->bordersize;
343                                                        chnode1->bordercol = channeltimeline->bordercol;
344                                                        chnode1->prozwidth = 0;
345                                                }
346                                        }
347                                }
348                        }
349                }
350                tmpchannel = tmpchannel->next;
351        }
352}
353
354void showsat(struct skin* channellist, struct skin* listbox)
355{
356        int i = 0, treffer = 0;
357        struct sat *node = sat;
358        struct dvbdev *dvbnode = NULL;
359        struct skin* satnode = NULL;
360        char* tmpstr = NULL, *tmpnr = NULL;
361
362        while(node != NULL)
363        {
364                treffer = 0;
365                dvbnode = dvbdev;
366                while(dvbnode != NULL)
367                {
368                        if(dvbnode->type == FRONTENDDEV && dvbnode->feshortname != NULL)
369                        {
370                                tmpstr = ostrcat(dvbnode->feshortname, "_sat", 0, 0);
371                                for(i = 1; i <= getmaxsat(dvbnode->feshortname); i++)
372                                {
373                                        tmpnr = oitoa(i);
374                                        if(getconfigint(tmpstr, tmpnr) == node->orbitalpos)
375                                        {
376                                                free(tmpnr); tmpnr = NULL;
377                                                treffer = 1;
378                                                break;
379                                        }
380                                        free(tmpnr); tmpnr = NULL;
381                                }
382                                free(tmpstr); tmpstr = NULL;
383                        }
384                        if(treffer == 1) break;
385                        dvbnode = dvbnode->next;
386                }
387
388                if(treffer == 0)
389                {
390                        node = node->next;
391                        continue;
392                }
393
394                satnode = addlistbox(channellist, listbox, satnode, 2);
395                if(satnode != NULL)
396                {
397                        changetext(satnode, node->name);
398                        changename(satnode, node->name);
399                        satnode->handle = (char*) node;
400                        satnode->handle1 = (char*) node;
401                }
402                node = node->next;
403        }
404}
405
406void showazchannel(struct skin* channellist, struct skin* listbox, struct skin* channeltimeline, int character, int mode)
407{
408        struct skin* chnode = NULL;
409        struct channel* tmpchannel = channel;
410        long long deaktivcol = convertcol("deaktivcol");
411
412        while(tmpchannel != NULL)
413        {
414                if(tmpchannel->name != NULL && (tmpchannel->name[0] == character || tmpchannel->name[0] == character + 32))
415                {
416                        if(tmpchannel->servicetype == status.servicetype)
417                        {
418                                chnode = addlistbox(channellist, listbox, chnode, 1);
419                                if(chnode != NULL)
420                                {
421                                        changechannelepg(tmpchannel, chnode);
422                                        changetext(chnode, tmpchannel->name);
423                                        if(tmpchannel->protect > 0)
424                                                chnode->fontcol = convertcol("protectcol");
425                                        chnode->handle = (char*) tmpchannel;
426                                        chnode->handle1 = (char*) tmpchannel;
427                                        if(mode == 0 && channelnottunable(tmpchannel) == 1)
428                                        {
429                                                if(status.channellistview == 0)
430                                                        chnode->hidden = YES;
431                                                else
432                                                        chnode->deaktivcol = deaktivcol;
433                                        }
434                                        if(status.showchanneltimeline == 1 && channeltimeline != status.skinerr)
435                                        {
436                                                chnode->textposx = channeltimeline->width + 10;
437                                                struct skin* chnode1 = NULL;
438                                                if(chnode1 != NULL)
439                                                {
440                                                        chnode1 = addlistbox(channellist, chnode, chnode, 1);
441                                                        chnode1->progresscol = channeltimeline->progresscol;
442                                                        chnode1->skinfunc = convertfunc("getepgchanneltimeline", &chnode1->funcrettype);
443                                                        chnode1->handle = (char*) tmpchannel;
444                                                        chnode1->posy = channeltimeline->posy;
445                                                        chnode1->width = channeltimeline->width;
446                                                        chnode1->height = channeltimeline->height;
447                                                        chnode1->bordersize = channeltimeline->bordersize;
448                                                        chnode1->bordercol = channeltimeline->bordercol;
449                                                        chnode1->prozwidth = 0;
450                                                }
451                                        }
452                                }
453                        }
454                }
455                tmpchannel = tmpchannel->next;
456        }
457}
458
459void showaz(struct skin* channellist, struct skin* listbox)
460{
461        struct skin* node = NULL;
462        int i;
463        char* tmpstr = NULL;
464
465        tmpstr = malloc(2);
466        if(tmpstr == NULL)
467        {
468                err("no memory");
469                return;
470        }
471
472        for(i = 65; i < 91; i++)
473        {
474                node = addlistbox(channellist, listbox, node, 2);
475                if(node != NULL)
476                {
477                        snprintf(tmpstr, 2, "%c", i);
478                        changetext(node, tmpstr);
479                        changename(node, tmpstr);
480                        node->handle = (void*) i;
481                }
482        }
483
484        free(tmpstr);
485}
486
487void showmainbouquet(struct skin* channellist, struct skin* listbox)
488{
489        struct mainbouquet *node = mainbouquet;
490        struct skin* bouquetnode = NULL;
491
492        while(node != NULL)
493        {
494                if(node->type == status.servicetype)
495                {
496                        bouquetnode = addlistbox(channellist, listbox, bouquetnode, 2);
497                        if(bouquetnode != NULL)
498                        {
499                                changetext(bouquetnode, node->name);
500                                changename(bouquetnode, node->name);
501                                bouquetnode->handle = (char*) node->bouquet;
502                                bouquetnode->handle1 = (char*) node;
503                        }
504                }
505                node = node->next;
506        }
507}
508
509void drawchannellist(struct skin* channellist, int list, struct skin* listbox)
510{
511        status.markedchannel = NULL;
512        if(list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL)
513        {
514                if(listbox->select == NULL)
515                        drawscreen(channellist, 2, 0);
516
517                if(listbox->select != NULL)
518                        status.markedchannel = (struct channel*)listbox->select->handle;
519        }
520        drawscreen(channellist, 0, 0);
521}
522
523void recalclist(int list, void* aktlist, int listmode, struct skin* channellist, struct skin* listbox, struct skin* channeltimeline)
524{
525        if(list == ALLCHANNEL)
526                showallchannel(channellist, listbox, channeltimeline, listmode);
527        if(list == SATCHANNEL)
528                showsatchannel(channellist, listbox, channeltimeline, (struct sat*)aktlist, listmode);
529        if(list == PROVIDERCHANNEL)
530                showproviderchannel(channellist, listbox, channeltimeline, (struct provider*)aktlist, listmode);
531        if(list == AZCHANNEL)
532                showazchannel(channellist, listbox, channeltimeline, (int)aktlist, listmode);
533        if(list == BOUQUETCHANNEL)
534                showbouquetchannel(channellist, listbox, channeltimeline, ((struct mainbouquet*)aktlist)->bouquet, (struct mainbouquet*)aktlist, listmode);
535        if(list == MAINBOUQUETLIST)
536                showmainbouquet(channellist, listbox);
537        if(list == SATLIST)
538                showsat(channellist, listbox);
539        if(list == PROVIDERLIST)
540                showprovider(channellist, listbox);
541}
542
543void changebutton(int listmode, struct skin* b1, struct skin* b2, struct skin* b3, struct skin* b4, struct skin* b5, struct skin* b6, struct skin* b7, struct skin* b8, struct skin* b9, struct skin* b10, struct skin* b11, struct skin* b12, struct skin* b13, struct skin* b14, struct skin* b15, int flag)
544{
545        if(listmode == NOMODE)
546        {
547                b1->hidden = NO;
548                b2->hidden = NO;
549                b3->hidden = NO;
550                b4->hidden = NO;
551                b5->hidden = NO;
552                b6->hidden = NO;
553                b7->hidden = NO;
554                b8->hidden = NO;
555                b9->hidden = NO;
556                b10->hidden = NO;
557                b11->hidden = YES;
558                b12->hidden = YES;
559                b13->hidden = YES;
560                b14->hidden = YES;
561                b15->hidden = NO;
562        }
563        else if(listmode == MVMODE)
564        {
565                b1->hidden = NO;
566                b2->hidden = NO;
567                b3->hidden = YES;
568                b4->hidden = YES;
569                b5->hidden = YES;
570                b6->hidden = YES;
571                b7->hidden = YES;
572                b8->hidden = YES;
573                b9->hidden = YES;
574                b10->hidden = YES;
575                b11->hidden = NO;
576                b12->hidden = NO;
577                b13->hidden = YES;
578                b14->hidden = NO;
579                b15->hidden = YES;
580        }
581        else
582        {
583                b1->hidden = NO;
584                b2->hidden = NO;
585                b3->hidden = YES;
586                b4->hidden = YES;
587                b5->hidden = YES;
588                b6->hidden = YES;
589                b7->hidden = YES;
590                b8->hidden = YES;
591                b9->hidden = YES;
592                b10->hidden = YES;
593                b11->hidden = NO;
594                b12->hidden = NO;
595                b13->hidden = NO;
596                b14->hidden = YES;
597                b15->hidden = YES;
598        }
599       
600        if(flag == 1)
601        {
602                b8->hidden = YES;
603                b9->hidden = YES;
604                b10->hidden = YES;
605                b11->hidden = YES;
606                b15->hidden = YES;     
607        }
608}
609
610void changechanneltitle(struct skin* channellist, struct skin* listbox, int listmode, char** oldtitle, long* oldfontcol, long* oldbgcol)
611{
612        struct skin* titletext = getscreennode(channellist, "titletext");
613        char* tmpstr = NULL;
614
615        if(*oldtitle == NULL)
616                *oldtitle = ostrcat(channellist->title, NULL, 0, 0);
617        if(*oldtitle == NULL)
618                *oldtitle = ostrcat(titletext->text, NULL, 0, 0);
619
620        if(listmode == MVMODE)
621        {
622                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
623                tmpstr = ostrcat(tmpstr, _("Move mode"), 1, 0);
624                listbox->bgcol = convertcol("mvmode_bgcol");
625                listbox->fontcol = convertcol("mvmode_fontcol");
626                changetitle(channellist, tmpstr);
627        }
628        else if(listmode == RMMODE)
629        {
630                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
631                tmpstr = ostrcat(tmpstr, _("Remove mode"), 1, 0);
632                listbox->bgcol = convertcol("rmmode_bgcol");
633                listbox->fontcol = convertcol("rmmode_fontcol");
634                changetitle(channellist, tmpstr);
635        }
636        else if(listmode == CPMODE)
637        {
638                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
639                tmpstr = ostrcat(tmpstr, _("Copy mode"), 1, 0);
640                listbox->bgcol = convertcol("cpmode_bgcol");
641                listbox->fontcol = convertcol("cpmode_fontcol");
642                changetitle(channellist, tmpstr);
643        }
644        else if(listmode == PROTECTMODE)
645        {
646                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
647                tmpstr = ostrcat(tmpstr, _("Protect mode"), 1, 0);
648                listbox->bgcol = convertcol("protectmode_bgcol");
649                listbox->fontcol = convertcol("protectmode_fontcol");
650                changetitle(channellist, tmpstr);
651        }
652        else if(listmode == EDITMODE)
653        {
654                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
655                tmpstr = ostrcat(tmpstr, _("Edit mode"), 1, 0);
656                listbox->bgcol = convertcol("editmode_bgcol");
657                listbox->fontcol = convertcol("editmode_fontcol");
658                changetitle(channellist, tmpstr);
659        }
660        else
661        {       
662                changetitle(channellist, *oldtitle);
663                *oldtitle = NULL;
664                listbox->fontcol = *oldfontcol;
665                listbox->bgcol = *oldbgcol;
666        }
667}
668
669void addscreenrcchannellist(struct skin* channellist, struct skin* listbox)
670{
671        addscreenrc(channellist, listbox);
672
673        //deaktivate for blockmove
674        delrc(getrcconfigint("rcchup", NULL), channellist, listbox);
675        delrc(getrcconfigint("rcchdown", NULL), channellist, listbox);
676}
677
678//flag 1: called from recordtimer screen
679//flag 2: rcfav (open bouquetlist)
680//flag 3: edit modus
681int screenchannellist(struct channel** retchannel, char** retchannellist, int flag)
682{
683        char* channellist_sel = getskinconfig("channellist_selection", NULL);
684        debug(10, "get initial channellist=%s", channellist_sel);
685
686        if(channellist_sel == NULL) {
687                channellist_sel = ostrcat(channellist_sel, "channellist", 1, 0); // fallback to default
688                debug(10, "fallback to default, set channellist=%s", channellist_sel);
689        }
690
691        struct skin* channellist = getscreen(channellist_sel);
692        debug(10, "final channellist=%s", channellist_sel);
693
694//      struct skin* channellist = getscreen("channellist");
695        struct skin* listbox = getscreennode(channellist, "listbox");
696        struct skin* channeltimeline = getscreennode(channellist, "channeltimeline");
697        struct skin* b1 = getscreennode(channellist, "b1");
698        struct skin* b2 = getscreennode(channellist, "b2");
699        struct skin* b3 = getscreennode(channellist, "b3");
700        struct skin* b4 = getscreennode(channellist, "b4");
701        struct skin* b5 = getscreennode(channellist, "b5");
702        struct skin* b6 = getscreennode(channellist, "b6");
703        struct skin* b7 = getscreennode(channellist, "b7");
704        struct skin* b8 = getscreennode(channellist, "b8");
705        struct skin* b9 = getscreennode(channellist, "b9");
706        struct skin* b10 = getscreennode(channellist, "b10");
707        struct skin* b11 = getscreennode(channellist, "b11");
708        struct skin* b12 = getscreennode(channellist, "b12");
709        struct skin* b13 = getscreennode(channellist, "b13");
710        struct skin* b14 = getscreennode(channellist, "b14");
711        struct skin* b15 = getscreennode(channellist, "b15");
712        struct skin* tmpskin;
713        int rcret, ret, listmode, newmodus, list;
714        char* tmpstr = NULL, *tmpstr1 = NULL, *oldtitle = NULL;
715        void* movesel = NULL, *aktlist = NULL;
716        int nochanneltitle = getskinconfigint("nochanneltitle", NULL);
717        int firstdraw = 0;
718        long oldfontcol = 0;
719        long oldbgcol = 0;
720       
721        status.channelswitch = 1;
722
723start:
724        rcret = 0, ret = -1, list = ALLCHANNEL, listmode = NOMODE, newmodus = 0;
725        tmpstr = NULL, tmpstr1 = NULL, movesel = NULL, aktlist = NULL, tmpskin = NULL;
726        if(nochanneltitle == 0)
727        {
728                changetitle(channellist, "");
729        }
730
731        oldbgcol = listbox->bgcol;
732        oldfontcol = listbox->fontcol;
733
734        if(status.servicetype == 0)
735        {
736                tmpstr = getconfig("channellist", NULL);
737                changetext(b8, _("Radio"));
738        }
739        else
740        {
741                tmpstr = getconfig("rchannellist", NULL);
742                changetext(b8, _("TV"));
743        }
744        if(ostrncmp("(BOUQUET)-", tmpstr, 10) == 0 && strlen(tmpstr) > 10)
745        {
746                struct mainbouquet* mainbouquetnode = NULL;
747                mainbouquetnode = getmainbouquet(tmpstr + 10);
748                if(mainbouquetnode != NULL && mainbouquetnode->bouquet != NULL)
749                {
750                        tmpstr1 = ostrcat(tmpstr1, _("Bouquets"), 0, 0);
751                        tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
752                        tmpstr1 = ostrcat(tmpstr1, tmpstr + 10, 1, 0);
753                        if(nochanneltitle == 0)
754                        {
755                                changetitle(channellist, tmpstr1);
756                        }
757                        free(tmpstr1); tmpstr1 = NULL;
758                        list = BOUQUETCHANNEL;
759                        aktlist = (void*)mainbouquetnode;
760                        showbouquetchannel(channellist, listbox, channeltimeline, mainbouquetnode->bouquet, mainbouquetnode, flag);
761                        selectchannel(listbox, 0, 0);
762                }
763        }
764        else if(ostrncmp("(A-Z)-", tmpstr, 6) == 0 && strlen(tmpstr) > 6)
765        {
766                tmpstr1 = ostrcat(tmpstr1, _("Channel"), 0, 0);
767                tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
768                tmpstr1 = ostrcat(tmpstr1, tmpstr + 6, 1, 0);
769                if(nochanneltitle == 0)
770                {
771                        changetitle(channellist, tmpstr1);
772                }
773                free(tmpstr1); tmpstr1 = NULL;
774                list = AZCHANNEL;
775                aktlist = (void*)(int)tmpstr[6];
776                showazchannel(channellist, listbox, channeltimeline, (int)tmpstr[6], flag);
777                selectchannel(listbox, 0, 0);
778        }
779        else if(ostrncmp("(SAT)-", tmpstr, 6) == 0 && strlen(tmpstr) > 6)
780        {
781                tmpstr1 = ostrcat(tmpstr1, _("Satellites"), 0, 0);
782                tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
783                tmpstr1 = ostrcat(tmpstr1, tmpstr + 6, 1, 0);
784                if(nochanneltitle == 0)
785                {
786                        changetitle(channellist, tmpstr1);
787                }
788                free(tmpstr1); tmpstr1 = NULL;
789                struct sat* satnode = getsat(tmpstr + 6);
790                list = SATCHANNEL;
791                aktlist = (void*)satnode;
792                showsatchannel(channellist, listbox, channeltimeline, satnode, flag);
793                selectchannel(listbox, 0, 0);
794        }
795        else if(ostrncmp("(PROVIDER)-", tmpstr, 11) == 0 && strlen(tmpstr) > 6)
796        {
797                tmpstr1 = ostrcat(tmpstr1, _("Provider"), 0, 0);
798                tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
799                tmpstr1 = ostrcat(tmpstr1, tmpstr + 11, 1, 0);
800                if(nochanneltitle == 0)
801                {
802                        changetitle(channellist, tmpstr1);
803                }
804                free(tmpstr1); tmpstr1 = NULL;
805                struct provider* providernode = getproviderbyname(tmpstr + 11);
806                list = PROVIDERCHANNEL;
807                aktlist = (void*)providernode;
808                showproviderchannel(channellist, listbox, channeltimeline, providernode, flag);
809                selectchannel(listbox, 0, 0);
810        }
811        else
812        {
813                if(nochanneltitle == 0)
814                {
815                        changetitle(channellist, _("All Channels"));
816                }
817                list = ALLCHANNEL;
818                showallchannel(channellist, listbox, channeltimeline, flag);
819                selectchannel(listbox, 0, 0);
820        }
821
822        tmpstr = NULL;
823        if(status.screenanim > 0 && firstdraw == 0)
824        {
825                firstdraw = 1;
826                drawscreen(channellist, 0, 4);
827        }
828        else
829                drawscreen(channellist, 2, 0);
830
831        addscreenrcchannellist(channellist, listbox);
832
833        if(flag == 3)
834        {
835                if(listbox->select != NULL)
836                {
837                        resettvpic();
838                        listmode = screenlistedit(list, (struct channel*)listbox->select->handle, aktlist);
839                }
840                if(listmode == NOMODE) goto end;
841                if(nochanneltitle == 0) changechanneltitle(channellist, listbox, listmode, &oldtitle, &oldfontcol, &oldbgcol);
842        }
843        if(flag != 2)
844        {
845                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
846                drawchannellist(channellist, list, listbox);
847        }
848       
849        status.updatevfd = PAUSE;
850       
851        while(1)
852        {
853                if(status.markedchannel != NULL && (checkchipset("BCM7424") == 1 || checkbox("DM900") == 1 || checkbox("DM920") == 1 || checkbox("DM520") == 1 || checkbox("DM525") == 1 || checkbox("DM7020HD") == 1 || checkbox("DM7020HDV2") == 1))
854                        writevfdmenu(status.markedchannel->name);
855                if(flag == 2)
856                {
857                        rcret = getrcconfigint("rcblue", NULL);
858                        flag = 0;
859                }
860                else
861                        rcret = waitrc(channellist, 10000, 2);
862
863                //read epg new
864                if(listbox != NULL && listbox->select != NULL && (list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL))
865                {
866                        tmpskin = listbox->select;
867                        while(tmpskin != NULL)
868                        {
869                                if(tmpskin->pagecount != listbox->aktpage) break;
870                                changechannelepg((struct channel*)tmpskin->handle, tmpskin);
871                                tmpskin = tmpskin->prev;
872                        }
873                        tmpskin = listbox->select;
874                        while(tmpskin != NULL)
875                        {
876                                if(tmpskin->pagecount != listbox->aktpage) break;
877                                changechannelepg((struct channel*)tmpskin->handle, tmpskin);
878                                tmpskin = tmpskin->next;
879                        }
880                }
881
882                if(rcret == getrcconfigint("rcup", NULL) || rcret == getrcconfigint("rcdown", NULL) || rcret == getrcconfigint("rcleft", NULL) || rcret == getrcconfigint("rcright", NULL))
883                {
884                        if(listmode != MVMODE || (listmode == MVMODE && status.markmodus == 0))
885                        {
886                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
887                                drawchannellist(channellist, list, listbox);
888                        }
889                }
890
891                if(rcret == RCTIMEOUT)
892                {
893                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
894                        drawscreen(channellist, 0, 0);
895                }
896
897                if(rcret == getrcconfigint("rcexit", NULL)) break;
898
899                if((flag == 0 || flag == 3) && listmode > NOMODE)
900                {
901
902                        if(rcret == getrcconfigint("rcmenu", NULL))
903                        {
904                                int sid = 0;
905                                uint64_t tid = 0;
906                                if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && listbox->select != NULL && listbox->select->handle != NULL)
907                                {
908                                        sid = ((struct channel*)listbox->select->handle)->serviceid;
909                                        tid = ((struct channel*)listbox->select->handle)->transponderid;
910                                }
911
912                                status.markmodus = 0;
913                                movesel = NULL;
914                                clearscreen(channellist);
915                                resettvpic();
916
917                                listmode = screenlistedit(list, NULL, aktlist);
918                                if(listmode == MVMODE)
919                                {
920                                        delrc(getrcconfigint("rcright", NULL), channellist, listbox);
921                                        delrc(getrcconfigint("rcleft", NULL), channellist, listbox);
922                                }
923                                else
924                                        addscreenrcchannellist(channellist, listbox);
925                                if(listmode == NOMODE && flag == 3) flag = 0;
926
927                                if(nochanneltitle == 0) changechanneltitle(channellist, listbox, listmode, &oldtitle, &oldfontcol, &oldbgcol);
928
929                                delmarkedscreennodes(channellist, 1);
930                                delmarkedscreennodes(channellist, 2);
931                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
932                                selectchannel(listbox, sid, tid);
933                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
934                                drawscreen(channellist, 0, 0);
935                        }
936                        if(listmode == PROTECTMODE && listbox->select != NULL && listbox->select->handle != NULL && rcret == getrcconfigint("rcok", NULL))
937                        {
938                                if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && listbox->select->handle != NULL)
939                                {
940                                        if(((struct channel*)listbox->select->handle)->protect == 0)
941                                                ((struct channel*)listbox->select->handle)->protect = 1;
942                                        else
943                                        {
944                                                if(screenpincheck(1, NULL) == 0)
945                                                        ((struct channel*)listbox->select->handle)->protect = 0;
946                                        }
947                                        status.writechannel = 1;
948                                }
949                                delmarkedscreennodes(channellist, 1);
950                                delmarkedscreennodes(channellist, 2);
951                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
952                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
953                                drawscreen(channellist, 0, 0);
954                        }
955                        if(listmode == CPMODE && listbox->select != NULL && listbox->select->handle != NULL && rcret == getrcconfigint("rcok", NULL))
956                        {
957                                if(list == PROVIDERLIST)
958                                {
959                                        if(provider2bouquet(((struct provider*)listbox->select->handle1)->providerid, 0) == 0)
960                                                textbox(_("Message"), _("Copy providerlist successfull"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
961                                        else
962                                                textbox(_("Message"), _("Copy providerlist not ok"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
963                                }
964                                else if(list == SATLIST)
965                                {
966                                        if(sat2bouquet(((struct sat*)listbox->select->handle1)->orbitalpos, 0) == 0)
967                                                textbox(_("Message"), _("Copy satlist successfull"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
968                                        else
969                                                textbox(_("Message"), _("Copy satlist not ok"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
970                                }
971                                else
972                                {
973                                        struct mainbouquet* mbouquet = screenmainbouquet();
974                                        if(mbouquet != NULL && getbouquetbychannel(mbouquet->bouquet, ((struct channel*)listbox->select->handle)->serviceid, ((struct channel*)listbox->select->handle)->transponderid) == NULL)
975                                        {
976                                                tmpstr1 = oitoa(((struct channel*)listbox->select->handle)->serviceid);
977                                                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1); tmpstr1 = NULL;
978                                                tmpstr = ostrcat(tmpstr, "#", 1, 0);
979                                                tmpstr1 = ollutoa(((struct channel*)listbox->select->handle)->transponderid);
980                                                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1); tmpstr1 = NULL;
981                                                addbouquet(&mbouquet->bouquet, tmpstr, status.servicetype, 0, NULL);
982                                                free(tmpstr); tmpstr = NULL;
983                                                recalcbouquetnr();
984                                                if(list == BOUQUETCHANNEL)
985                                                {
986                                                        delmarkedscreennodes(channellist, 1);
987                                                        delmarkedscreennodes(channellist, 2);
988                                                        showbouquetchannel(channellist, listbox, channeltimeline, ((struct mainbouquet*)aktlist)->bouquet, (struct mainbouquet*)aktlist, 1);
989                                                }
990                                        }
991                                }
992                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
993                                drawscreen(channellist, 0, 0);
994                        }
995                        if(listmode == EDITMODE && listbox->select != NULL && listbox->select->handle1 != NULL && rcret == getrcconfigint("rcok", NULL))
996                        {
997                                if(list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL)
998                                {
999                                        struct channel* oldentry = ((struct channel*)listbox->select->handle1);
1000                                        char* newentry = textinput(NULL, oldentry->name);
1001                                        if(newentry != NULL)
1002                                        {
1003                                                newentry = stringreplacechar(newentry, '#', '_');
1004                                                free(oldentry->name);
1005                                                oldentry->name = newentry;
1006                                                status.writechannel = 1;
1007                                        }
1008                                }
1009                                if(list == MAINBOUQUETLIST)
1010                                {
1011                                        struct mainbouquet* oldentry = ((struct mainbouquet*)listbox->select->handle1);
1012                                        char* newentry = textinput(NULL, oldentry->name);
1013                                        if(newentry != NULL)
1014                                        {
1015                                                newentry = stringreplacechar(newentry, '#', '_');
1016                                                free(oldentry->name);
1017                                                oldentry->name = newentry;
1018                                                status.writemainbouquet = 1;
1019                                        }
1020                                }
1021                                if(list == BOUQUETCHANNEL)
1022                                {
1023                                        struct channel* oldentry = getchannel(((struct bouquet*)listbox->select->handle1)->serviceid, ((struct bouquet*)listbox->select->handle1)->transponderid);
1024                                        if(oldentry != NULL)
1025                                        {
1026                                                char* newentry = textinput(NULL, oldentry->name);
1027                                                if(newentry != NULL)
1028                                                {
1029                                                        newentry = stringreplacechar(newentry, '#', '_');
1030                                                        free(oldentry->name);
1031                                                        oldentry->name = newentry;
1032                                                        status.writechannel = 1;
1033                                                }
1034                                        }
1035                                }
1036                                delmarkedscreennodes(channellist, 1);
1037                                delmarkedscreennodes(channellist, 2);
1038                                status.markedchannel = NULL;
1039                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
1040                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1041                                drawscreen(channellist, 0, 0);
1042                        }
1043                        if(listmode == RMMODE && listbox->select != NULL && listbox->select->handle1 != NULL && rcret == getrcconfigint("rcok", NULL))
1044                        {
1045                                if(list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL)
1046                                {
1047                                        if(delchannel(((struct channel*)listbox->select->handle1)->serviceid, ((struct channel*)listbox->select->handle1)->transponderid, 0) == 0)
1048                                        {
1049                                                listbox->aktline--;
1050                                                listbox->aktpage = -1;
1051                                        }
1052                                        else
1053                                                textbox(_("Message"), _("Can't remove akive Service"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 7, 0);
1054                                }
1055                                if(list == SATLIST)
1056                                {
1057                                        delsat(((struct sat*)listbox->select->handle1)->name);
1058                                        listbox->aktline--;
1059                                        listbox->aktpage = -1;
1060                                }
1061                                if(list == PROVIDERLIST)
1062                                {
1063                                        delprovider(((struct provider*)listbox->select->handle1)->providerid);
1064                                        listbox->aktline--;
1065                                        listbox->aktpage = -1;
1066                                }
1067                                if(list == MAINBOUQUETLIST)
1068                                {
1069                                        delmainbouquet(((struct mainbouquet*)listbox->select->handle1)->name, 1);
1070                                        recalcbouquetnr();
1071                                        listbox->aktline--;
1072                                        listbox->aktpage = -1;
1073                                }
1074                                if(list == BOUQUETCHANNEL)
1075                                {
1076                                        delbouquet(((struct bouquet*)listbox->select->handle1)->serviceid, ((struct bouquet*)listbox->select->handle1)->transponderid, &((struct mainbouquet*)aktlist)->bouquet);
1077                                        recalcbouquetnr();
1078                                        listbox->aktline--;
1079                                        listbox->aktpage = -1;
1080                                }
1081                                delmarkedscreennodes(channellist, 1);
1082                                delmarkedscreennodes(channellist, 2);
1083                                status.markedchannel = NULL;
1084                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
1085                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1086                                drawscreen(channellist, 0, 0);
1087                        }
1088                        if(listmode == MVMODE && listbox->select != NULL && rcret == getrcconfigint("rcok", NULL))
1089                        {
1090                                if(movesel == NULL)
1091                                {
1092                                        status.markmodus = 1;
1093                                        movesel = listbox->select->handle1;
1094                                }
1095                                else
1096                                {
1097                                        status.markmodus = 0;
1098                                        status.moveblockcount = 0;
1099                                        movesel = NULL;
1100                                }
1101                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1102                                drawscreen(channellist, 0, 0);
1103                        }
1104                        if(listmode == MVMODE && listbox->select != NULL && movesel != NULL && (rcret == getrcconfigint("rcup", NULL) || rcret == getrcconfigint("rcdown", NULL) || rcret == getrcconfigint("rcchdown", NULL) || rcret == getrcconfigint("rcchup", NULL)))
1105                        {
1106                                if(rcret == getrcconfigint("rcchdown", NULL) && listbox->linecount != (listbox->aktline + status.moveblockcount))
1107                                {
1108                                        struct skin* tmp = listbox->select;
1109                                        int i = 0, count = 0;
1110                                        status.moveblockcount++;
1111                                        for(i = 0; i < status.moveblockcount; i++)
1112                                        {
1113                                                tmp = tmp->next;
1114                                                if(tmp == NULL)
1115                                                {
1116                                                        status.moveblockcount = count;
1117                                                        break;
1118                                                }
1119                                                count++;
1120                                        }
1121                                        if(status.moveblockcount > 10)
1122                                                status.moveblockcount = 10;
1123                                        drawscreen(channellist, 0, 0);
1124                                        continue;
1125                                }
1126                                if(rcret == getrcconfigint("rcchup", NULL))
1127                                {
1128                                        status.moveblockcount--;
1129                                        if(status.moveblockcount < 0)
1130                                                status.moveblockcount = 0;
1131                                        drawscreen(channellist, 0, 0);
1132                                        continue;
1133                                }
1134                                if(rcret == getrcconfigint("rcup", NULL))
1135                                {
1136                                        if(list == ALLCHANNEL)
1137                                        {
1138                                                int ret = movechannelblockup(movesel);
1139                                                if(ret == 99) // wrap
1140                                                        listbox->aktline -= (status.moveblockcount);
1141                                                //movechannelup(movesel);
1142                                                //while(((struct channel*)movesel)->next != NULL && ((struct channel*)movesel)->next->servicetype != status.servicetype)
1143                                                //      movechannelup(movesel);
1144                                        }
1145                                        if(list == SATLIST)
1146                                        {
1147                                                int ret = movesatblockup(movesel);
1148                                                if(ret == 99) // wrap
1149                                                        listbox->aktline -= (status.moveblockcount);
1150                                                //movesatup(movesel);
1151                                        }
1152                                        if(list == PROVIDERLIST)
1153                                        {
1154                                                int ret = moveproviderblockup(movesel);
1155                                                if(ret == 99) // wrap
1156                                                        listbox->aktline -= (status.moveblockcount);
1157                                                //moveproviderup(movesel);
1158                                        }
1159                                        if(list == MAINBOUQUETLIST)
1160                                        {
1161                                                int ret = movemainbouquetblockup(movesel);
1162                                                if(ret == 99) // wrap
1163                                                        listbox->aktline -= (status.moveblockcount);
1164                                                //movemainbouquetup(movesel);
1165                                                //while(((struct mainbouquet*)movesel)->next != NULL && ((struct mainbouquet*)movesel)->next->type != status.servicetype)
1166                                                //      movemainbouquetup(movesel);
1167                                                recalcbouquetnr();
1168                                        }
1169                                        if(list == BOUQUETCHANNEL)
1170                                        {
1171                                                int ret = movebouquetblockup(movesel);
1172                                                if(ret == 99) // wrap
1173                                                        listbox->aktline -= (status.moveblockcount);
1174                                                //movebouquetup(movesel);
1175                                                //while(((struct bouquet*)movesel)->next != NULL && ((struct bouquet*)movesel)->next->channel != NULL && ((struct bouquet*)movesel)->next->channel->servicetype != status.servicetype)
1176                                                //      movebouquetup(movesel);
1177                                                recalcbouquetnr();
1178                                        }
1179                                }
1180                                if(rcret == getrcconfigint("rcdown", NULL))
1181                                {
1182                                        if(list == ALLCHANNEL)
1183                                        {
1184                                                int ret = movechannelblockdown(movesel);
1185                                                if(ret == 99) // wrap
1186                                                {
1187                                                        listbox->aktpage = -1;
1188                                                        listbox->aktline = 1;
1189                                                }
1190                                                //movechanneldown(movesel);
1191                                                //while(((struct channel*)movesel)->prev != NULL && ((struct channel*)movesel)->prev->servicetype != status.servicetype)
1192                                                //      movechanneldown(movesel);
1193                                        }
1194                                        if(list == SATLIST)
1195                                        {
1196                                                int ret = movesatblockdown(movesel);
1197                                                if(ret == 99) // wrap
1198                                                {
1199                                                        listbox->aktpage = -1;
1200                                                        listbox->aktline = 1;
1201                                                }
1202                                                //movesatdown(movesel);
1203                                        }
1204                                        if(list == PROVIDERLIST)
1205                                        {
1206                                                int ret = moveproviderblockdown(movesel);
1207                                                if(ret == 99) // wrap
1208                                                {
1209                                                        listbox->aktpage = -1;
1210                                                        listbox->aktline = 1;
1211                                                }
1212                                                //moveproviderdown(movesel);
1213                                        }
1214                                        if(list == MAINBOUQUETLIST)
1215                                        {
1216                                                int ret = movemainbouquetblockdown(movesel);
1217                                                if(ret == 99) // wrap
1218                                                {
1219                                                        listbox->aktpage = -1;
1220                                                        listbox->aktline = 1;
1221                                                }
1222                                                //movemainbouquetdown(movesel);
1223                                                //while(((struct mainbouquet*)movesel)->prev != NULL && ((struct mainbouquet*)movesel)->prev->type != status.servicetype)
1224                                                //      movemainbouquetdown(movesel);
1225                                                recalcbouquetnr();
1226                                        }
1227                                        if(list == BOUQUETCHANNEL)
1228                                        {
1229                                                int ret = movebouquetblockdown(movesel);
1230                                                if(ret == 99) // wrap
1231                                                {
1232                                                        listbox->aktpage = -1;
1233                                                        listbox->aktline = 1;
1234                                                }
1235                                                //movebouquetdown(movesel);
1236                                                //while(((struct bouquet*)movesel)->prev != NULL && ((struct bouquet*)movesel)->prev->channel != NULL && ((struct bouquet*)movesel)->prev->channel->servicetype != status.servicetype)
1237                                                //      movebouquetdown(movesel);
1238                                                recalcbouquetnr();
1239                                        }
1240                                }
1241                                delmarkedscreennodes(channellist, 1);
1242                                delmarkedscreennodes(channellist, 2);
1243                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
1244                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1245                                drawscreen(channellist, 0, 0);
1246                        }
1247                        continue;
1248                }
1249
1250                if(rcret == getrcconfigint("rcred", NULL))
1251                {
1252                        list = ALLCHANNEL;
1253                        if(status.servicetype == 0)
1254                                addconfigtmp("channellist", "(ALL)");
1255                        else
1256                                addconfigtmp("rchannellist", "(ALL)");
1257                        if(nochanneltitle == 0)
1258                        {
1259                                changetitle(channellist, _("All Channels"));
1260                        }
1261                        delmarkedscreennodes(channellist, 1);
1262                        delmarkedscreennodes(channellist, 2);
1263                        showallchannel(channellist, listbox, channeltimeline, flag);
1264                        selectchannel(listbox, 0, 0);
1265                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1266                        drawchannellist(channellist, list, listbox);
1267                        continue;
1268                }
1269                if(rcret == getrcconfigint("rcblue", NULL) || rcret == getrcconfigint("rcfav", NULL))
1270                {
1271                        list = MAINBOUQUETLIST;
1272                        if(nochanneltitle == 0)
1273                        {
1274                                changetitle(channellist, _("Bouquets"));
1275                        }
1276                        delmarkedscreennodes(channellist, 1);
1277                        delmarkedscreennodes(channellist, 2);
1278                        showmainbouquet(channellist, listbox);
1279                        if(status.servicetype == 0)
1280                        {
1281                                delconfigtmp("channellist");
1282                                tmpstr = getconfig("channellist", NULL);
1283                        }
1284                        else
1285                        {
1286                                delconfigtmp("rchannellist");
1287                                tmpstr = getconfig("rchannellist", NULL);
1288                        }
1289                        if(ostrncmp("(BOUQUET)-", tmpstr, 10) != 0) tmpstr = NULL;
1290                        if(tmpstr != NULL && strlen(tmpstr) > 10)
1291                                setlistboxselection(listbox, tmpstr + 10);
1292                        else
1293                        {
1294                                listbox->aktpage = -1;
1295                                listbox->aktline = 1;
1296                        }
1297                        tmpstr = NULL;
1298                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1299                        drawchannellist(channellist, list, listbox);
1300                        continue;
1301                }
1302                if(rcret == getrcconfigint("rcgreen", NULL))
1303                {
1304                        list = SATLIST;
1305                        if(nochanneltitle == 0)
1306                        {
1307                                changetitle(channellist, _("Satellites"));
1308                        }       
1309                        delmarkedscreennodes(channellist, 1);
1310                        delmarkedscreennodes(channellist, 2);
1311                        showsat(channellist, listbox);
1312                        if(status.servicetype == 0)
1313                        {
1314                                delconfigtmp("channellist");
1315                                tmpstr = getconfig("channellist", NULL);
1316                        }
1317                        else
1318                        {
1319                                delconfigtmp("rchannellist");
1320                                tmpstr = getconfig("rchannellist", NULL);
1321                        }
1322                        if(ostrncmp("(SAT)-", tmpstr, 6) != 0) tmpstr = NULL;
1323                        if(tmpstr != NULL && strlen(tmpstr) > 6)
1324                                setlistboxselection(listbox, tmpstr + 6);
1325                        else
1326                        {
1327                                listbox->aktpage = -1;
1328                                listbox->aktline = 1;
1329                        }
1330                        tmpstr = NULL;
1331                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1332                        drawchannellist(channellist, list, listbox);
1333                        continue;
1334                }
1335                if(rcret == getrcconfigint("rctext", NULL))
1336                {
1337                        list = AZLIST;
1338                        if(nochanneltitle == 0)
1339                        {
1340                                changetitle(channellist, _("Channels A-Z"));
1341                        }
1342                        delmarkedscreennodes(channellist, 1);
1343                        delmarkedscreennodes(channellist, 2);
1344                        showaz(channellist, listbox);
1345                        if(status.servicetype == 0)
1346                        {
1347                                delconfigtmp("channellist");
1348                                tmpstr = getconfig("channellist", NULL);
1349                        }
1350                        else
1351                        {
1352                                delconfigtmp("rchannellist");
1353                                tmpstr = getconfig("rchannellist", NULL);
1354                        }
1355                        if(ostrncmp("(A-Z)-", tmpstr, 6) != 0) tmpstr = NULL;
1356                        if(tmpstr != NULL && strlen(tmpstr) > 6)
1357                                setlistboxselection(listbox, &tmpstr[6]);
1358                        else
1359                        {
1360                                listbox->aktpage = -1;
1361                                listbox->aktline = 1;
1362                        }
1363                        tmpstr = NULL;
1364                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1365                        drawchannellist(channellist, list, listbox);
1366                        continue;
1367                }
1368                if(rcret == getrcconfigint("rcyellow", NULL))
1369                {
1370                        list = PROVIDERLIST;
1371                        if(nochanneltitle == 0)
1372                        {
1373                                changetitle(channellist, _("Provider"));
1374                        }       
1375                        delmarkedscreennodes(channellist, 1);
1376                        delmarkedscreennodes(channellist, 2);
1377                        showprovider(channellist, listbox);
1378                        if(status.servicetype == 0)
1379                        {
1380                                delconfigtmp("channellist");
1381                                tmpstr = getconfig("channellist", NULL);
1382                        }
1383                        else
1384                        {
1385                                delconfigtmp("rchannellist");
1386                                tmpstr = getconfig("rchannellist", NULL);
1387                        }
1388                        if(ostrncmp("(PROVIDER)-", tmpstr, 11) != 0) tmpstr = NULL;
1389                        if(tmpstr != NULL && strlen(tmpstr) > 11)
1390                                setlistboxselection(listbox, tmpstr + 11);
1391                        else
1392                        {
1393                                listbox->aktpage = -1;
1394                                listbox->aktline = 1;
1395                        }
1396                        tmpstr = NULL;
1397                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1398                        drawchannellist(channellist, list, listbox);
1399                        continue;
1400                }
1401                if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && rcret == getrcconfigint("rcok", NULL))
1402                {
1403                        if(listbox->select != NULL && listbox->select->handle != NULL)
1404                        {
1405                                if(flag == 1)
1406                                {
1407                                        if(retchannel != NULL)
1408                                                *retchannel = (struct channel*)listbox->select->handle;
1409                                        if(retchannellist != NULL)
1410                                        {
1411                                                if(status.servicetype == 0)
1412                                                        *retchannellist = ostrcat(getconfig("channellist", NULL), NULL, 0, 0);
1413                                                else
1414                                                        *retchannellist = ostrcat(getconfig("rchannellist", NULL), NULL, 0, 0);
1415                                        }
1416                                        break;
1417                                }
1418
1419                                clearscreen(channellist);
1420                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1421                                resettvpic();
1422                                drawscreen(skin, 0, 0);
1423                                if(status.servicetype == 0)
1424                                        ret = servicestart((struct channel*)listbox->select->handle, getconfig("channellist", NULL), NULL, 0);
1425                                else
1426                                        ret = servicestart((struct channel*)listbox->select->handle, getconfig("rchannellist", NULL), NULL, 0);
1427                                if(ret == 20) writeconfigtmp();
1428                                servicecheckret(ret, 0);
1429                                break;
1430                        }
1431                        continue;
1432                }
1433                if(list == BOUQUETCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL) || rcret == getrcconfigint("rclast", NULL) || rcret == getrcconfigint("rcprev", NULL)))
1434                {
1435                        struct mainbouquet* tmpaktlist = ((struct mainbouquet*)aktlist);
1436
1437                        int round = 0;
1438                        while(tmpaktlist != NULL)
1439                        {
1440                                if(rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcprev", NULL))
1441                                {
1442                                        tmpaktlist = tmpaktlist->next;
1443                                        if(tmpaktlist == NULL && round == 0)   
1444                                        {
1445                                                round = 1;
1446                                                tmpaktlist = mainbouquet;
1447                                        }
1448                                }
1449                                else if(rcret == getrcconfigint("rcfr", NULL) || rcret == getrcconfigint("rclast", NULL))
1450                                {
1451                                        tmpaktlist = tmpaktlist->prev;
1452                                        if(tmpaktlist == NULL && round == 0)   
1453                                        {
1454                                                round = 1;
1455                                                tmpaktlist = getlastmainbouquet(mainbouquet);
1456                                        }
1457                                }
1458                                if(tmpaktlist == NULL) break;
1459                                if(tmpaktlist->type != status.servicetype) continue;
1460
1461                                delmarkedscreennodes(channellist, 1);
1462                                struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1463                                if(tmpnode != NULL)
1464                                {
1465                                        listbox->aktline = 1;
1466                                        listbox->aktpage = -1;
1467
1468                                        drawscreen(channellist, 2, 0);
1469                                        changetext(tmpnode, tmpaktlist->name);
1470                                        tmpnode->handle = (char*)tmpaktlist->bouquet;
1471                                        tmpnode->handle1 = (char*)tmpaktlist;
1472                                        rcret = getrcconfigint("rcok", NULL);
1473                                        list = MAINBOUQUETLIST;
1474                                        break;
1475                                }
1476                        }
1477                }
1478                if(list == MAINBOUQUETLIST && rcret == getrcconfigint("rcok", NULL))
1479                {
1480                        if(listbox->select != NULL)
1481                        {
1482                                list = BOUQUETCHANNEL;
1483                                tmpstr = ostrcat(tmpstr, _("Bouquets"), 0, 0);
1484                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1485                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1486                                if(nochanneltitle == 0)
1487                                {
1488                                        changetitle(channellist, tmpstr);
1489                                }
1490                                free(tmpstr); tmpstr = NULL;
1491                                tmpstr = ostrcat(tmpstr, "(BOUQUET)-", 0, 0);
1492                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1493                                if(status.servicetype == 0)
1494                                        addconfigtmp("channellist", tmpstr);
1495                                else
1496                                        addconfigtmp("rchannellist", tmpstr);
1497                                free(tmpstr); tmpstr = NULL;
1498                                aktlist = listbox->select->handle1;
1499                                showbouquetchannel(channellist, listbox, channeltimeline, (struct bouquet*)listbox->select->handle, (struct mainbouquet*)aktlist, flag);
1500                                delmarkedscreennodes(channellist, 2);
1501                                selectchannel(listbox, 0, 0);
1502                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1503                                drawchannellist(channellist, list, listbox);
1504                        }
1505                        continue;
1506                }
1507                if(list == SATCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1508                {
1509                        struct sat* tmpaktlist = ((struct sat*)aktlist);
1510
1511                        int round = 0;
1512                        while(tmpaktlist != NULL)
1513                        {
1514                                if(rcret == getrcconfigint("rcff", NULL))
1515                                {
1516                                        tmpaktlist = tmpaktlist->next;
1517                                        if(tmpaktlist == NULL && round == 0)   
1518                                        {
1519                                                round = 1;
1520                                                tmpaktlist = sat;
1521                                        }
1522                                }
1523                                else if(rcret == getrcconfigint("rcfr", NULL))
1524                                {
1525                                        tmpaktlist = tmpaktlist->prev;
1526                                        if(tmpaktlist == NULL && round == 0)   
1527                                        {
1528                                                round = 1;
1529                                                tmpaktlist = getlastsat(sat);
1530                                        }
1531                                }
1532                                if(tmpaktlist == NULL) break;
1533
1534                                delmarkedscreennodes(channellist, 1);
1535                                struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1536                                if(tmpnode != NULL)
1537                                {
1538                                        listbox->aktline = 1;
1539                                        listbox->aktpage = -1;
1540
1541                                        drawscreen(channellist, 2, 0);
1542                                        changetext(tmpnode, tmpaktlist->name);
1543                                        tmpnode->handle = (char*)tmpaktlist;
1544                                        tmpnode->handle1 = (char*)tmpaktlist;
1545                                        rcret = getrcconfigint("rcok", NULL);
1546                                        list = SATLIST;
1547                                        break;
1548                                }
1549                        }
1550                }
1551                if(list == SATLIST && rcret == getrcconfigint("rcok", NULL))
1552                {
1553                        if(listbox->select != NULL)
1554                        {
1555                                list = SATCHANNEL;
1556                                tmpstr = ostrcat(tmpstr, _("Satellites"), 0, 0);
1557                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1558                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1559                                if(nochanneltitle == 0)
1560                                {
1561                                        changetitle(channellist, tmpstr);
1562                                }
1563                                free(tmpstr); tmpstr = NULL;
1564                                tmpstr = ostrcat(tmpstr, "(SAT)-", 0, 0);
1565                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1566                                if(status.servicetype == 0)
1567                                        addconfigtmp("channellist", tmpstr);
1568                                else
1569                                        addconfigtmp("rchannellist", tmpstr);
1570                                free(tmpstr); tmpstr = NULL;
1571                                aktlist = listbox->select->handle;
1572                                showsatchannel(channellist, listbox, channeltimeline, (struct sat*)listbox->select->handle, flag);
1573                                delmarkedscreennodes(channellist, 2);
1574                                selectchannel(listbox, 0, 0);
1575                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1576                                drawchannellist(channellist, list, listbox);
1577                        }
1578                        continue;
1579                }
1580                if(list == AZCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1581                {
1582                        int tmpaktlist = (int)aktlist;
1583
1584                        if(rcret == getrcconfigint("rcff", NULL))
1585                        {
1586                                tmpaktlist++;
1587                                if(tmpaktlist > 90) tmpaktlist = 65;
1588                        }
1589                        else if(rcret == getrcconfigint("rcfr", NULL))
1590                        {
1591                                tmpaktlist--;
1592                                if(tmpaktlist < 65) tmpaktlist = 90;
1593                        }
1594
1595                        delmarkedscreennodes(channellist, 1);
1596                        struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1597                        if(tmpnode != NULL)
1598                        {
1599                                listbox->aktline = 1;
1600                                listbox->aktpage = -1;
1601
1602                                drawscreen(channellist, 2, 0);
1603                                tmpstr = malloc(2);
1604                                if(tmpstr != NULL)
1605                                {
1606                                        snprintf(tmpstr, 2, "%c", tmpaktlist);
1607                                        changetext(tmpnode, tmpstr);
1608                                        free(tmpstr); tmpstr = NULL;
1609                                }
1610                                tmpnode->handle = (char*)tmpaktlist;
1611                                tmpnode->handle1 = (char*)tmpaktlist;
1612                                rcret = getrcconfigint("rcok", NULL);
1613                                list = AZLIST;
1614                        }
1615                }
1616                if(list == AZLIST && rcret == getrcconfigint("rcok", NULL))
1617                {
1618                        if(listbox->select != NULL)
1619                        {
1620                                list = AZCHANNEL;
1621                                tmpstr = ostrcat(tmpstr, _("Channel"), 0, 0);
1622                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1623                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1624                                if(nochanneltitle == 0)
1625                                {
1626                                        changetitle(channellist, tmpstr);
1627                                }
1628                                free(tmpstr); tmpstr = NULL;
1629                                tmpstr = ostrcat(tmpstr, "(A-Z)-", 0, 0);
1630                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1631                                if(status.servicetype == 0)
1632                                        addconfigtmp("channellist", tmpstr);
1633                                else
1634                                        addconfigtmp("rchannellist", tmpstr);
1635                                free(tmpstr); tmpstr = NULL;
1636                                aktlist = listbox->select->handle;
1637                                showazchannel(channellist, listbox, channeltimeline, (int)listbox->select->handle, flag);
1638                                delmarkedscreennodes(channellist, 2);
1639                                selectchannel(listbox, 0, 0);
1640                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1641                                drawchannellist(channellist, list, listbox);
1642                        }
1643                        continue;
1644                }
1645                if(list == PROVIDERCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1646                {
1647                        struct provider* tmpaktlist = ((struct provider*)aktlist);
1648
1649                        int round = 0;
1650                        while(tmpaktlist != NULL)
1651                        {
1652                                if(rcret == getrcconfigint("rcff", NULL))
1653                                {
1654                                        tmpaktlist = tmpaktlist->next;
1655                                        if(tmpaktlist == NULL && round == 0)   
1656                                        {
1657                                                round = 1;
1658                                                tmpaktlist = provider;
1659                                        }
1660                                }
1661                                else if(rcret == getrcconfigint("rcfr", NULL))
1662                                {
1663                                        tmpaktlist = tmpaktlist->prev;
1664                                        if(tmpaktlist == NULL && round == 0)   
1665                                        {
1666                                                round = 1;
1667                                                tmpaktlist = getlastprovider(provider);
1668                                        }
1669                                }
1670                                if(tmpaktlist == NULL) break;
1671
1672                                if(checkprovider(tmpaktlist) == 1)
1673                                {
1674                                        delmarkedscreennodes(channellist, 1);
1675                                        struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1676                                        if(tmpnode != NULL)
1677                                        {
1678                                                listbox->aktline = 1;
1679                                                listbox->aktpage = -1;
1680       
1681                                                drawscreen(channellist, 2, 0);
1682                                                changetext(tmpnode, tmpaktlist->name);
1683                                                tmpnode->handle = (char*)tmpaktlist;
1684                                                tmpnode->handle1 = (char*)tmpaktlist;
1685                                                rcret = getrcconfigint("rcok", NULL);
1686                                                list = PROVIDERLIST;
1687                                                break;
1688                                        }
1689                                }
1690                        }
1691                }
1692                if(list == PROVIDERLIST && rcret == getrcconfigint("rcok", NULL))
1693                {
1694                        if(listbox->select != NULL)
1695                        {
1696                                list = PROVIDERCHANNEL;
1697                                tmpstr = ostrcat(tmpstr, _("Provider"), 0, 0);
1698                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1699                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1700                                if(nochanneltitle == 0)
1701                                {
1702                                        changetitle(channellist, tmpstr);
1703                                }
1704                                free(tmpstr); tmpstr = NULL;
1705                                tmpstr = ostrcat(tmpstr, "(PROVIDER)-", 0, 0);
1706                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1707                                if(status.servicetype == 0)
1708                                        addconfigtmp("channellist", tmpstr);
1709                                else
1710                                        addconfigtmp("rchannellist", tmpstr);
1711                                free(tmpstr); tmpstr = NULL;
1712                                aktlist = listbox->select->handle;
1713                                showproviderchannel(channellist, listbox, channeltimeline, (struct provider*) listbox->select->handle, flag);
1714                                delmarkedscreennodes(channellist, 2);
1715                                selectchannel(listbox, 0, 0);
1716                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1717                                drawchannellist(channellist, list, listbox);
1718                        }
1719                        continue;
1720                }
1721                if(flag == 0 && rcret == getrcconfigint("rcmenu", NULL))
1722                {
1723                        if(list == AZLIST) continue;
1724
1725                        int sid = 0;
1726                        uint64_t tid = 0;
1727                        if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && listbox->select != NULL && listbox->select->handle != NULL)
1728                        {
1729                                sid = ((struct channel*)listbox->select->handle)->serviceid;
1730                                tid = ((struct channel*)listbox->select->handle)->transponderid;
1731                        }
1732
1733                        clearscreen(channellist);
1734                        resettvpic();
1735
1736                        if(listbox->select != NULL)
1737                                listmode = screenlistedit(list, (struct channel*)listbox->select->handle, aktlist);
1738                        else
1739                                listmode = screenlistedit(list, NULL, aktlist);
1740                               
1741                        if(listmode == MVMODE)
1742                        {
1743                                delrc(getrcconfigint("rcright", NULL), channellist, listbox);
1744                                delrc(getrcconfigint("rcleft", NULL), channellist, listbox);
1745                        }
1746                        else
1747                                addscreenrcchannellist(channellist, listbox);
1748
1749                        if(nochanneltitle == 0) changechanneltitle(channellist, listbox, listmode, &oldtitle, &oldfontcol, &oldbgcol);
1750
1751                        if(listmode == NOMODE && flag == 3) flag = 0;
1752                        delmarkedscreennodes(channellist, 1);
1753                        delmarkedscreennodes(channellist, 2);
1754                        recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
1755                        selectchannel(listbox, sid, tid);
1756                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1757                        drawscreen(channellist, 0, 0);
1758                        continue;
1759                }
1760                if(flag == 0 && rcret == getrcconfigint("rcepg", NULL) && (list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL))
1761                {
1762                        int ret = 0;
1763                        if(listbox->select != NULL)
1764                        {
1765                                clearscreen(channellist);
1766                                resettvpic();
1767                                struct channel* tmpmarkedchannel = status.markedchannel;
1768                                ret = epgchoice((struct channel*)listbox->select->handle);
1769                                //epg ends with no zap
1770                                if(ret == 0)
1771                                {
1772                                        status.markedchannel = tmpmarkedchannel;
1773                                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1774                                        drawchannellist(channellist, list, listbox);
1775                                }
1776                        }
1777                        if(ret == 1)
1778                                break;
1779                        else
1780                                continue;
1781                }
1782                if(flag == 0 && rcret == getrcconfigint("rc0", NULL) && (list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL))
1783                {
1784                        if(listbox->select != NULL)
1785                        {
1786                                clearscreen(channellist);
1787                                resettvpic();
1788                                struct channel* tmpmarkedchannel = status.markedchannel;
1789                                screenshortepg((struct channel*)listbox->select->handle, NULL, 0);
1790                                status.markedchannel = tmpmarkedchannel;
1791                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, flag);
1792                                drawscreen(channellist, 0, 0);
1793                        }
1794                        continue;
1795                }
1796                if(flag == 0 && rcret == getrcconfigint("rcinfo", NULL))
1797                {
1798                        if(status.servicetype == 0)
1799                        {
1800                                status.servicetype = 1;
1801                                changetext(b8, _("TV"));
1802                        }
1803                        else
1804                        {
1805                                status.servicetype = 0;
1806                                changetext(b8, _("Radio"));
1807                        }
1808                        newmodus = 1;
1809                        break;
1810                }
1811        }
1812
1813end:
1814        status.updatevfd = START;
1815        listbox->fontcol = oldfontcol;
1816        listbox->bgcol = oldbgcol;
1817        status.moveblockcount = 0;
1818        free(oldtitle);
1819        status.markedchannel = NULL;
1820        status.markmodus = 0;
1821        delmarkedscreennodes(channellist, 1);
1822        delmarkedscreennodes(channellist, 2);
1823        delownerrc(channellist);
1824        delconfigtmp("channellist");
1825        delconfigtmp("rchannellist");
1826        clearscreen(channellist);
1827        if(newmodus == 1) goto start;
1828        status.channelswitch = 0;
1829        resettvpic();
1830        return ret;
1831}
1832
1833#endif
Note: See TracBrowser for help on using the repository browser.