source: titan/titan/channellist.h @ 15578

Last change on this file since 15578 was 15578, checked in by obi, 11 years ago

fix

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