source: titan/titan/channellist.h @ 15573

Last change on this file since 15573 was 15573, checked in by nit, 12 years ago

[titan] make channellistview changeable

File size: 43.4 KB
Line 
1#ifndef CHANNELLIST_H
2#define CHANNELLIST_H
3
4int selectchannel(struct skin* listbox, int sid, unsigned long 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), getconfiglu("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), getconfiglu("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, 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(tmpchannel->protect > 0)
80                                        chnode->fontcol = convertcol("protectcol");
81                                changetext(chnode, tmpchannel->name);
82                                chnode->handle = (char*) tmpchannel;
83                                chnode->handle1 = (char*) tmpchannel;
84                                if(mode == 0 && channelnottunable(tmpchannel) == 1)
85        {
86          if(status.channellistview == 0)
87            chnode->hidden = YES;
88          else
89                                        chnode->deaktivcol = deaktivcol;
90                        }
91                }
92                tmpchannel = tmpchannel->next;
93        }
94}
95
96void showbouquetchannel(struct skin* channellist, struct skin* listbox, struct skin* channeltimeline, struct bouquet* firstbouquet, int mode)
97{
98        struct skin* chnode = NULL;
99        struct bouquet* tmpbouquet = firstbouquet;
100        char* tmpstr = NULL, *tmpnr = NULL;
101        long long deaktivcol = convertcol("deaktivcol");
102
103        while(tmpbouquet != NULL)
104        {
105                if(tmpbouquet->channel != NULL)
106                {
107                        if(tmpbouquet->channel->servicetype == status.servicetype)
108                        {
109                                chnode = addlistbox(channellist, listbox, chnode, 1);
110                                if(chnode != NULL)
111                                {
112                                        tmpnr = oitoa(tmpbouquet->nr);
113                                        changeret(chnode, tmpnr);
114                                        tmpstr = ostrcat(tmpstr, tmpnr, 1, 1);
115                                        tmpstr = ostrcat(tmpstr, "  ", 1, 0);
116                                        tmpstr = ostrcat(tmpstr, tmpbouquet->channel->name, 1, 0);
117                                        changetext(chnode, tmpstr);
118                                        free(tmpstr); tmpstr = NULL;
119                                        if(tmpbouquet->channel->protect > 0)
120                                                chnode->fontcol = convertcol("protectcol");
121
122                                        changechannelepg(tmpbouquet->channel, chnode);
123                                        chnode->handle = (char*) tmpbouquet->channel;
124                                        chnode->handle1 = (char*) tmpbouquet;
125                                        if(mode == 0 && channelnottunable(tmpbouquet->channel) == 1)
126          {
127            if(status.channellistview == 0)
128              chnode->hidden = YES;
129            else
130                                                chnode->deaktivcol = deaktivcol;
131          }
132                                               
133                                        if(status.showchanneltimeline == 1 && channeltimeline != status.skinerr)
134                                        {
135                                                chnode->textposx = channeltimeline->width + 10;
136                                                struct skin* chnode1 = NULL;
137                                                chnode1 = addlistbox(channellist, chnode, chnode, 1);
138                                                chnode1->progresscol = channeltimeline->progresscol;
139                                                chnode1->skinfunc = convertfunc("getepgchanneltimeline", &chnode1->funcrettype);
140                                                chnode1->handle = (char*)tmpbouquet->channel;
141                                                chnode1->posy = channeltimeline->posy;
142                                                chnode1->width = channeltimeline->width;
143                                                chnode1->height = channeltimeline->height;
144                                                chnode1->bordersize = channeltimeline->bordersize;
145                                                chnode1->bordercol = channeltimeline->bordercol;
146                                                chnode1->prozwidth = 0;
147                                        }
148                                }
149                        }
150                }
151                tmpbouquet = tmpbouquet->next;
152        }
153}
154
155void showproviderchannel(struct skin* channellist, struct skin* listbox, struct provider* providernode, int mode)
156{
157        struct skin* chnode = NULL;
158        struct channel* tmpchannel = channel;
159        long long deaktivcol = convertcol("deaktivcol");
160
161        while(tmpchannel != NULL)
162        {
163                if(tmpchannel->provider == providernode)
164                {
165                        if(tmpchannel->servicetype == status.servicetype)
166                        {
167                                chnode = addlistbox(channellist, listbox, chnode, 1);
168                                if(chnode != NULL)
169                                {
170                                        changechannelepg(tmpchannel, chnode);
171                                        changetext(chnode, tmpchannel->name);
172                                        if(tmpchannel->protect > 0)
173                                                chnode->fontcol = convertcol("protectcol");
174                                        chnode->handle = (char*) tmpchannel;
175                                        chnode->handle1 = (char*) tmpchannel;
176                                        if(mode == 0 && channelnottunable(tmpchannel) == 1)
177          {
178            if(status.channellistview == 0)
179                                                  chnode->hidden = YES;
180            else
181                                                chnode->deaktivcol = deaktivcol;
182          }
183                                }
184                        }
185                }
186                tmpchannel = tmpchannel->next;
187        }
188}
189
190void showprovider(struct skin* channellist, struct skin* listbox)
191{
192        struct provider *node = provider;
193        struct skin* providernode = NULL;
194
195        while(node != NULL)
196        {
197                providernode = addlistbox(channellist, listbox, providernode, 2);
198                if(providernode != NULL)
199                {
200                        changetext(providernode, node->name);
201                        changename(providernode, node->name);
202                        providernode->handle = (char*) node;
203                        providernode->handle1 = (char*) node;
204                }
205                node = node->next;
206        }
207}
208
209void showsatchannel(struct skin* channellist, struct skin* listbox, struct sat* satnode, int mode)
210{
211        struct skin* chnode = NULL;
212        struct channel* tmpchannel = channel;
213        long long deaktivcol = convertcol("deaktivcol");
214
215        if(satnode == NULL)
216                return;
217
218        while(tmpchannel != NULL)
219        {
220                if(tmpchannel->transponder != NULL && tmpchannel->transponder->orbitalpos == satnode->orbitalpos)
221                {
222                        if(tmpchannel->servicetype == status.servicetype)
223                        {
224                                chnode = addlistbox(channellist, listbox, chnode, 1);
225                                if(chnode != NULL)
226                                {
227                                        changechannelepg(tmpchannel, chnode);
228                                        changetext(chnode, tmpchannel->name);
229                                        if(tmpchannel->protect > 0)
230                                                chnode->fontcol = convertcol("protectcol");
231                                        chnode->handle = (char*) tmpchannel;
232                                        chnode->handle1 = (char*) tmpchannel;
233                                        if(mode == 0 && channelnottunable(tmpchannel) == 1)
234          {
235            if(status.channellistview == 0)
236                                                  chnode->hidden = YES;
237            else
238                                                chnode->deaktivcol = deaktivcol;
239          }
240                                }
241                        }
242                }
243                tmpchannel = tmpchannel->next;
244        }
245}
246
247void showsat(struct skin* channellist, struct skin* listbox)
248{
249        int i = 0, treffer = 0;
250        struct sat *node = sat;
251        struct dvbdev *dvbnode = NULL;
252        struct skin* satnode = NULL;
253        char* tmpstr = NULL, *tmpnr = NULL;
254
255        while(node != NULL)
256        {
257                treffer = 0;
258                dvbnode = dvbdev;
259                while(dvbnode != NULL)
260                {
261                        if(dvbnode->type == FRONTENDDEV && dvbnode->feshortname != NULL)
262                        {
263                                tmpstr = ostrcat(dvbnode->feshortname, "_sat", 0, 0);
264                                for(i = 1; i <= getmaxsat(dvbnode->feshortname); i++)
265                                {
266                                        tmpnr = oitoa(i);
267                                        if(getconfigint(tmpstr, tmpnr) == node->orbitalpos)
268                                        {
269                                                free(tmpnr); tmpnr = NULL;
270                                                treffer = 1;
271                                                break;
272                                        }
273                                        free(tmpnr); tmpnr = NULL;
274                                }
275                                free(tmpstr); tmpstr = NULL;
276                        }
277                        if(treffer == 1) break;
278                        dvbnode = dvbnode->next;
279                }
280
281                if(treffer == 0)
282                {
283                        node = node->next;
284                        continue;
285                }
286
287                satnode = addlistbox(channellist, listbox, satnode, 2);
288                if(satnode != NULL)
289                {
290                        changetext(satnode, node->name);
291                        changename(satnode, node->name);
292                        satnode->handle = (char*) node;
293                        satnode->handle1 = (char*) node;
294                }
295                node = node->next;
296        }
297}
298
299void showazchannel(struct skin* channellist, struct skin* listbox, int character, int mode)
300{
301        struct skin* chnode = NULL;
302        struct channel* tmpchannel = channel;
303        long long deaktivcol = convertcol("deaktivcol");
304
305        while(tmpchannel != NULL)
306        {
307                if(tmpchannel->name != NULL && (tmpchannel->name[0] == character || tmpchannel->name[0] == character + 32))
308                {
309                        if(tmpchannel->servicetype == status.servicetype)
310                        {
311                                chnode = addlistbox(channellist, listbox, chnode, 1);
312                                if(chnode != NULL)
313                                {
314                                        changechannelepg(tmpchannel, chnode);
315                                        changetext(chnode, tmpchannel->name);
316                                        if(tmpchannel->protect > 0)
317                                                chnode->fontcol = convertcol("protectcol");
318                                        chnode->handle = (char*) tmpchannel;
319                                        chnode->handle1 = (char*) tmpchannel;
320                                        if(mode == 0 && channelnottunable(tmpchannel) == 1)
321          {
322            if(status.channellistview == 0)
323              chnode->hidden = YES;
324            else
325                                                chnode->deaktivcol = deaktivcol;
326          }
327                                }
328                        }
329                }
330                tmpchannel = tmpchannel->next;
331        }
332}
333
334void showaz(struct skin* channellist, struct skin* listbox)
335{
336        struct skin* node = NULL;
337        int i;
338        char* tmpstr = NULL;
339
340        tmpstr = malloc(2);
341        if(tmpstr == NULL)
342        {
343                err("no memory");
344                return;
345        }
346
347        for(i = 65; i < 91; i++)
348        {
349                node = addlistbox(channellist, listbox, node, 2);
350                if(node != NULL)
351                {
352                        snprintf(tmpstr, 2, "%c", i);
353                        changetext(node, tmpstr);
354                        changename(node, tmpstr);
355                        node->handle = (void*) i;
356                }
357        }
358
359        free(tmpstr);
360}
361
362void showmainbouquet(struct skin* channellist, struct skin* listbox)
363{
364        struct mainbouquet *node = mainbouquet;
365        struct skin* bouquetnode = NULL;
366
367        while(node != NULL)
368        {
369                if(node->type == status.servicetype)
370                {
371                        bouquetnode = addlistbox(channellist, listbox, bouquetnode, 2);
372                        if(bouquetnode != NULL)
373                        {
374                                changetext(bouquetnode, node->name);
375                                changename(bouquetnode, node->name);
376                                bouquetnode->handle = (char*) node->bouquet;
377                                bouquetnode->handle1 = (char*) node;
378                        }
379                }
380                node = node->next;
381        }
382}
383
384void drawchannellist(struct skin* channellist, int list, struct skin* listbox)
385{
386        status.markedchannel = NULL;
387        if(list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL)
388        {
389                if(listbox->select == NULL)
390                {
391                        status.screencalc = 2;
392                        drawscreen(channellist, 0);
393                        status.screencalc = 0;
394                }
395                if(listbox->select != NULL)
396                        status.markedchannel = (struct channel*)listbox->select->handle;
397        }
398        drawscreen(channellist, 0);
399}
400
401void recalclist(int list, void* aktlist, int listmode, struct skin* channellist, struct skin* listbox, struct skin* channeltimeline)
402{
403        if(list == ALLCHANNEL)
404                showallchannel(channellist, listbox, listmode);
405        if(list == SATCHANNEL)
406                showsatchannel(channellist, listbox, (struct sat*)aktlist, listmode);
407        if(list == PROVIDERCHANNEL)
408                showproviderchannel(channellist, listbox, (struct provider*)aktlist, listmode);
409        if(list == AZCHANNEL)
410                showazchannel(channellist, listbox, (int)aktlist, listmode);
411        if(list == BOUQUETCHANNEL)
412                showbouquetchannel(channellist, listbox, channeltimeline, ((struct mainbouquet*)aktlist)->bouquet, listmode);
413        if(list == MAINBOUQUETLIST)
414                showmainbouquet(channellist, listbox);
415        if(list == SATLIST)
416                showsat(channellist, listbox);
417        if(list == PROVIDERLIST)
418                showprovider(channellist, listbox);
419}
420
421void 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)
422{
423        if(listmode == NOMODE)
424        {
425                b1->hidden = NO;
426                b2->hidden = NO;
427                b3->hidden = NO;
428                b4->hidden = NO;
429                b5->hidden = NO;
430                b6->hidden = NO;
431                b7->hidden = NO;
432                b8->hidden = YES;
433                b9->hidden = YES;
434        }
435        else
436        {
437                b1->hidden = YES;
438                b2->hidden = YES;
439                b3->hidden = YES;
440                b4->hidden = YES;
441                b5->hidden = YES;
442                b6->hidden = YES;
443                b7->hidden = YES;
444                b8->hidden = NO;
445                b9->hidden = NO;
446        }
447}
448
449void changechanneltitle(struct skin* channellist, int listmode, char** oldtitle)
450{
451        char* tmpstr = NULL;
452
453        if(*oldtitle == NULL)
454                *oldtitle = ostrcat(channellist->title, NULL, 0, 0);
455
456        if(listmode == MVMODE)
457        {
458                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
459                tmpstr = ostrcat(tmpstr, _("Move mode"), 1, 0);
460                changetitle(channellist, tmpstr);
461        }
462        else if(listmode == RMMODE)
463        {
464                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
465                tmpstr = ostrcat(tmpstr, _("Remove mode"), 1, 0);
466                changetitle(channellist, tmpstr);
467        }
468        else if(listmode == CPMODE)
469        {
470                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
471                tmpstr = ostrcat(tmpstr, _("Copy mode"), 1, 0);
472                changetitle(channellist, tmpstr);
473        }
474        else if(listmode == PROTECTMODE)
475        {
476                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
477                tmpstr = ostrcat(tmpstr, _("Protect mode"), 1, 0);
478                changetitle(channellist, tmpstr);
479        }
480        else if(listmode == EDITMODE)
481        {
482                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
483                tmpstr = ostrcat(tmpstr, _("Edit mode"), 1, 0);
484                changetitle(channellist, tmpstr);
485        }
486        else
487        {
488                changetitle(channellist, *oldtitle);
489                *oldtitle = NULL;
490        }
491}
492
493//flag 1: called from recordtimer screen
494//flag 2: rcfav (open bouquetlist)
495//flag 3: edit modus
496int screenchannellist(struct channel** retchannel, char** retchannellist, int flag)
497{
498        struct skin* channellist = getscreen("channellist");
499        struct skin* listbox = getscreennode(channellist, "listbox");
500        struct skin* channeltimeline = getscreennode(channellist, "channeltimeline");
501        struct skin* b1 = getscreennode(channellist, "b1");
502        struct skin* b2 = getscreennode(channellist, "b2");
503        struct skin* b3 = getscreennode(channellist, "b3");
504        struct skin* b4 = getscreennode(channellist, "b4");
505        struct skin* b5 = getscreennode(channellist, "b5");
506        struct skin* b6 = getscreennode(channellist, "b6");
507        struct skin* b7 = getscreennode(channellist, "b7");
508        struct skin* b8 = getscreennode(channellist, "b8");
509        struct skin* b9 = getscreennode(channellist, "b9");
510        struct skin* tmpskin;
511        int rcret, ret, listmode, newmodus, list;
512        char* tmpstr = NULL, *tmpstr1 = NULL, *oldtitle = NULL;
513        void* movesel = NULL, *aktlist = NULL;
514        int nochanneltitle = getskinconfigint("nochanneltitle", NULL);
515        int firstdraw = 0;
516       
517        status.channelswitch = 1;
518
519start:
520        rcret = 0, ret = -1, list = ALLCHANNEL, listmode = NOMODE, newmodus = 0;
521        tmpstr = NULL, tmpstr1 = NULL, movesel = NULL, aktlist = NULL, tmpskin = NULL;
522        if(nochanneltitle == 0) changetitle(channellist, "");
523
524        if(status.servicetype == 0)
525        {
526                tmpstr = getconfig("channellist", NULL);
527                changetext(b7, _("Radio (Info)"));
528        }
529        else
530        {
531                tmpstr = getconfig("rchannellist", NULL);
532                changetext(b7, _("TV (Info)"));
533        }
534        if(ostrncmp("(BOUQUET)-", tmpstr, 10) == 0 && strlen(tmpstr) > 10)
535        {
536                struct mainbouquet* mainbouquetnode = NULL;
537                mainbouquetnode = getmainbouquet(tmpstr + 10);
538                if(mainbouquetnode != NULL && mainbouquetnode->bouquet != NULL)
539                {
540                        tmpstr1 = ostrcat(tmpstr1, _("Bouquets"), 0, 0);
541                        tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
542                        tmpstr1 = ostrcat(tmpstr1, tmpstr + 10, 1, 0);
543                        if(nochanneltitle == 0) changetitle(channellist, tmpstr1);
544                        free(tmpstr1); tmpstr1 = NULL;
545                        list = BOUQUETCHANNEL;
546                        aktlist = (void*)mainbouquetnode;
547                        showbouquetchannel(channellist, listbox, channeltimeline, mainbouquetnode->bouquet, flag);
548                        selectchannel(listbox, 0, 0);
549                }
550        }
551        else if(ostrncmp("(A-Z)-", tmpstr, 6) == 0 && strlen(tmpstr) > 6)
552        {
553                tmpstr1 = ostrcat(tmpstr1, _("Channel"), 0, 0);
554                tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
555                tmpstr1 = ostrcat(tmpstr1, tmpstr + 6, 1, 0);
556                if(nochanneltitle == 0) changetitle(channellist, tmpstr1);
557                free(tmpstr1); tmpstr1 = NULL;
558                list = AZCHANNEL;
559                aktlist = (void*)(int)tmpstr[6];
560                showazchannel(channellist, listbox, (int)tmpstr[6], flag);
561                selectchannel(listbox, 0, 0);
562        }
563        else if(ostrncmp("(SAT)-", tmpstr, 6) == 0 && strlen(tmpstr) > 6)
564        {
565                tmpstr1 = ostrcat(tmpstr1, _("Satellites"), 0, 0);
566                tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
567                tmpstr1 = ostrcat(tmpstr1, tmpstr + 6, 1, 0);
568                if(nochanneltitle == 0) changetitle(channellist, tmpstr1);
569                free(tmpstr1); tmpstr1 = NULL;
570                struct sat* satnode = getsat(tmpstr + 6);
571                list = SATCHANNEL;
572                aktlist = (void*)satnode;
573                showsatchannel(channellist, listbox, satnode, flag);
574                selectchannel(listbox, 0, 0);
575        }
576        else if(ostrncmp("(PROVIDER)-", tmpstr, 11) == 0 && strlen(tmpstr) > 6)
577        {
578                tmpstr1 = ostrcat(tmpstr1, _("Provider"), 0, 0);
579                tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
580                tmpstr1 = ostrcat(tmpstr1, tmpstr + 11, 1, 0);
581                if(nochanneltitle == 0) changetitle(channellist, tmpstr1);
582                free(tmpstr1); tmpstr1 = NULL;
583                struct provider* providernode = getproviderbyname(tmpstr + 11);
584                list = PROVIDERCHANNEL;
585                aktlist = (void*)providernode;
586                showproviderchannel(channellist, listbox, providernode, flag);
587                selectchannel(listbox, 0, 0);
588        }
589        else
590        {
591                if(nochanneltitle == 0) changetitle(channellist, _("All Channels"));
592                list = ALLCHANNEL;
593                showallchannel(channellist, listbox, flag);
594                selectchannel(listbox, 0, 0);
595        }
596
597        tmpstr = NULL;
598        if(status.screenanim > 0 && firstdraw == 0)
599        {
600                firstdraw = 1;
601                drawscreen(channellist, 4);
602        }
603        else
604        {
605                status.screencalc = 2;
606                drawscreen(channellist, 0);
607                status.screencalc = 0;
608        }
609        addscreenrc(channellist, listbox);
610
611        if(flag == 3)
612        {
613                if(listbox->select != NULL)
614                        listmode = screenlistedit(list, (struct channel*)listbox->select->handle);
615                if(listmode == NOMODE) goto end;
616                if(nochanneltitle == 0) changechanneltitle(channellist, listmode, &oldtitle);
617        }
618        if(flag != 2)
619        {
620                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
621                drawchannellist(channellist, list, listbox);
622        }
623
624        while(1)
625        {
626                if(flag == 2)
627                {
628                        rcret = getrcconfigint("rcblue", NULL);
629                        flag = 0;
630                }
631                else
632                {
633                        status.screencalc = 2;
634                        rcret = waitrc(channellist, 10000, 0);
635                        status.screencalc = 0;
636                }
637
638                //read epg new
639                if(listbox != NULL && listbox->select != NULL && (list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL))
640                {
641                        tmpskin = listbox->select;
642                        while(tmpskin != NULL)
643                        {
644                                if(tmpskin->pagecount != listbox->aktpage) break;
645                                changechannelepg((struct channel*)tmpskin->handle, tmpskin);
646                                tmpskin = tmpskin->prev;
647                        }
648                        tmpskin = listbox->select;
649                        while(tmpskin != NULL)
650                        {
651                                if(tmpskin->pagecount != listbox->aktpage) break;
652                                changechannelepg((struct channel*)tmpskin->handle, tmpskin);
653                                tmpskin = tmpskin->next;
654                        }
655                }
656
657                if(rcret == getrcconfigint("rcup", NULL) || rcret == getrcconfigint("rcdown", NULL) || rcret == getrcconfigint("rcleft", NULL) || rcret == getrcconfigint("rcright", NULL))
658                {
659                        if(listmode != MVMODE || (listmode == MVMODE && status.markmodus == 0))
660                        {
661                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
662                                drawchannellist(channellist, list, listbox);
663                        }
664                }
665
666                if(rcret == RCTIMEOUT)
667                {
668                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
669                        drawscreen(channellist, 0);
670                }
671
672                if(rcret == getrcconfigint("rcexit", NULL)) break;
673
674                if((flag == 0 || flag == 3) && listmode > NOMODE)
675                {
676
677                        if(rcret == getrcconfigint("rcmenu", NULL))
678                        {
679                                int sid = 0;
680                                unsigned long tid = 0;
681                                if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && listbox->select->handle != NULL)
682                                {
683                                        sid = ((struct channel*)listbox->select->handle)->serviceid;
684                                        tid = ((struct channel*)listbox->select->handle)->transponderid;
685                                }
686
687                                status.markmodus = 0;
688                                movesel = NULL;
689                                clearscreen(channellist);
690                                listmode = screenlistedit(list, NULL);
691                                if(listmode == MVMODE)
692                                {
693                                        delrc(getrcconfigint("rcright", NULL), channellist, listbox);
694                                        delrc(getrcconfigint("rcleft", NULL), channellist, listbox);
695                                }
696                                else
697                                        addscreenrc(channellist, listbox);
698                                if(listmode == NOMODE && flag == 3) flag = 0;
699
700                                if(nochanneltitle == 0) changechanneltitle(channellist, listmode, &oldtitle);
701
702                                delmarkedscreennodes(channellist, 1);
703                                delmarkedscreennodes(channellist, 2);
704                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
705                                selectchannel(listbox, sid, tid);
706                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
707                                drawscreen(channellist, 0);
708                        }
709                        if(listmode == PROTECTMODE && listbox->select != NULL && listbox->select->handle != NULL && rcret == getrcconfigint("rcok", NULL))
710                        {
711                                if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && listbox->select->handle != NULL)
712                                {
713                                        if(((struct channel*)listbox->select->handle)->protect == 0)
714                                                ((struct channel*)listbox->select->handle)->protect = 1;
715                                        else
716                                        {
717                                                if(screenpincheck(1, NULL) == 0)
718                                                        ((struct channel*)listbox->select->handle)->protect = 0;
719                                        }
720                                        status.writechannel = 1;
721                                }
722                                delmarkedscreennodes(channellist, 1);
723                                delmarkedscreennodes(channellist, 2);
724                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
725                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
726                                drawscreen(channellist, 0);
727                        }
728                        if(listmode == CPMODE && listbox->select != NULL && listbox->select->handle != NULL && rcret == getrcconfigint("rcok", NULL))
729                        {
730                                struct mainbouquet* mbouquet = screenmainbouquet();
731                                if(mbouquet != NULL && getbouquetbychannel(mbouquet->bouquet, ((struct channel*)listbox->select->handle)->serviceid, ((struct channel*)listbox->select->handle)->transponderid) == NULL)
732                                {
733                                        tmpstr1 = oitoa(((struct channel*)listbox->select->handle)->serviceid);
734                                        tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1); tmpstr1 = NULL;
735                                        tmpstr = ostrcat(tmpstr, "#", 1, 0);
736                                        tmpstr1 = oitoa(((struct channel*)listbox->select->handle)->transponderid);
737                                        tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1); tmpstr1 = NULL;
738                                        addbouquet(&mbouquet->bouquet, tmpstr, status.servicetype, 0, NULL);
739                                        free(tmpstr); tmpstr = NULL;
740                                        recalcbouquetnr();
741                                        if(list == BOUQUETCHANNEL)
742                                        {
743                                                delmarkedscreennodes(channellist, 1);
744                                                delmarkedscreennodes(channellist, 2);
745                                                showbouquetchannel(channellist, listbox, channeltimeline, ((struct mainbouquet*)aktlist)->bouquet, 1);
746                                        }
747                                }
748                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
749                                drawscreen(channellist, 0);
750                        }
751                        if(listmode == EDITMODE && listbox->select != NULL && listbox->select->handle1 != NULL && rcret == getrcconfigint("rcok", NULL))
752                        {
753                                if(list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL)
754                                {
755                                        struct channel* oldentry = ((struct channel*)listbox->select->handle1);
756                                        char* newentry = textinput(NULL, oldentry->name);
757                                        if(newentry != NULL)
758                                        {
759                                                newentry = stringreplacechar(newentry, '#', '_');
760                                                free(oldentry->name);
761                                                oldentry->name = newentry;
762                                                status.writechannel = 1;
763                                        }
764                                }
765                                if(list == MAINBOUQUETLIST)
766                                {
767                                        struct mainbouquet* oldentry = ((struct mainbouquet*)listbox->select->handle1);
768                                        char* newentry = textinput(NULL, oldentry->name);
769                                        if(newentry != NULL)
770                                        {
771                                                newentry = stringreplacechar(newentry, '#', '_');
772                                                free(oldentry->name);
773                                                oldentry->name = newentry;
774                                                status.writemainbouquet = 1;
775                                        }
776                                }
777                                if(list == BOUQUETCHANNEL)
778                                {
779                                        struct channel* oldentry = getchannel(((struct bouquet*)listbox->select->handle1)->serviceid, ((struct bouquet*)listbox->select->handle1)->transponderid);
780                                        if(oldentry != NULL)
781                                        {
782                                                char* newentry = textinput(NULL, oldentry->name);
783                                                if(newentry != NULL)
784                                                {
785                                                        newentry = stringreplacechar(newentry, '#', '_');
786                                                        free(oldentry->name);
787                                                        oldentry->name = newentry;
788                                                        status.writechannel = 1;
789                                                }
790                                        }
791                                }
792                                delmarkedscreennodes(channellist, 1);
793                                delmarkedscreennodes(channellist, 2);
794                                status.markedchannel = NULL;
795                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
796                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
797                                drawscreen(channellist, 0);
798                        }
799                        if(listmode == RMMODE && listbox->select != NULL && listbox->select->handle1 != NULL && rcret == getrcconfigint("rcok", NULL))
800                        {
801                                if(list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL)
802                                {
803                                        if(delchannel(((struct channel*)listbox->select->handle1)->serviceid, ((struct channel*)listbox->select->handle1)->transponderid, 0) == 0)
804                                        {
805                                                listbox->aktline--;
806                                                listbox->aktpage = -1;
807                                        }
808                                        else
809                                                textbox(_("Message"), _("Can't remove akive Service"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 7, 0);
810                                }
811                                if(list == SATLIST)
812                                {
813                                        delsat(((struct sat*)listbox->select->handle1)->name);
814                                        listbox->aktline--;
815                                        listbox->aktpage = -1;
816                                }
817                                if(list == PROVIDERLIST)
818                                {
819                                        delprovider(((struct provider*)listbox->select->handle1)->providerid);
820                                        listbox->aktline--;
821                                        listbox->aktpage = -1;
822                                }
823                                if(list == MAINBOUQUETLIST)
824                                {
825                                        delmainbouquet(((struct mainbouquet*)listbox->select->handle1)->name);
826                                        recalcbouquetnr();
827                                        listbox->aktline--;
828                                        listbox->aktpage = -1;
829                                }
830                                if(list == BOUQUETCHANNEL)
831                                {
832                                        delbouquet(((struct bouquet*)listbox->select->handle1)->serviceid, ((struct bouquet*)listbox->select->handle1)->transponderid, &((struct mainbouquet*)aktlist)->bouquet);
833                                        recalcbouquetnr();
834                                        listbox->aktline--;
835                                        listbox->aktpage = -1;
836                                }
837                                delmarkedscreennodes(channellist, 1);
838                                delmarkedscreennodes(channellist, 2);
839                                status.markedchannel = NULL;
840                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
841                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
842                                drawscreen(channellist, 0);
843                        }
844                        if(listmode == MVMODE && listbox->select != NULL && rcret == getrcconfigint("rcok", NULL))
845                        {
846                                if(movesel == NULL)
847                                {
848                                        status.markmodus = 1;
849                                        movesel = listbox->select->handle1;
850                                }
851                                else
852                                {
853                                        status.markmodus = 0;
854                                        movesel = NULL;
855                                }
856                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
857                                drawscreen(channellist, 0);
858                        }
859                        if(listmode == MVMODE && listbox->select != NULL && movesel != NULL && (rcret == getrcconfigint("rcup", NULL) || rcret == getrcconfigint("rcdown", NULL)))
860                        {
861                                if(rcret == getrcconfigint("rcup", NULL))
862                                {
863                                        if(list == ALLCHANNEL)
864                                        {
865                                                movechannelup(movesel);
866                                                while(((struct channel*)movesel)->next != NULL && ((struct channel*)movesel)->next->servicetype != status.servicetype)
867                                                        movechannelup(movesel);
868                                        }
869                                        if(list == SATLIST)
870                                                movesatup(movesel);
871                                        if(list == PROVIDERLIST)
872                                                moveproviderup(movesel);
873                                        if(list == MAINBOUQUETLIST)
874                                        {
875                                                movemainbouquetup(movesel);
876                                                while(((struct mainbouquet*)movesel)->next != NULL && ((struct mainbouquet*)movesel)->next->type != status.servicetype)
877                                                        movemainbouquetup(movesel);
878                                                recalcbouquetnr();
879                                        }
880                                        if(list == BOUQUETCHANNEL)
881                                        {
882                                                movebouquetup(movesel);
883                                                while(((struct bouquet*)movesel)->next != NULL && ((struct bouquet*)movesel)->next->channel != NULL && ((struct bouquet*)movesel)->next->channel->servicetype != status.servicetype)
884                                                        movebouquetup(movesel);
885                                                recalcbouquetnr();
886                                        }
887                                }
888                                if(rcret == getrcconfigint("rcdown", NULL))
889                                {
890                                        if(list == ALLCHANNEL)
891                                        {
892                                                movechanneldown(movesel);
893                                                while(((struct channel*)movesel)->prev != NULL && ((struct channel*)movesel)->prev->servicetype != status.servicetype)
894                                                        movechanneldown(movesel);
895                                        }
896                                        if(list == SATLIST)
897                                                movesatdown(movesel);
898                                        if(list == PROVIDERLIST)
899                                                moveproviderdown(movesel);
900                                        if(list == MAINBOUQUETLIST)
901                                        {
902                                                movemainbouquetdown(movesel);
903                                                while(((struct mainbouquet*)movesel)->prev != NULL && ((struct mainbouquet*)movesel)->prev->type != status.servicetype)
904                                                        movemainbouquetdown(movesel);
905                                                recalcbouquetnr();
906                                        }
907                                        if(list == BOUQUETCHANNEL)
908                                        {
909                                                movebouquetdown(movesel);
910                                                while(((struct bouquet*)movesel)->prev != NULL && ((struct bouquet*)movesel)->prev->channel != NULL && ((struct bouquet*)movesel)->prev->channel->servicetype != status.servicetype)
911                                                        movebouquetdown(movesel);
912                                                recalcbouquetnr();
913                                        }
914                                }
915                                delmarkedscreennodes(channellist, 1);
916                                delmarkedscreennodes(channellist, 2);
917                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
918                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
919                                drawscreen(channellist, 0);
920                        }
921                        continue;
922                }
923
924                if(rcret == getrcconfigint("rcred", NULL))
925                {
926                        list = ALLCHANNEL;
927                        if(status.servicetype == 0)
928                                addconfigtmp("channellist", "(ALL)");
929                        else
930                                addconfigtmp("rchannellist", "(ALL)");
931                        if(nochanneltitle == 0) changetitle(channellist, _("All Channels"));
932                        delmarkedscreennodes(channellist, 1);
933                        delmarkedscreennodes(channellist, 2);
934                        showallchannel(channellist, listbox, flag);
935                        selectchannel(listbox, 0, 0);
936                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
937                        drawchannellist(channellist, list, listbox);
938                        continue;
939                }
940                if(rcret == getrcconfigint("rcblue", NULL) || rcret == getrcconfigint("rcfav", NULL))
941                {
942                        list = MAINBOUQUETLIST;
943                        if(nochanneltitle == 0) changetitle(channellist, _("Bouquets"));
944                        delmarkedscreennodes(channellist, 1);
945                        delmarkedscreennodes(channellist, 2);
946                        showmainbouquet(channellist, listbox);
947                        if(status.servicetype == 0)
948                        {
949                                delconfigtmp("channellist");
950                                tmpstr = getconfig("channellist", NULL);
951                        }
952                        else
953                        {
954                                delconfigtmp("rchannellist");
955                                tmpstr = getconfig("rchannellist", NULL);
956                        }
957                        if(ostrncmp("(BOUQUET)-", tmpstr, 10) != 0) tmpstr = NULL;
958                        if(tmpstr != NULL && strlen(tmpstr) > 10)
959                                setlistboxselection(listbox, tmpstr + 10);
960                        else
961                        {
962                                listbox->aktpage = -1;
963                                listbox->aktline = 1;
964                        }
965                        tmpstr = NULL;
966                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
967                        drawchannellist(channellist, list, listbox);
968                        continue;
969                }
970                if(rcret == getrcconfigint("rcgreen", NULL))
971                {
972                        list = SATLIST;
973                        if(nochanneltitle == 0) changetitle(channellist, _("Satellites"));
974                        delmarkedscreennodes(channellist, 1);
975                        delmarkedscreennodes(channellist, 2);
976                        showsat(channellist, listbox);
977                        if(status.servicetype == 0)
978                        {
979                                delconfigtmp("channellist");
980                                tmpstr = getconfig("channellist", NULL);
981                        }
982                        else
983                        {
984                                delconfigtmp("rchannellist");
985                                tmpstr = getconfig("rchannellist", NULL);
986                        }
987                        if(ostrncmp("(SAT)-", tmpstr, 6) != 0) tmpstr = NULL;
988                        if(tmpstr != NULL && strlen(tmpstr) > 6)
989                                setlistboxselection(listbox, tmpstr + 6);
990                        else
991                        {
992                                listbox->aktpage = -1;
993                                listbox->aktline = 1;
994                        }
995                        tmpstr = NULL;
996                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
997                        drawchannellist(channellist, list, listbox);
998                        continue;
999                }
1000                if(rcret == getrcconfigint("rctext", NULL))
1001                {
1002                        list = AZLIST;
1003                        if(nochanneltitle == 0) changetitle(channellist, _("Channels A-Z"));
1004                        delmarkedscreennodes(channellist, 1);
1005                        delmarkedscreennodes(channellist, 2);
1006                        showaz(channellist, listbox);
1007                        if(status.servicetype == 0)
1008                        {
1009                                delconfigtmp("channellist");
1010                                tmpstr = getconfig("channellist", NULL);
1011                        }
1012                        else
1013                        {
1014                                delconfigtmp("rchannellist");
1015                                tmpstr = getconfig("rchannellist", NULL);
1016                        }
1017                        if(ostrncmp("(A-Z)-", tmpstr, 6) != 0) tmpstr = NULL;
1018                        if(tmpstr != NULL && strlen(tmpstr) > 6)
1019                                setlistboxselection(listbox, &tmpstr[6]);
1020                        else
1021                        {
1022                                listbox->aktpage = -1;
1023                                listbox->aktline = 1;
1024                        }
1025                        tmpstr = NULL;
1026                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1027                        drawchannellist(channellist, list, listbox);
1028                        continue;
1029                }
1030                if(rcret == getrcconfigint("rcyellow", NULL))
1031                {
1032                        list = PROVIDERLIST;
1033                        if(nochanneltitle == 0) changetitle(channellist, _("Provider"));
1034                        delmarkedscreennodes(channellist, 1);
1035                        delmarkedscreennodes(channellist, 2);
1036                        showprovider(channellist, listbox);
1037                        if(status.servicetype == 0)
1038                        {
1039                                delconfigtmp("channellist");
1040                                tmpstr = getconfig("channellist", NULL);
1041                        }
1042                        else
1043                        {
1044                                delconfigtmp("rchannellist");
1045                                tmpstr = getconfig("rchannellist", NULL);
1046                        }
1047                        if(ostrncmp("(PROVIDER)-", tmpstr, 11) != 0) tmpstr = NULL;
1048                        if(tmpstr != NULL && strlen(tmpstr) > 11)
1049                                setlistboxselection(listbox, tmpstr + 11);
1050                        else
1051                        {
1052                                listbox->aktpage = -1;
1053                                listbox->aktline = 1;
1054                        }
1055                        tmpstr = NULL;
1056                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1057                        drawchannellist(channellist, list, listbox);
1058                        continue;
1059                }
1060                if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && rcret == getrcconfigint("rcok", NULL))
1061                {
1062                        if(listbox->select != NULL && listbox->select->handle != NULL)
1063                        {
1064                                if(flag == 1)
1065                                {
1066                                        if(retchannel != NULL)
1067                                                *retchannel = (struct channel*)listbox->select->handle;
1068                                        if(retchannellist != NULL)
1069                                        {
1070                                                if(status.servicetype == 0)
1071                                                        *retchannellist = ostrcat(getconfig("channellist", NULL), "", 0, 0);
1072                                                else
1073                                                        *retchannellist = ostrcat(getconfig("rchannellist", NULL), "", 0, 0);
1074                                        }
1075                                        break;
1076                                }
1077
1078                                clearscreen(channellist);
1079                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1080                                resettvpic();
1081                                drawscreen(skin, 0);
1082                                if(status.servicetype == 0)
1083                                        ret = servicestart((struct channel*)listbox->select->handle, getconfig("channellist", NULL), NULL, 0);
1084                                else
1085                                        ret = servicestart((struct channel*)listbox->select->handle, getconfig("rchannellist", NULL), NULL, 0);
1086                                if(ret == 20) writeconfigtmp();
1087                                servicecheckret(ret, 0);
1088                                break;
1089                        }
1090                        continue;
1091                }
1092                if(list == BOUQUETCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1093                {
1094                        struct mainbouquet* tmpaktlist = ((struct mainbouquet*)aktlist);
1095
1096                        int round = 0;
1097                        while(tmpaktlist != NULL)
1098                        {
1099                                if(rcret == getrcconfigint("rcff", NULL))
1100                                {
1101                                        tmpaktlist = tmpaktlist->next;
1102                                        if(tmpaktlist == NULL && round == 0)   
1103                                        {
1104                                                round = 1;
1105                                                tmpaktlist = mainbouquet;
1106                                        }
1107                                }
1108                                else if(rcret == getrcconfigint("rcfr", NULL))
1109                                {
1110                                        tmpaktlist = tmpaktlist->prev;
1111                                        if(tmpaktlist == NULL && round == 0)   
1112                                        {
1113                                                round = 1;
1114                                                tmpaktlist = getlastmainbouquet(mainbouquet);
1115                                        }
1116                                }
1117                                if(tmpaktlist == NULL) break;
1118                                if(tmpaktlist->type != status.servicetype) continue;
1119
1120                                delmarkedscreennodes(channellist, 1);
1121                                struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1122                                if(tmpnode != NULL)
1123                                {
1124                                        listbox->aktline = 1;
1125                                        listbox->aktpage = -1;
1126
1127                                        status.screencalc = 2;
1128                                        drawscreen(channellist, 0);
1129                                        status.screencalc = 0;
1130                                        changetext(tmpnode, tmpaktlist->name);
1131                                        tmpnode->handle = (char*)tmpaktlist->bouquet;
1132                                        tmpnode->handle1 = (char*)tmpaktlist;
1133                                        rcret = getrcconfigint("rcok", NULL);
1134                                        list = MAINBOUQUETLIST;
1135                                        break;
1136                                }
1137                        }
1138                }
1139                if(list == MAINBOUQUETLIST && rcret == getrcconfigint("rcok", NULL))
1140                {
1141                        if(listbox->select != NULL)
1142                        {
1143                                list = BOUQUETCHANNEL;
1144                                tmpstr = ostrcat(tmpstr, _("Bouquets"), 0, 0);
1145                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1146                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1147                                if(nochanneltitle == 0) changetitle(channellist, tmpstr);
1148                                free(tmpstr); tmpstr = NULL;
1149                                tmpstr = ostrcat(tmpstr, "(BOUQUET)-", 0, 0);
1150                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1151                                if(status.servicetype == 0)
1152                                        addconfigtmp("channellist", tmpstr);
1153                                else
1154                                        addconfigtmp("rchannellist", tmpstr);
1155                                free(tmpstr); tmpstr = NULL;
1156                                aktlist = listbox->select->handle1;
1157                                showbouquetchannel(channellist, listbox, channeltimeline, (struct bouquet*)listbox->select->handle, flag);
1158                                delmarkedscreennodes(channellist, 2);
1159                                selectchannel(listbox, 0, 0);
1160                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1161                                drawchannellist(channellist, list, listbox);
1162                        }
1163                        continue;
1164                }
1165                if(list == SATCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1166                {
1167                        struct sat* tmpaktlist = ((struct sat*)aktlist);
1168
1169                        int round = 0;
1170                        while(tmpaktlist != NULL)
1171                        {
1172                                if(rcret == getrcconfigint("rcff", NULL))
1173                                {
1174                                        tmpaktlist = tmpaktlist->next;
1175                                        if(tmpaktlist == NULL && round == 0)   
1176                                        {
1177                                                round = 1;
1178                                                tmpaktlist = sat;
1179                                        }
1180                                }
1181                                else if(rcret == getrcconfigint("rcfr", NULL))
1182                                {
1183                                        tmpaktlist = tmpaktlist->prev;
1184                                        if(tmpaktlist == NULL && round == 0)   
1185                                        {
1186                                                round = 1;
1187                                                tmpaktlist = getlastsat(sat);
1188                                        }
1189                                }
1190                                if(tmpaktlist == NULL) break;
1191
1192                                delmarkedscreennodes(channellist, 1);
1193                                struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1194                                if(tmpnode != NULL)
1195                                {
1196                                        listbox->aktline = 1;
1197                                        listbox->aktpage = -1;
1198
1199                                        status.screencalc = 2;
1200                                        drawscreen(channellist, 0);
1201                                        status.screencalc = 0;
1202                                        changetext(tmpnode, tmpaktlist->name);
1203                                        tmpnode->handle = (char*)tmpaktlist;
1204                                        tmpnode->handle1 = (char*)tmpaktlist;
1205                                        rcret = getrcconfigint("rcok", NULL);
1206                                        list = SATLIST;
1207                                        break;
1208                                }
1209                        }
1210                }
1211                if(list == SATLIST && rcret == getrcconfigint("rcok", NULL))
1212                {
1213                        if(listbox->select != NULL)
1214                        {
1215                                list = SATCHANNEL;
1216                                tmpstr = ostrcat(tmpstr, _("Satellites"), 0, 0);
1217                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1218                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1219                                if(nochanneltitle == 0) changetitle(channellist, tmpstr);
1220                                free(tmpstr); tmpstr = NULL;
1221                                tmpstr = ostrcat(tmpstr, "(SAT)-", 0, 0);
1222                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1223                                if(status.servicetype == 0)
1224                                        addconfigtmp("channellist", tmpstr);
1225                                else
1226                                        addconfigtmp("rchannellist", tmpstr);
1227                                free(tmpstr); tmpstr = NULL;
1228                                aktlist = listbox->select->handle;
1229                                showsatchannel(channellist, listbox, (struct sat*)listbox->select->handle, flag);
1230                                delmarkedscreennodes(channellist, 2);
1231                                selectchannel(listbox, 0, 0);
1232                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1233                                drawchannellist(channellist, list, listbox);
1234                        }
1235                        continue;
1236                }
1237                if(list == AZCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1238                {
1239                        int tmpaktlist = (int)aktlist;
1240
1241                        if(rcret == getrcconfigint("rcff", NULL))
1242                        {
1243                                tmpaktlist++;
1244                                if(tmpaktlist > 90) tmpaktlist = 65;
1245                        }
1246                        else if(rcret == getrcconfigint("rcfr", NULL))
1247                        {
1248                                tmpaktlist--;
1249                                if(tmpaktlist < 65) tmpaktlist = 90;
1250                        }
1251
1252                        delmarkedscreennodes(channellist, 1);
1253                        struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1254                        if(tmpnode != NULL)
1255                        {
1256                                listbox->aktline = 1;
1257                                listbox->aktpage = -1;
1258
1259                                status.screencalc = 2;
1260                                drawscreen(channellist, 0);
1261                                status.screencalc = 0;
1262                                tmpstr = malloc(2);
1263                                if(tmpstr != NULL)
1264                                {
1265                                        snprintf(tmpstr, 2, "%c", tmpaktlist);
1266                                        changetext(tmpnode, tmpstr);
1267                                        free(tmpstr); tmpstr = NULL;
1268                                }
1269                                tmpnode->handle = (char*)tmpaktlist;
1270                                tmpnode->handle1 = (char*)tmpaktlist;
1271                                rcret = getrcconfigint("rcok", NULL);
1272                                list = AZLIST;
1273                        }
1274                }
1275                if(list == AZLIST && rcret == getrcconfigint("rcok", NULL))
1276                {
1277                        if(listbox->select != NULL)
1278                        {
1279                                list = AZCHANNEL;
1280                                tmpstr = ostrcat(tmpstr, _("Channel"), 0, 0);
1281                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1282                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1283                                if(nochanneltitle == 0) changetitle(channellist, tmpstr);
1284                                free(tmpstr); tmpstr = NULL;
1285                                tmpstr = ostrcat(tmpstr, "(A-Z)-", 0, 0);
1286                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1287                                if(status.servicetype == 0)
1288                                        addconfigtmp("channellist", tmpstr);
1289                                else
1290                                        addconfigtmp("rchannellist", tmpstr);
1291                                free(tmpstr); tmpstr = NULL;
1292                                aktlist = listbox->select->handle;
1293                                showazchannel(channellist, listbox, (int)listbox->select->handle, flag);
1294                                delmarkedscreennodes(channellist, 2);
1295                                selectchannel(listbox, 0, 0);
1296                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1297                                drawchannellist(channellist, list, listbox);
1298                        }
1299                        continue;
1300                }
1301                if(list == PROVIDERCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1302                {
1303                        struct provider* tmpaktlist = ((struct provider*)aktlist);
1304
1305                        int round = 0;
1306                        while(tmpaktlist != NULL)
1307                        {
1308                                if(rcret == getrcconfigint("rcff", NULL))
1309                                {
1310                                        tmpaktlist = tmpaktlist->next;
1311                                        if(tmpaktlist == NULL && round == 0)   
1312                                        {
1313                                                round = 1;
1314                                                tmpaktlist = provider;
1315                                        }
1316                                }
1317                                else if(rcret == getrcconfigint("rcfr", NULL))
1318                                {
1319                                        tmpaktlist = tmpaktlist->prev;
1320                                        if(tmpaktlist == NULL && round == 0)   
1321                                        {
1322                                                round = 1;
1323                                                tmpaktlist = getlastprovider(provider);
1324                                        }
1325                                }
1326                                if(tmpaktlist == NULL) break;
1327
1328                                delmarkedscreennodes(channellist, 1);
1329                                struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1330                                if(tmpnode != NULL)
1331                                {
1332                                        listbox->aktline = 1;
1333                                        listbox->aktpage = -1;
1334
1335                                        status.screencalc = 2;
1336                                        drawscreen(channellist, 0);
1337                                        status.screencalc = 0;
1338                                        changetext(tmpnode, tmpaktlist->name);
1339                                        tmpnode->handle = (char*)tmpaktlist;
1340                                        tmpnode->handle1 = (char*)tmpaktlist;
1341                                        rcret = getrcconfigint("rcok", NULL);
1342                                        list = PROVIDERLIST;
1343                                        break;
1344                                }
1345                        }
1346                }
1347                if(list == PROVIDERLIST && rcret == getrcconfigint("rcok", NULL))
1348                {
1349                        if(listbox->select != NULL)
1350                        {
1351                                list = PROVIDERCHANNEL;
1352                                tmpstr = ostrcat(tmpstr, _("Provider"), 0, 0);
1353                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1354                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1355                                if(nochanneltitle == 0) changetitle(channellist, tmpstr);
1356                                free(tmpstr); tmpstr = NULL;
1357                                tmpstr = ostrcat(tmpstr, "(PROVIDER)-", 0, 0);
1358                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1359                                if(status.servicetype == 0)
1360                                        addconfigtmp("channellist", tmpstr);
1361                                else
1362                                        addconfigtmp("rchannellist", tmpstr);
1363                                free(tmpstr); tmpstr = NULL;
1364                                aktlist = listbox->select->handle;
1365                                showproviderchannel(channellist, listbox, (struct provider*) listbox->select->handle, flag);
1366                                delmarkedscreennodes(channellist, 2);
1367                                selectchannel(listbox, 0, 0);
1368                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1369                                drawchannellist(channellist, list, listbox);
1370                        }
1371                        continue;
1372                }
1373                if(flag == 0 && rcret == getrcconfigint("rcmenu", NULL))
1374                {
1375                        if(list == AZLIST) continue;
1376
1377                        int sid = 0;
1378                        unsigned long tid = 0;
1379                        if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && listbox->select->handle != NULL)
1380                        {
1381                                sid = ((struct channel*)listbox->select->handle)->serviceid;
1382                                tid = ((struct channel*)listbox->select->handle)->transponderid;
1383                        }
1384
1385                        clearscreen(channellist);
1386                        if(listbox->select != NULL)
1387                                listmode = screenlistedit(list, (struct channel*)listbox->select->handle);
1388                        else
1389                                listmode = screenlistedit(list, NULL);
1390                               
1391                        if(listmode == MVMODE)
1392                        {
1393                                delrc(getrcconfigint("rcright", NULL), channellist, listbox);
1394                                delrc(getrcconfigint("rcleft", NULL), channellist, listbox);
1395                        }
1396                        else
1397                                addscreenrc(channellist, listbox);
1398
1399                        if(nochanneltitle == 0) changechanneltitle(channellist, listmode, &oldtitle);
1400
1401                        if(listmode == NOMODE && flag == 3) flag = 0;
1402                        delmarkedscreennodes(channellist, 1);
1403                        delmarkedscreennodes(channellist, 2);
1404                        recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
1405                        selectchannel(listbox, sid, tid);
1406                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1407                        drawscreen(channellist, 0);
1408                        continue;
1409                }
1410                if(flag == 0 && rcret == getrcconfigint("rcepg", NULL) && (list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL))
1411                {
1412                        if(listbox->select != NULL)
1413                        {
1414                                clearscreen(channellist);
1415                                epgchoice((struct channel*)listbox->select->handle);
1416                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1417                                drawscreen(channellist, 0);
1418                        }
1419                        continue;
1420                }
1421                if(flag == 0 && rcret == getrcconfigint("rcinfo", NULL))
1422                {
1423                        if(status.servicetype == 0)
1424                        {
1425                                status.servicetype = 1;
1426                                changetext(b7, _("TV (Info)"));
1427                        }
1428                        else
1429                        {
1430                                status.servicetype = 0;
1431                                changetext(b7, _("Radio (Info)"));
1432                        }
1433                        newmodus = 1;
1434                        break;
1435                }
1436        }
1437
1438end:
1439        free(oldtitle);
1440        status.markedchannel = NULL;
1441        status.markmodus = 0;
1442        status.screencalc = 0;
1443        delmarkedscreennodes(channellist, 1);
1444        delmarkedscreennodes(channellist, 2);
1445        delownerrc(channellist);
1446        delconfigtmp("channellist");
1447        delconfigtmp("rchannellist");
1448        clearscreen(channellist);
1449        if(newmodus == 1) goto start;
1450        status.channelswitch = 0;
1451        resettvpic();
1452        return ret;
1453}
1454
1455#endif
Note: See TracBrowser for help on using the repository browser.