source: titan/titan/channellist.h @ 15581

Last change on this file since 15581 was 15581, checked in by obi, 12 years ago

fix

File size: 43.7 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, long** oldcol)
450{
451        char* tmpstr = NULL;
452
453        if(*oldtitle == NULL)
454                *oldtitle = ostrcat(channellist->title, NULL, 0, 0);
455
456        if(*oldcol == NULL)
457                *oldcol = channellist->color;
458
459        if(listmode == MVMODE)
460        {
461                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
462                tmpstr = ostrcat(tmpstr, _("Move mode"), 1, 0);
463                changetitle(channellist, tmpstr);
464                channellist->color = convercol("mvmode");
465        }
466        else if(listmode == RMMODE)
467        {
468                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
469                tmpstr = ostrcat(tmpstr, _("Remove mode"), 1, 0);
470                changetitle(channellist, tmpstr);
471                channellist->color = convercol("rmmode");
472        }
473        else if(listmode == CPMODE)
474        {
475                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
476                tmpstr = ostrcat(tmpstr, _("Copy mode"), 1, 0);
477                changetitle(channellist, tmpstr);
478                channellist->color = convercol("cpmode");               
479        }
480        else if(listmode == PROTECTMODE)
481        {
482                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
483                tmpstr = ostrcat(tmpstr, _("Protect mode"), 1, 0);
484                changetitle(channellist, tmpstr);
485                channellist->color = convercol("protectmode");
486        }
487        else if(listmode == EDITMODE)
488        {
489                tmpstr = ostrcat(*oldtitle, " - ", 0, 0);
490                tmpstr = ostrcat(tmpstr, _("Edit mode"), 1, 0);
491                changetitle(channellist, tmpstr);
492                channellist->color = convercol("editmode");
493        }
494        else
495        {       
496                changetitle(channellist, *oldtitle);
497                *oldtitle = NULL;
498                channellist->color = *oldcol;
499        }
500}
501
502//flag 1: called from recordtimer screen
503//flag 2: rcfav (open bouquetlist)
504//flag 3: edit modus
505int screenchannellist(struct channel** retchannel, char** retchannellist, int flag)
506{
507        struct skin* channellist = getscreen("channellist");
508        struct skin* listbox = getscreennode(channellist, "listbox");
509        struct skin* channeltimeline = getscreennode(channellist, "channeltimeline");
510        struct skin* b1 = getscreennode(channellist, "b1");
511        struct skin* b2 = getscreennode(channellist, "b2");
512        struct skin* b3 = getscreennode(channellist, "b3");
513        struct skin* b4 = getscreennode(channellist, "b4");
514        struct skin* b5 = getscreennode(channellist, "b5");
515        struct skin* b6 = getscreennode(channellist, "b6");
516        struct skin* b7 = getscreennode(channellist, "b7");
517        struct skin* b8 = getscreennode(channellist, "b8");
518        struct skin* b9 = getscreennode(channellist, "b9");
519        struct skin* tmpskin;
520        int rcret, ret, listmode, newmodus, list;
521        char* tmpstr = NULL, *tmpstr1 = NULL, *oldtitle = NULL;
522        void* movesel = NULL, *aktlist = NULL;
523        int nochanneltitle = getskinconfigint("nochanneltitle", NULL);
524        int firstdraw = 0;
525        long oldcol = 0;
526       
527        status.channelswitch = 1;
528
529start:
530        rcret = 0, ret = -1, list = ALLCHANNEL, listmode = NOMODE, newmodus = 0;
531        tmpstr = NULL, tmpstr1 = NULL, movesel = NULL, aktlist = NULL, tmpskin = NULL;
532        if(nochanneltitle == 0) changetitle(channellist, "");
533
534        if(status.servicetype == 0)
535        {
536                tmpstr = getconfig("channellist", NULL);
537                changetext(b7, _("Radio (Info)"));
538        }
539        else
540        {
541                tmpstr = getconfig("rchannellist", NULL);
542                changetext(b7, _("TV (Info)"));
543        }
544        if(ostrncmp("(BOUQUET)-", tmpstr, 10) == 0 && strlen(tmpstr) > 10)
545        {
546                struct mainbouquet* mainbouquetnode = NULL;
547                mainbouquetnode = getmainbouquet(tmpstr + 10);
548                if(mainbouquetnode != NULL && mainbouquetnode->bouquet != NULL)
549                {
550                        tmpstr1 = ostrcat(tmpstr1, _("Bouquets"), 0, 0);
551                        tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
552                        tmpstr1 = ostrcat(tmpstr1, tmpstr + 10, 1, 0);
553                        if(nochanneltitle == 0) changetitle(channellist, tmpstr1);
554                        free(tmpstr1); tmpstr1 = NULL;
555                        list = BOUQUETCHANNEL;
556                        aktlist = (void*)mainbouquetnode;
557                        showbouquetchannel(channellist, listbox, channeltimeline, mainbouquetnode->bouquet, flag);
558                        selectchannel(listbox, 0, 0);
559                }
560        }
561        else if(ostrncmp("(A-Z)-", tmpstr, 6) == 0 && strlen(tmpstr) > 6)
562        {
563                tmpstr1 = ostrcat(tmpstr1, _("Channel"), 0, 0);
564                tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
565                tmpstr1 = ostrcat(tmpstr1, tmpstr + 6, 1, 0);
566                if(nochanneltitle == 0) changetitle(channellist, tmpstr1);
567                free(tmpstr1); tmpstr1 = NULL;
568                list = AZCHANNEL;
569                aktlist = (void*)(int)tmpstr[6];
570                showazchannel(channellist, listbox, (int)tmpstr[6], flag);
571                selectchannel(listbox, 0, 0);
572        }
573        else if(ostrncmp("(SAT)-", tmpstr, 6) == 0 && strlen(tmpstr) > 6)
574        {
575                tmpstr1 = ostrcat(tmpstr1, _("Satellites"), 0, 0);
576                tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
577                tmpstr1 = ostrcat(tmpstr1, tmpstr + 6, 1, 0);
578                if(nochanneltitle == 0) changetitle(channellist, tmpstr1);
579                free(tmpstr1); tmpstr1 = NULL;
580                struct sat* satnode = getsat(tmpstr + 6);
581                list = SATCHANNEL;
582                aktlist = (void*)satnode;
583                showsatchannel(channellist, listbox, satnode, flag);
584                selectchannel(listbox, 0, 0);
585        }
586        else if(ostrncmp("(PROVIDER)-", tmpstr, 11) == 0 && strlen(tmpstr) > 6)
587        {
588                tmpstr1 = ostrcat(tmpstr1, _("Provider"), 0, 0);
589                tmpstr1 = ostrcat(tmpstr1, " - ", 1, 0);
590                tmpstr1 = ostrcat(tmpstr1, tmpstr + 11, 1, 0);
591                if(nochanneltitle == 0) changetitle(channellist, tmpstr1);
592                free(tmpstr1); tmpstr1 = NULL;
593                struct provider* providernode = getproviderbyname(tmpstr + 11);
594                list = PROVIDERCHANNEL;
595                aktlist = (void*)providernode;
596                showproviderchannel(channellist, listbox, providernode, flag);
597                selectchannel(listbox, 0, 0);
598        }
599        else
600        {
601                if(nochanneltitle == 0) changetitle(channellist, _("All Channels"));
602                list = ALLCHANNEL;
603                showallchannel(channellist, listbox, flag);
604                selectchannel(listbox, 0, 0);
605        }
606
607        tmpstr = NULL;
608        if(status.screenanim > 0 && firstdraw == 0)
609        {
610                firstdraw = 1;
611                drawscreen(channellist, 4);
612        }
613        else
614        {
615                status.screencalc = 2;
616                drawscreen(channellist, 0);
617                status.screencalc = 0;
618        }
619        addscreenrc(channellist, listbox);
620
621        if(flag == 3)
622        {
623                if(listbox->select != NULL)
624                        listmode = screenlistedit(list, (struct channel*)listbox->select->handle);
625                if(listmode == NOMODE) goto end;
626                if(nochanneltitle == 0) changechanneltitle(channellist, listmode, &oldtitle, &oldcol);
627        }
628        if(flag != 2)
629        {
630                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
631                drawchannellist(channellist, list, listbox);
632        }
633
634        while(1)
635        {
636                if(flag == 2)
637                {
638                        rcret = getrcconfigint("rcblue", NULL);
639                        flag = 0;
640                }
641                else
642                {
643                        status.screencalc = 2;
644                        rcret = waitrc(channellist, 10000, 0);
645                        status.screencalc = 0;
646                }
647
648                //read epg new
649                if(listbox != NULL && listbox->select != NULL && (list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL))
650                {
651                        tmpskin = listbox->select;
652                        while(tmpskin != NULL)
653                        {
654                                if(tmpskin->pagecount != listbox->aktpage) break;
655                                changechannelepg((struct channel*)tmpskin->handle, tmpskin);
656                                tmpskin = tmpskin->prev;
657                        }
658                        tmpskin = listbox->select;
659                        while(tmpskin != NULL)
660                        {
661                                if(tmpskin->pagecount != listbox->aktpage) break;
662                                changechannelepg((struct channel*)tmpskin->handle, tmpskin);
663                                tmpskin = tmpskin->next;
664                        }
665                }
666
667                if(rcret == getrcconfigint("rcup", NULL) || rcret == getrcconfigint("rcdown", NULL) || rcret == getrcconfigint("rcleft", NULL) || rcret == getrcconfigint("rcright", NULL))
668                {
669                        if(listmode != MVMODE || (listmode == MVMODE && status.markmodus == 0))
670                        {
671                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
672                                drawchannellist(channellist, list, listbox);
673                        }
674                }
675
676                if(rcret == RCTIMEOUT)
677                {
678                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
679                        drawscreen(channellist, 0);
680                }
681
682                if(rcret == getrcconfigint("rcexit", NULL)) break;
683
684                if((flag == 0 || flag == 3) && listmode > NOMODE)
685                {
686
687                        if(rcret == getrcconfigint("rcmenu", NULL))
688                        {
689                                int sid = 0;
690                                unsigned long tid = 0;
691                                if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && listbox->select->handle != NULL)
692                                {
693                                        sid = ((struct channel*)listbox->select->handle)->serviceid;
694                                        tid = ((struct channel*)listbox->select->handle)->transponderid;
695                                }
696
697                                status.markmodus = 0;
698                                movesel = NULL;
699                                clearscreen(channellist);
700                                listmode = screenlistedit(list, NULL);
701                                if(listmode == MVMODE)
702                                {
703                                        delrc(getrcconfigint("rcright", NULL), channellist, listbox);
704                                        delrc(getrcconfigint("rcleft", NULL), channellist, listbox);
705                                }
706                                else
707                                        addscreenrc(channellist, listbox);
708                                if(listmode == NOMODE && flag == 3) flag = 0;
709
710                                if(nochanneltitle == 0) changechanneltitle(channellist, listmode, &oldtitle, &oldcol);
711
712                                delmarkedscreennodes(channellist, 1);
713                                delmarkedscreennodes(channellist, 2);
714                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
715                                selectchannel(listbox, sid, tid);
716                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
717                                drawscreen(channellist, 0);
718                        }
719                        if(listmode == PROTECTMODE && listbox->select != NULL && listbox->select->handle != NULL && rcret == getrcconfigint("rcok", NULL))
720                        {
721                                if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && listbox->select->handle != NULL)
722                                {
723                                        if(((struct channel*)listbox->select->handle)->protect == 0)
724                                                ((struct channel*)listbox->select->handle)->protect = 1;
725                                        else
726                                        {
727                                                if(screenpincheck(1, NULL) == 0)
728                                                        ((struct channel*)listbox->select->handle)->protect = 0;
729                                        }
730                                        status.writechannel = 1;
731                                }
732                                delmarkedscreennodes(channellist, 1);
733                                delmarkedscreennodes(channellist, 2);
734                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
735                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
736                                drawscreen(channellist, 0);
737                        }
738                        if(listmode == CPMODE && listbox->select != NULL && listbox->select->handle != NULL && rcret == getrcconfigint("rcok", NULL))
739                        {
740                                struct mainbouquet* mbouquet = screenmainbouquet();
741                                if(mbouquet != NULL && getbouquetbychannel(mbouquet->bouquet, ((struct channel*)listbox->select->handle)->serviceid, ((struct channel*)listbox->select->handle)->transponderid) == NULL)
742                                {
743                                        tmpstr1 = oitoa(((struct channel*)listbox->select->handle)->serviceid);
744                                        tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1); tmpstr1 = NULL;
745                                        tmpstr = ostrcat(tmpstr, "#", 1, 0);
746                                        tmpstr1 = oitoa(((struct channel*)listbox->select->handle)->transponderid);
747                                        tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1); tmpstr1 = NULL;
748                                        addbouquet(&mbouquet->bouquet, tmpstr, status.servicetype, 0, NULL);
749                                        free(tmpstr); tmpstr = NULL;
750                                        recalcbouquetnr();
751                                        if(list == BOUQUETCHANNEL)
752                                        {
753                                                delmarkedscreennodes(channellist, 1);
754                                                delmarkedscreennodes(channellist, 2);
755                                                showbouquetchannel(channellist, listbox, channeltimeline, ((struct mainbouquet*)aktlist)->bouquet, 1);
756                                        }
757                                }
758                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
759                                drawscreen(channellist, 0);
760                        }
761                        if(listmode == EDITMODE && listbox->select != NULL && listbox->select->handle1 != NULL && rcret == getrcconfigint("rcok", NULL))
762                        {
763                                if(list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL)
764                                {
765                                        struct channel* oldentry = ((struct channel*)listbox->select->handle1);
766                                        char* newentry = textinput(NULL, oldentry->name);
767                                        if(newentry != NULL)
768                                        {
769                                                newentry = stringreplacechar(newentry, '#', '_');
770                                                free(oldentry->name);
771                                                oldentry->name = newentry;
772                                                status.writechannel = 1;
773                                        }
774                                }
775                                if(list == MAINBOUQUETLIST)
776                                {
777                                        struct mainbouquet* oldentry = ((struct mainbouquet*)listbox->select->handle1);
778                                        char* newentry = textinput(NULL, oldentry->name);
779                                        if(newentry != NULL)
780                                        {
781                                                newentry = stringreplacechar(newentry, '#', '_');
782                                                free(oldentry->name);
783                                                oldentry->name = newentry;
784                                                status.writemainbouquet = 1;
785                                        }
786                                }
787                                if(list == BOUQUETCHANNEL)
788                                {
789                                        struct channel* oldentry = getchannel(((struct bouquet*)listbox->select->handle1)->serviceid, ((struct bouquet*)listbox->select->handle1)->transponderid);
790                                        if(oldentry != NULL)
791                                        {
792                                                char* newentry = textinput(NULL, oldentry->name);
793                                                if(newentry != NULL)
794                                                {
795                                                        newentry = stringreplacechar(newentry, '#', '_');
796                                                        free(oldentry->name);
797                                                        oldentry->name = newentry;
798                                                        status.writechannel = 1;
799                                                }
800                                        }
801                                }
802                                delmarkedscreennodes(channellist, 1);
803                                delmarkedscreennodes(channellist, 2);
804                                status.markedchannel = NULL;
805                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
806                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
807                                drawscreen(channellist, 0);
808                        }
809                        if(listmode == RMMODE && listbox->select != NULL && listbox->select->handle1 != NULL && rcret == getrcconfigint("rcok", NULL))
810                        {
811                                if(list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL)
812                                {
813                                        if(delchannel(((struct channel*)listbox->select->handle1)->serviceid, ((struct channel*)listbox->select->handle1)->transponderid, 0) == 0)
814                                        {
815                                                listbox->aktline--;
816                                                listbox->aktpage = -1;
817                                        }
818                                        else
819                                                textbox(_("Message"), _("Can't remove akive Service"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 7, 0);
820                                }
821                                if(list == SATLIST)
822                                {
823                                        delsat(((struct sat*)listbox->select->handle1)->name);
824                                        listbox->aktline--;
825                                        listbox->aktpage = -1;
826                                }
827                                if(list == PROVIDERLIST)
828                                {
829                                        delprovider(((struct provider*)listbox->select->handle1)->providerid);
830                                        listbox->aktline--;
831                                        listbox->aktpage = -1;
832                                }
833                                if(list == MAINBOUQUETLIST)
834                                {
835                                        delmainbouquet(((struct mainbouquet*)listbox->select->handle1)->name);
836                                        recalcbouquetnr();
837                                        listbox->aktline--;
838                                        listbox->aktpage = -1;
839                                }
840                                if(list == BOUQUETCHANNEL)
841                                {
842                                        delbouquet(((struct bouquet*)listbox->select->handle1)->serviceid, ((struct bouquet*)listbox->select->handle1)->transponderid, &((struct mainbouquet*)aktlist)->bouquet);
843                                        recalcbouquetnr();
844                                        listbox->aktline--;
845                                        listbox->aktpage = -1;
846                                }
847                                delmarkedscreennodes(channellist, 1);
848                                delmarkedscreennodes(channellist, 2);
849                                status.markedchannel = NULL;
850                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
851                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
852                                drawscreen(channellist, 0);
853                        }
854                        if(listmode == MVMODE && listbox->select != NULL && rcret == getrcconfigint("rcok", NULL))
855                        {
856                                if(movesel == NULL)
857                                {
858                                        status.markmodus = 1;
859                                        movesel = listbox->select->handle1;
860                                }
861                                else
862                                {
863                                        status.markmodus = 0;
864                                        movesel = NULL;
865                                }
866                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
867                                drawscreen(channellist, 0);
868                        }
869                        if(listmode == MVMODE && listbox->select != NULL && movesel != NULL && (rcret == getrcconfigint("rcup", NULL) || rcret == getrcconfigint("rcdown", NULL)))
870                        {
871                                if(rcret == getrcconfigint("rcup", NULL))
872                                {
873                                        if(list == ALLCHANNEL)
874                                        {
875                                                movechannelup(movesel);
876                                                while(((struct channel*)movesel)->next != NULL && ((struct channel*)movesel)->next->servicetype != status.servicetype)
877                                                        movechannelup(movesel);
878                                        }
879                                        if(list == SATLIST)
880                                                movesatup(movesel);
881                                        if(list == PROVIDERLIST)
882                                                moveproviderup(movesel);
883                                        if(list == MAINBOUQUETLIST)
884                                        {
885                                                movemainbouquetup(movesel);
886                                                while(((struct mainbouquet*)movesel)->next != NULL && ((struct mainbouquet*)movesel)->next->type != status.servicetype)
887                                                        movemainbouquetup(movesel);
888                                                recalcbouquetnr();
889                                        }
890                                        if(list == BOUQUETCHANNEL)
891                                        {
892                                                movebouquetup(movesel);
893                                                while(((struct bouquet*)movesel)->next != NULL && ((struct bouquet*)movesel)->next->channel != NULL && ((struct bouquet*)movesel)->next->channel->servicetype != status.servicetype)
894                                                        movebouquetup(movesel);
895                                                recalcbouquetnr();
896                                        }
897                                }
898                                if(rcret == getrcconfigint("rcdown", NULL))
899                                {
900                                        if(list == ALLCHANNEL)
901                                        {
902                                                movechanneldown(movesel);
903                                                while(((struct channel*)movesel)->prev != NULL && ((struct channel*)movesel)->prev->servicetype != status.servicetype)
904                                                        movechanneldown(movesel);
905                                        }
906                                        if(list == SATLIST)
907                                                movesatdown(movesel);
908                                        if(list == PROVIDERLIST)
909                                                moveproviderdown(movesel);
910                                        if(list == MAINBOUQUETLIST)
911                                        {
912                                                movemainbouquetdown(movesel);
913                                                while(((struct mainbouquet*)movesel)->prev != NULL && ((struct mainbouquet*)movesel)->prev->type != status.servicetype)
914                                                        movemainbouquetdown(movesel);
915                                                recalcbouquetnr();
916                                        }
917                                        if(list == BOUQUETCHANNEL)
918                                        {
919                                                movebouquetdown(movesel);
920                                                while(((struct bouquet*)movesel)->prev != NULL && ((struct bouquet*)movesel)->prev->channel != NULL && ((struct bouquet*)movesel)->prev->channel->servicetype != status.servicetype)
921                                                        movebouquetdown(movesel);
922                                                recalcbouquetnr();
923                                        }
924                                }
925                                delmarkedscreennodes(channellist, 1);
926                                delmarkedscreennodes(channellist, 2);
927                                recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
928                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
929                                drawscreen(channellist, 0);
930                        }
931                        continue;
932                }
933
934                if(rcret == getrcconfigint("rcred", NULL))
935                {
936                        list = ALLCHANNEL;
937                        if(status.servicetype == 0)
938                                addconfigtmp("channellist", "(ALL)");
939                        else
940                                addconfigtmp("rchannellist", "(ALL)");
941                        if(nochanneltitle == 0) changetitle(channellist, _("All Channels"));
942                        delmarkedscreennodes(channellist, 1);
943                        delmarkedscreennodes(channellist, 2);
944                        showallchannel(channellist, listbox, flag);
945                        selectchannel(listbox, 0, 0);
946                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
947                        drawchannellist(channellist, list, listbox);
948                        continue;
949                }
950                if(rcret == getrcconfigint("rcblue", NULL) || rcret == getrcconfigint("rcfav", NULL))
951                {
952                        list = MAINBOUQUETLIST;
953                        if(nochanneltitle == 0) changetitle(channellist, _("Bouquets"));
954                        delmarkedscreennodes(channellist, 1);
955                        delmarkedscreennodes(channellist, 2);
956                        showmainbouquet(channellist, listbox);
957                        if(status.servicetype == 0)
958                        {
959                                delconfigtmp("channellist");
960                                tmpstr = getconfig("channellist", NULL);
961                        }
962                        else
963                        {
964                                delconfigtmp("rchannellist");
965                                tmpstr = getconfig("rchannellist", NULL);
966                        }
967                        if(ostrncmp("(BOUQUET)-", tmpstr, 10) != 0) tmpstr = NULL;
968                        if(tmpstr != NULL && strlen(tmpstr) > 10)
969                                setlistboxselection(listbox, tmpstr + 10);
970                        else
971                        {
972                                listbox->aktpage = -1;
973                                listbox->aktline = 1;
974                        }
975                        tmpstr = NULL;
976                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
977                        drawchannellist(channellist, list, listbox);
978                        continue;
979                }
980                if(rcret == getrcconfigint("rcgreen", NULL))
981                {
982                        list = SATLIST;
983                        if(nochanneltitle == 0) changetitle(channellist, _("Satellites"));
984                        delmarkedscreennodes(channellist, 1);
985                        delmarkedscreennodes(channellist, 2);
986                        showsat(channellist, listbox);
987                        if(status.servicetype == 0)
988                        {
989                                delconfigtmp("channellist");
990                                tmpstr = getconfig("channellist", NULL);
991                        }
992                        else
993                        {
994                                delconfigtmp("rchannellist");
995                                tmpstr = getconfig("rchannellist", NULL);
996                        }
997                        if(ostrncmp("(SAT)-", tmpstr, 6) != 0) tmpstr = NULL;
998                        if(tmpstr != NULL && strlen(tmpstr) > 6)
999                                setlistboxselection(listbox, tmpstr + 6);
1000                        else
1001                        {
1002                                listbox->aktpage = -1;
1003                                listbox->aktline = 1;
1004                        }
1005                        tmpstr = NULL;
1006                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1007                        drawchannellist(channellist, list, listbox);
1008                        continue;
1009                }
1010                if(rcret == getrcconfigint("rctext", NULL))
1011                {
1012                        list = AZLIST;
1013                        if(nochanneltitle == 0) changetitle(channellist, _("Channels A-Z"));
1014                        delmarkedscreennodes(channellist, 1);
1015                        delmarkedscreennodes(channellist, 2);
1016                        showaz(channellist, listbox);
1017                        if(status.servicetype == 0)
1018                        {
1019                                delconfigtmp("channellist");
1020                                tmpstr = getconfig("channellist", NULL);
1021                        }
1022                        else
1023                        {
1024                                delconfigtmp("rchannellist");
1025                                tmpstr = getconfig("rchannellist", NULL);
1026                        }
1027                        if(ostrncmp("(A-Z)-", tmpstr, 6) != 0) tmpstr = NULL;
1028                        if(tmpstr != NULL && strlen(tmpstr) > 6)
1029                                setlistboxselection(listbox, &tmpstr[6]);
1030                        else
1031                        {
1032                                listbox->aktpage = -1;
1033                                listbox->aktline = 1;
1034                        }
1035                        tmpstr = NULL;
1036                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1037                        drawchannellist(channellist, list, listbox);
1038                        continue;
1039                }
1040                if(rcret == getrcconfigint("rcyellow", NULL))
1041                {
1042                        list = PROVIDERLIST;
1043                        if(nochanneltitle == 0) changetitle(channellist, _("Provider"));
1044                        delmarkedscreennodes(channellist, 1);
1045                        delmarkedscreennodes(channellist, 2);
1046                        showprovider(channellist, listbox);
1047                        if(status.servicetype == 0)
1048                        {
1049                                delconfigtmp("channellist");
1050                                tmpstr = getconfig("channellist", NULL);
1051                        }
1052                        else
1053                        {
1054                                delconfigtmp("rchannellist");
1055                                tmpstr = getconfig("rchannellist", NULL);
1056                        }
1057                        if(ostrncmp("(PROVIDER)-", tmpstr, 11) != 0) tmpstr = NULL;
1058                        if(tmpstr != NULL && strlen(tmpstr) > 11)
1059                                setlistboxselection(listbox, tmpstr + 11);
1060                        else
1061                        {
1062                                listbox->aktpage = -1;
1063                                listbox->aktline = 1;
1064                        }
1065                        tmpstr = NULL;
1066                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1067                        drawchannellist(channellist, list, listbox);
1068                        continue;
1069                }
1070                if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && rcret == getrcconfigint("rcok", NULL))
1071                {
1072                        if(listbox->select != NULL && listbox->select->handle != NULL)
1073                        {
1074                                if(flag == 1)
1075                                {
1076                                        if(retchannel != NULL)
1077                                                *retchannel = (struct channel*)listbox->select->handle;
1078                                        if(retchannellist != NULL)
1079                                        {
1080                                                if(status.servicetype == 0)
1081                                                        *retchannellist = ostrcat(getconfig("channellist", NULL), "", 0, 0);
1082                                                else
1083                                                        *retchannellist = ostrcat(getconfig("rchannellist", NULL), "", 0, 0);
1084                                        }
1085                                        break;
1086                                }
1087
1088                                clearscreen(channellist);
1089                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1090                                resettvpic();
1091                                drawscreen(skin, 0);
1092                                if(status.servicetype == 0)
1093                                        ret = servicestart((struct channel*)listbox->select->handle, getconfig("channellist", NULL), NULL, 0);
1094                                else
1095                                        ret = servicestart((struct channel*)listbox->select->handle, getconfig("rchannellist", NULL), NULL, 0);
1096                                if(ret == 20) writeconfigtmp();
1097                                servicecheckret(ret, 0);
1098                                break;
1099                        }
1100                        continue;
1101                }
1102                if(list == BOUQUETCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1103                {
1104                        struct mainbouquet* tmpaktlist = ((struct mainbouquet*)aktlist);
1105
1106                        int round = 0;
1107                        while(tmpaktlist != NULL)
1108                        {
1109                                if(rcret == getrcconfigint("rcff", NULL))
1110                                {
1111                                        tmpaktlist = tmpaktlist->next;
1112                                        if(tmpaktlist == NULL && round == 0)   
1113                                        {
1114                                                round = 1;
1115                                                tmpaktlist = mainbouquet;
1116                                        }
1117                                }
1118                                else if(rcret == getrcconfigint("rcfr", NULL))
1119                                {
1120                                        tmpaktlist = tmpaktlist->prev;
1121                                        if(tmpaktlist == NULL && round == 0)   
1122                                        {
1123                                                round = 1;
1124                                                tmpaktlist = getlastmainbouquet(mainbouquet);
1125                                        }
1126                                }
1127                                if(tmpaktlist == NULL) break;
1128                                if(tmpaktlist->type != status.servicetype) continue;
1129
1130                                delmarkedscreennodes(channellist, 1);
1131                                struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1132                                if(tmpnode != NULL)
1133                                {
1134                                        listbox->aktline = 1;
1135                                        listbox->aktpage = -1;
1136
1137                                        status.screencalc = 2;
1138                                        drawscreen(channellist, 0);
1139                                        status.screencalc = 0;
1140                                        changetext(tmpnode, tmpaktlist->name);
1141                                        tmpnode->handle = (char*)tmpaktlist->bouquet;
1142                                        tmpnode->handle1 = (char*)tmpaktlist;
1143                                        rcret = getrcconfigint("rcok", NULL);
1144                                        list = MAINBOUQUETLIST;
1145                                        break;
1146                                }
1147                        }
1148                }
1149                if(list == MAINBOUQUETLIST && rcret == getrcconfigint("rcok", NULL))
1150                {
1151                        if(listbox->select != NULL)
1152                        {
1153                                list = BOUQUETCHANNEL;
1154                                tmpstr = ostrcat(tmpstr, _("Bouquets"), 0, 0);
1155                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1156                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1157                                if(nochanneltitle == 0) changetitle(channellist, tmpstr);
1158                                free(tmpstr); tmpstr = NULL;
1159                                tmpstr = ostrcat(tmpstr, "(BOUQUET)-", 0, 0);
1160                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1161                                if(status.servicetype == 0)
1162                                        addconfigtmp("channellist", tmpstr);
1163                                else
1164                                        addconfigtmp("rchannellist", tmpstr);
1165                                free(tmpstr); tmpstr = NULL;
1166                                aktlist = listbox->select->handle1;
1167                                showbouquetchannel(channellist, listbox, channeltimeline, (struct bouquet*)listbox->select->handle, flag);
1168                                delmarkedscreennodes(channellist, 2);
1169                                selectchannel(listbox, 0, 0);
1170                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1171                                drawchannellist(channellist, list, listbox);
1172                        }
1173                        continue;
1174                }
1175                if(list == SATCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1176                {
1177                        struct sat* tmpaktlist = ((struct sat*)aktlist);
1178
1179                        int round = 0;
1180                        while(tmpaktlist != NULL)
1181                        {
1182                                if(rcret == getrcconfigint("rcff", NULL))
1183                                {
1184                                        tmpaktlist = tmpaktlist->next;
1185                                        if(tmpaktlist == NULL && round == 0)   
1186                                        {
1187                                                round = 1;
1188                                                tmpaktlist = sat;
1189                                        }
1190                                }
1191                                else if(rcret == getrcconfigint("rcfr", NULL))
1192                                {
1193                                        tmpaktlist = tmpaktlist->prev;
1194                                        if(tmpaktlist == NULL && round == 0)   
1195                                        {
1196                                                round = 1;
1197                                                tmpaktlist = getlastsat(sat);
1198                                        }
1199                                }
1200                                if(tmpaktlist == NULL) break;
1201
1202                                delmarkedscreennodes(channellist, 1);
1203                                struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1204                                if(tmpnode != NULL)
1205                                {
1206                                        listbox->aktline = 1;
1207                                        listbox->aktpage = -1;
1208
1209                                        status.screencalc = 2;
1210                                        drawscreen(channellist, 0);
1211                                        status.screencalc = 0;
1212                                        changetext(tmpnode, tmpaktlist->name);
1213                                        tmpnode->handle = (char*)tmpaktlist;
1214                                        tmpnode->handle1 = (char*)tmpaktlist;
1215                                        rcret = getrcconfigint("rcok", NULL);
1216                                        list = SATLIST;
1217                                        break;
1218                                }
1219                        }
1220                }
1221                if(list == SATLIST && rcret == getrcconfigint("rcok", NULL))
1222                {
1223                        if(listbox->select != NULL)
1224                        {
1225                                list = SATCHANNEL;
1226                                tmpstr = ostrcat(tmpstr, _("Satellites"), 0, 0);
1227                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1228                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1229                                if(nochanneltitle == 0) changetitle(channellist, tmpstr);
1230                                free(tmpstr); tmpstr = NULL;
1231                                tmpstr = ostrcat(tmpstr, "(SAT)-", 0, 0);
1232                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1233                                if(status.servicetype == 0)
1234                                        addconfigtmp("channellist", tmpstr);
1235                                else
1236                                        addconfigtmp("rchannellist", tmpstr);
1237                                free(tmpstr); tmpstr = NULL;
1238                                aktlist = listbox->select->handle;
1239                                showsatchannel(channellist, listbox, (struct sat*)listbox->select->handle, flag);
1240                                delmarkedscreennodes(channellist, 2);
1241                                selectchannel(listbox, 0, 0);
1242                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1243                                drawchannellist(channellist, list, listbox);
1244                        }
1245                        continue;
1246                }
1247                if(list == AZCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1248                {
1249                        int tmpaktlist = (int)aktlist;
1250
1251                        if(rcret == getrcconfigint("rcff", NULL))
1252                        {
1253                                tmpaktlist++;
1254                                if(tmpaktlist > 90) tmpaktlist = 65;
1255                        }
1256                        else if(rcret == getrcconfigint("rcfr", NULL))
1257                        {
1258                                tmpaktlist--;
1259                                if(tmpaktlist < 65) tmpaktlist = 90;
1260                        }
1261
1262                        delmarkedscreennodes(channellist, 1);
1263                        struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1264                        if(tmpnode != NULL)
1265                        {
1266                                listbox->aktline = 1;
1267                                listbox->aktpage = -1;
1268
1269                                status.screencalc = 2;
1270                                drawscreen(channellist, 0);
1271                                status.screencalc = 0;
1272                                tmpstr = malloc(2);
1273                                if(tmpstr != NULL)
1274                                {
1275                                        snprintf(tmpstr, 2, "%c", tmpaktlist);
1276                                        changetext(tmpnode, tmpstr);
1277                                        free(tmpstr); tmpstr = NULL;
1278                                }
1279                                tmpnode->handle = (char*)tmpaktlist;
1280                                tmpnode->handle1 = (char*)tmpaktlist;
1281                                rcret = getrcconfigint("rcok", NULL);
1282                                list = AZLIST;
1283                        }
1284                }
1285                if(list == AZLIST && rcret == getrcconfigint("rcok", NULL))
1286                {
1287                        if(listbox->select != NULL)
1288                        {
1289                                list = AZCHANNEL;
1290                                tmpstr = ostrcat(tmpstr, _("Channel"), 0, 0);
1291                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1292                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1293                                if(nochanneltitle == 0) changetitle(channellist, tmpstr);
1294                                free(tmpstr); tmpstr = NULL;
1295                                tmpstr = ostrcat(tmpstr, "(A-Z)-", 0, 0);
1296                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1297                                if(status.servicetype == 0)
1298                                        addconfigtmp("channellist", tmpstr);
1299                                else
1300                                        addconfigtmp("rchannellist", tmpstr);
1301                                free(tmpstr); tmpstr = NULL;
1302                                aktlist = listbox->select->handle;
1303                                showazchannel(channellist, listbox, (int)listbox->select->handle, flag);
1304                                delmarkedscreennodes(channellist, 2);
1305                                selectchannel(listbox, 0, 0);
1306                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1307                                drawchannellist(channellist, list, listbox);
1308                        }
1309                        continue;
1310                }
1311                if(list == PROVIDERCHANNEL && (rcret == getrcconfigint("rcff", NULL) || rcret == getrcconfigint("rcfr", NULL)))
1312                {
1313                        struct provider* tmpaktlist = ((struct provider*)aktlist);
1314
1315                        int round = 0;
1316                        while(tmpaktlist != NULL)
1317                        {
1318                                if(rcret == getrcconfigint("rcff", NULL))
1319                                {
1320                                        tmpaktlist = tmpaktlist->next;
1321                                        if(tmpaktlist == NULL && round == 0)   
1322                                        {
1323                                                round = 1;
1324                                                tmpaktlist = provider;
1325                                        }
1326                                }
1327                                else if(rcret == getrcconfigint("rcfr", NULL))
1328                                {
1329                                        tmpaktlist = tmpaktlist->prev;
1330                                        if(tmpaktlist == NULL && round == 0)   
1331                                        {
1332                                                round = 1;
1333                                                tmpaktlist = getlastprovider(provider);
1334                                        }
1335                                }
1336                                if(tmpaktlist == NULL) break;
1337
1338                                delmarkedscreennodes(channellist, 1);
1339                                struct skin* tmpnode = addlistbox(channellist, listbox, NULL, 2);
1340                                if(tmpnode != NULL)
1341                                {
1342                                        listbox->aktline = 1;
1343                                        listbox->aktpage = -1;
1344
1345                                        status.screencalc = 2;
1346                                        drawscreen(channellist, 0);
1347                                        status.screencalc = 0;
1348                                        changetext(tmpnode, tmpaktlist->name);
1349                                        tmpnode->handle = (char*)tmpaktlist;
1350                                        tmpnode->handle1 = (char*)tmpaktlist;
1351                                        rcret = getrcconfigint("rcok", NULL);
1352                                        list = PROVIDERLIST;
1353                                        break;
1354                                }
1355                        }
1356                }
1357                if(list == PROVIDERLIST && rcret == getrcconfigint("rcok", NULL))
1358                {
1359                        if(listbox->select != NULL)
1360                        {
1361                                list = PROVIDERCHANNEL;
1362                                tmpstr = ostrcat(tmpstr, _("Provider"), 0, 0);
1363                                tmpstr = ostrcat(tmpstr, " - ", 1, 0);
1364                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1365                                if(nochanneltitle == 0) changetitle(channellist, tmpstr);
1366                                free(tmpstr); tmpstr = NULL;
1367                                tmpstr = ostrcat(tmpstr, "(PROVIDER)-", 0, 0);
1368                                tmpstr = ostrcat(tmpstr, listbox->select->text, 1, 0);
1369                                if(status.servicetype == 0)
1370                                        addconfigtmp("channellist", tmpstr);
1371                                else
1372                                        addconfigtmp("rchannellist", tmpstr);
1373                                free(tmpstr); tmpstr = NULL;
1374                                aktlist = listbox->select->handle;
1375                                showproviderchannel(channellist, listbox, (struct provider*) listbox->select->handle, flag);
1376                                delmarkedscreennodes(channellist, 2);
1377                                selectchannel(listbox, 0, 0);
1378                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1379                                drawchannellist(channellist, list, listbox);
1380                        }
1381                        continue;
1382                }
1383                if(flag == 0 && rcret == getrcconfigint("rcmenu", NULL))
1384                {
1385                        if(list == AZLIST) continue;
1386
1387                        int sid = 0;
1388                        unsigned long tid = 0;
1389                        if((list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL) && listbox->select->handle != NULL)
1390                        {
1391                                sid = ((struct channel*)listbox->select->handle)->serviceid;
1392                                tid = ((struct channel*)listbox->select->handle)->transponderid;
1393                        }
1394
1395                        clearscreen(channellist);
1396                        if(listbox->select != NULL)
1397                                listmode = screenlistedit(list, (struct channel*)listbox->select->handle);
1398                        else
1399                                listmode = screenlistedit(list, NULL);
1400                               
1401                        if(listmode == MVMODE)
1402                        {
1403                                delrc(getrcconfigint("rcright", NULL), channellist, listbox);
1404                                delrc(getrcconfigint("rcleft", NULL), channellist, listbox);
1405                        }
1406                        else
1407                                addscreenrc(channellist, listbox);
1408
1409                        if(nochanneltitle == 0) changechanneltitle(channellist, listmode, &oldtitle, &oldcol);
1410
1411                        if(listmode == NOMODE && flag == 3) flag = 0;
1412                        delmarkedscreennodes(channellist, 1);
1413                        delmarkedscreennodes(channellist, 2);
1414                        recalclist(list, aktlist, listmode, channellist, listbox, channeltimeline);
1415                        selectchannel(listbox, sid, tid);
1416                        changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1417                        drawscreen(channellist, 0);
1418                        continue;
1419                }
1420                if(flag == 0 && rcret == getrcconfigint("rcepg", NULL) && (list == ALLCHANNEL || list == SATCHANNEL || list == PROVIDERCHANNEL || list == AZCHANNEL || list == BOUQUETCHANNEL))
1421                {
1422                        if(listbox->select != NULL)
1423                        {
1424                                clearscreen(channellist);
1425                                epgchoice((struct channel*)listbox->select->handle);
1426                                changebutton(listmode, b1, b2, b3, b4, b5, b6, b7, b8, b9);
1427                                drawscreen(channellist, 0);
1428                        }
1429                        continue;
1430                }
1431                if(flag == 0 && rcret == getrcconfigint("rcinfo", NULL))
1432                {
1433                        if(status.servicetype == 0)
1434                        {
1435                                status.servicetype = 1;
1436                                changetext(b7, _("TV (Info)"));
1437                        }
1438                        else
1439                        {
1440                                status.servicetype = 0;
1441                                changetext(b7, _("Radio (Info)"));
1442                        }
1443                        newmodus = 1;
1444                        break;
1445                }
1446        }
1447
1448end:
1449        free(oldtitle);
1450        status.markedchannel = NULL;
1451        status.markmodus = 0;
1452        status.screencalc = 0;
1453        delmarkedscreennodes(channellist, 1);
1454        delmarkedscreennodes(channellist, 2);
1455        delownerrc(channellist);
1456        delconfigtmp("channellist");
1457        delconfigtmp("rchannellist");
1458        clearscreen(channellist);
1459        if(newmodus == 1) goto start;
1460        status.channelswitch = 0;
1461        resettvpic();
1462        return ret;
1463}
1464
1465#endif
Note: See TracBrowser for help on using the repository browser.