source: titan/titan/channellist.h @ 15571

Last change on this file since 15571 was 15571, checked in by nit, 11 years ago

[titan] fix mark position with hidden channel

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