source: titan/titan/channellist.h @ 15550

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

fix

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