trunk 20080912
[gitenigma.git] / src / satconfig.cpp
blob52010479dbd865d9f1f82c8bae7d5ec961cd5dbc
1 #include <satconfig.h>
3 #include <enigma_main.h>
4 #include <lib/base/i18n.h>
5 #include <lib/gui/eskin.h>
6 #include <lib/gui/ebutton.h>
7 #include <lib/gui/emessage.h>
8 #include <lib/gui/echeckbox.h>
9 #include <lib/gui/eprogress.h>
10 #include <lib/dvb/edvb.h>
11 #include <lib/dvb/dvbservice.h>
12 #include <lib/dvb/frontend.h>
13 #include <lib/dvb/dvbwidgets.h>
14 #include <lib/system/info.h>
16 eSatelliteConfigurationManager::eSatelliteConfigurationManager()
17 :refresh(0)
19 init_eSatelliteConfigurationManager();
22 void eSatelliteConfigurationManager::init_eSatelliteConfigurationManager()
24 lSatPos = new eLabel(this);
25 lSatPos->setName("lSatPos");
27 lLNB = new eLabel(this);
28 lLNB->setName("lLnb");
29 lLNB->hide();
31 l22Khz = new eLabel(this);
32 l22Khz->setName("l22khz");
33 l22Khz->hide();
35 lVoltage = new eLabel(this);
36 lVoltage->setName("lVoltage");
37 lVoltage->hide();
39 scrollbar = new eProgress(this);
40 scrollbar->setName("scrollbar");
41 scrollbar->setStart(0);
42 scrollbar->setPerc(100);
44 button_close=new eButton(this);
45 button_close->setName("close");
46 CONNECT(button_close->selected, eSatelliteConfigurationManager::closePressed);
48 button_new=new eButton(this);
49 button_new->setName("new");
50 button_new->hide();
51 CONNECT(button_new->selected, eSatelliteConfigurationManager::newPressed);
53 button_erase=new eButton(this,0,0);
54 button_erase->setName("erase");
55 button_erase->hide();
56 CONNECT(button_erase->selected, eSatelliteConfigurationManager::erasePressed);
58 buttonWidget=new eWidget(this);
59 buttonWidget->setName("buttons");
61 combo_type=new eComboBox(this, 7);
62 combo_type->setName("type");
63 CONNECT(combo_type->selchanged, eSatelliteConfigurationManager::typeChanged);
64 new eListBoxEntryText( *combo_type, _("one single satellite"), (void*)0, 0, _("one directly connected LNB"));
65 new eListBoxEntryText( *combo_type, _("2 satellites via Toneburst"), (void*)5, 0, _("2 LNBs via Toneburst Signal"));
66 new eListBoxEntryText( *combo_type, _("2 satellites via 22Khz (only Highband)"), (void*)6, 0, _("2 LNBs via 22Khz Signal.. special for old analog switches"));
67 new eListBoxEntryText( *combo_type, _("2 satellites via DiSEqC A/B"), (void*)1, 0, _("2 LNBs via DiSEqC"));
68 new eListBoxEntryText( *combo_type, _("4 satellites via DiSEqC OPT A/B"), (void*)2, 0, _("4 LNBs via DiSEqC"));
69 new eListBoxEntryText( *combo_type, _("many satellites via DiSEqC Rotor"), (void*)3, 0, _("1 LNB with DiSEqC Rotor"));
70 new eListBoxEntryText( *combo_type, _("non-standard user defined configuration..."), (void*)4, 0, _("special"));
72 eSkin *skin=eSkin::getActive();
73 if (skin->build(this, "eSatelliteConfigurationManager"))
74 eFatal("skin load of \"eSatelliteConfigurationManager\" failed");
76 eSize s = buttonWidget->getSize();
77 s.setHeight( s.height()*16 );
79 w_buttons = new eWidget(buttonWidget);
80 w_buttons->resize( s );
81 w_buttons->move( ePoint(0,0) );
83 eTransponderList::getInstance()->reloadNetworks(); // load all networks from satellite.xml or cable.xml
84 createControlElements();
86 complexity=checkComplexity();
87 combo_type->setCurrent( (void*)complexity, true );
89 for ( int i = 0; i < 17; i++ )
90 pageEnds[i]=i*200;
92 curScrollPos = 0;
94 repositionWidgets();
96 CONNECT( eWidget::focusChanged, eSatelliteConfigurationManager::focusChanged );
98 setHelpID(66);
101 void eSatelliteConfigurationManager::focusChanged( const eWidget* focus )
103 if ( focus && focus->getName() == "satWidget" )
105 int old = curScrollPos;
106 for (unsigned int it=0; it < (sizeof(pageEnds)/sizeof(int)); ++it )
108 if ( focus->getPosition().y() < pageEnds[it] )
110 curScrollPos=it;
111 --curScrollPos;
112 break;
115 if ( curScrollPos != old )
117 w_buttons->move( ePoint(0, -pageEnds[curScrollPos]) );
118 updateScrollbar(complexity > 2 && complexity < 5);
123 void eSatelliteConfigurationManager::typeChanged(eListBoxEntryText* newtype)
125 int newcomplexity=(int)newtype->getKey();
126 if ( newcomplexity == complexity )
127 return;
128 // check if the new type is less complex than our current setup...
129 int newComp = newcomplexity > 4 ? 1 : newcomplexity;
130 int oldComp = checkComplexity();
131 if ( oldComp > 4 )
132 oldComp=1;
133 if ( oldComp > newComp )
135 eMessageBox mb(_("Configuration contains some elements\nwhich don't fit into new DiSEqC-Type. Drop these items?"), _("Change DiSEqC-Type..."), eMessageBox::iconWarning|eMessageBox::btYes|eMessageBox::btCancel);
136 hide();
137 mb.show();
138 int res=mb.exec();
139 mb.hide();
140 show();
141 if (res != eMessageBox::btYes)
143 combo_type->setCurrent((void*)complexity, false);
144 return;
147 setComplexity(complexity=newcomplexity);
148 updateButtons(newcomplexity);
151 void eSatelliteConfigurationManager::extSetComplexity(int complexity)
153 combo_type->setCurrent((void*)complexity, true);
154 checkComplexity();
157 void eSatelliteConfigurationManager::setComplexity(int complexity)
159 eDebug("setComplexitiy = %d", complexity);
160 int i=0;
162 switch (complexity)
164 case 0:
166 deleteSatellitesAbove(1);
167 while (eTransponderList::getInstance()->getLNBs().size() < 1)
168 createSatWidgets( createSatellite() );
169 for ( std::list<eLNB>::iterator it( eTransponderList::getInstance()->getLNBs().begin() ); it != eTransponderList::getInstance()->getLNBs().end(); ++it, ++i)
170 setSimpleDiseqc(it->getSatelliteList().first(), i);
171 break;
173 case 5:
174 case 6:
175 case 1:
176 deleteSatellitesAbove(2);
177 while (eTransponderList::getInstance()->getLNBs().size() < 2)
178 createSatWidgets( createSatellite() );
179 for ( std::list<eLNB>::iterator it( eTransponderList::getInstance()->getLNBs().begin() ); it != eTransponderList::getInstance()->getLNBs().end(); ++it, ++i)
181 setSimpleDiseqc( it->getSatelliteList().first(), i);
182 if ( complexity == 6 )
183 entryMap[it->getSatelliteList().first()].hilo->setCurrent(2-i);
185 break;
186 case 2:
187 deleteSatellitesAbove(4);
188 while (eTransponderList::getInstance()->getLNBs().size() < 4)
189 createSatWidgets( createSatellite() );
190 for ( std::list<eLNB>::iterator it( eTransponderList::getInstance()->getLNBs().begin() ); it != eTransponderList::getInstance()->getLNBs().end(); ++it, ++i)
191 setSimpleDiseqc(it->getSatelliteList().first(), i);
192 break;
193 case 3:
195 deleteSatellitesAbove(1);
197 if ( !eTransponderList::getInstance()->getLNBs().size() )
198 createSatWidgets( createSatellite() );
200 setSimpleDiseqc( eTransponderList::getInstance()->getLNBs().front().getSatelliteList().front(), 0 );
201 unsigned int used=0;
204 used = eTransponderList::getInstance()->getLNBs().front().getSatelliteList().size();
205 createSatWidgets( createSatellite() );
207 while ( used != eTransponderList::getInstance()->getLNBs().front().getSatelliteList().size() );
208 break;
210 case 4:
211 break;
213 checkComplexity();
214 repositionWidgets();
217 int eSatelliteConfigurationManager::checkComplexity()
219 int c=0, comp=0, rcomp=0;
220 for ( std::list<eLNB>::iterator it( eTransponderList::getInstance()->getLNBs().begin() ); it != eTransponderList::getInstance()->getLNBs().end(); it++)
222 if (it->getSatelliteList().size() != 1)
224 updateButtons(3);
225 if ( eTransponderList::getInstance()->getLNBs().size() > 1)
227 eDebug("complexity is 4 since lnb %d has more than one satellite, and we have more than one LNB.", c);
228 return 4;
230 eDebug("complexity is 3 since lnb %d has more than one satellite, and only one LNB exist.", c);
231 return 3;
232 } else
233 ++c;
234 int dc=checkDiseqcComplexity(it->getSatelliteList().first());
235 rcomp=dc;
236 int tmp = dc > 4 ? 2 : dc;
237 eDebug("LNB %d has %d", c, dc);
238 if (tmp > comp)
239 comp=tmp;
241 if (c > 4)
242 comp=3;
243 if ((comp < 2) && c>2)
244 comp=2;
245 if ((comp < 1) && c>1)
246 comp=1;
248 updateButtons(comp);
249 return rcomp>4?rcomp:comp;
252 void eSatelliteConfigurationManager::updateButtons(int comp)
254 if (comp < 3 || comp > 4)
256 lLNB->hide();
257 l22Khz->hide();
258 lVoltage->hide();
259 lSatPos->hide();
260 lSatPos->move( ePoint( 75, lSatPos->getPosition().y() ) );
261 lSatPos->show();
262 button_erase->hide();
263 button_new->hide();
265 else
267 lSatPos->hide();
268 lSatPos->move( ePoint( 0, lSatPos->getPosition().y() ) );
269 lSatPos->show();
270 lLNB->show();
271 l22Khz->show();
272 lVoltage->show();
273 button_new->show();
274 button_erase->show();
278 int eSatelliteConfigurationManager::checkDiseqcComplexity(eSatellite *s)
280 SatelliteEntry *se=0;
282 if (entryMap.count(s))
283 se=&entryMap[s];
285 if (s->getLNB()->getDiSEqC().DiSEqCMode == eDiSEqC::NONE &&
286 s->getLNB()->getDiSEqC().MiniDiSEqCParam == eDiSEqC::NO &&
287 s->getSwitchParams().HiLoSignal == eSwitchParameter::ON )
289 se->description->setText("22Khz On");
290 return 6;
293 if (s->getLNB()->getDiSEqC().DiSEqCMode == eDiSEqC::NONE &&
294 s->getLNB()->getDiSEqC().MiniDiSEqCParam == eDiSEqC::NO &&
295 s->getSwitchParams().HiLoSignal == eSwitchParameter::OFF )
297 se->description->setText("22Khz Off");
298 return 6;
301 if ( s->getLNB()->getLOFHi() != 10600000 ||
302 s->getLNB()->getLOFLo() != 9750000 ||
303 s->getLNB()->getLOFThreshold() != 11700000 )
305 eDebug("lof hi, lo or threshold changed");
306 return 4;
308 if (s->getSwitchParams().VoltageMode != eSwitchParameter::HV)
310 eDebug("voltage mode unusual");
311 return 4;
313 if (s->getSwitchParams().HiLoSignal != eSwitchParameter::HILO)
315 eDebug("sig22 mode unusual");
316 return 4;
319 if (s->getLNB()->getDiSEqC().DiSEqCMode == eDiSEqC::NONE)
321 switch (s->getLNB()->getDiSEqC().MiniDiSEqCParam)
323 case eDiSEqC::A:
324 if (se)
325 se->description->setText("Toneburst A");
326 return 5;
327 case eDiSEqC::B:
328 if (se)
329 se->description->setText("Toneburst B");
330 return 5;
331 case eDiSEqC::NO:
332 if (se)
333 se->description->setText(_("direct connection"));
334 return 0;
338 if (s->getLNB()->getDiSEqC().DiSEqCMode > eDiSEqC::V1_0)
340 eDebug("diseqc mode > 1.0");
341 return 4;
344 if (s->getLNB()->getDiSEqC().DiSEqCParam > 3)
346 eDebug("unusual diseqc parameter");
347 return 4;
350 if (se)
352 switch (s->getLNB()->getDiSEqC().DiSEqCParam)
354 case 0:
355 se->description->setText("DiSEqC AA");
356 break;
357 case 1:
358 se->description->setText("DiSEqC AB");
359 break;
360 case 2:
361 se->description->setText("DiSEqC BA");
362 break;
363 case 3:
364 se->description->setText("DiSEqC BB");
365 break;
369 // we have simple 1.0
370 if (s->getLNB()->getDiSEqC().DiSEqCParam > 1)
371 return 2;
373 if (s->getLNB()->getDiSEqC().DiSEqCParam)
374 return 1;
376 return 0;
379 void eSatelliteConfigurationManager::deleteSatellitesAbove(int n)
381 // it's all about invalidating ptrlist's iterators on delete :/
382 int count=0;
383 start:
384 int index=0;
385 for ( std::list<eLNB>::iterator it( eTransponderList::getInstance()->getLNBs().begin() ); (it != eTransponderList::getInstance()->getLNBs().end()); ++it)
386 for ( ePtrList<eSatellite>::iterator si = it->getSatelliteList().begin() ; si != it->getSatelliteList().end(); si++)
387 if ( it->getSatelliteList().size() > 1 || index++ >= n )
389 delSatellite(si, false, true);
390 ++count;
391 goto start;
394 if ( count )
396 eDVB::getInstance()->settings->removeDVBBouquets();
397 eDVB::getInstance()->settings->sortInChannels();
398 eDVB::getInstance()->settings->saveBouquets();
401 // redraw satellites
402 cleanupWidgets();
405 void eSatelliteConfigurationManager::setSimpleDiseqc(eSatellite *s, int diseqcnr)
407 eDebug("setSimpleDiSEqC %d", complexity );
408 s->getSwitchParams().VoltageMode=eSwitchParameter::HV;
409 eLNB *lnb=s->getLNB();
410 lnb->setDefaultOptions();
411 if ( complexity == 6 )
413 lnb->setLOFLo(10600000);
414 if ( diseqcnr )
415 s->getSwitchParams().HiLoSignal=eSwitchParameter::ON;
416 else
417 s->getSwitchParams().HiLoSignal=eSwitchParameter::OFF;
419 else
420 s->getSwitchParams().HiLoSignal=eSwitchParameter::HILO;
422 lnb->getDiSEqC().MiniDiSEqCParam=eDiSEqC::NO;
423 switch (complexity) // if we have diseqc at all
425 case 5:
426 if ( diseqcnr )
427 lnb->getDiSEqC().MiniDiSEqCParam=eDiSEqC::B;
428 else
429 lnb->getDiSEqC().MiniDiSEqCParam=eDiSEqC::A;
430 case 6:
431 case 0:
432 lnb->getDiSEqC().DiSEqCParam=0;
433 lnb->getDiSEqC().DiSEqCMode=eDiSEqC::NONE;
434 break;
435 case 4:
436 lnb->getDiSEqC().DiSEqCParam=eDiSEqC::AA+diseqcnr;
437 lnb->getDiSEqC().DiSEqCMode=eDiSEqC::V1_1;
438 case 3:
439 lnb->getDiSEqC().DiSEqCParam=eDiSEqC::AA;
440 lnb->getDiSEqC().DiSEqCMode=eDiSEqC::V1_2;
441 break;
442 case 2:
443 case 1:
444 lnb->getDiSEqC().DiSEqCParam=eDiSEqC::AA+diseqcnr;
445 lnb->getDiSEqC().DiSEqCMode=eDiSEqC::V1_0;
446 break;
448 lnb->getDiSEqC().FastDiSEqC=0;
449 lnb->getDiSEqC().DiSEqCRepeats=0;
450 lnb->getDiSEqC().SeqRepeat=0;
451 lnb->getDiSEqC().SwapCmds=0;
452 lnb->getDiSEqC().uncommitted_cmd=0;
453 lnb->getDiSEqC().setRotorDefaultOptions();
456 eSatelliteConfigurationManager::~eSatelliteConfigurationManager()
458 if (refresh)
459 delete refresh;
462 eSatellite *eSatelliteConfigurationManager::getSat4SatCombo( const eComboBox *c )
464 std::map<eSatellite*, SatelliteEntry>::iterator it ( entryMap.begin() );
465 for ( ; it != entryMap.end(); it++)
466 if ( it->second.sat == c)
467 break;
468 return it != entryMap.end()?it->first:0;
471 eSatellite *eSatelliteConfigurationManager::getSat4HiLoCombo( const eComboBox *c )
473 std::map<eSatellite*, SatelliteEntry>::iterator it ( entryMap.begin() );
474 for ( ; it != entryMap.end(); it++)
475 if ( it->second.hilo == c)
476 break;
477 return it != entryMap.end()?it->first:0;
480 eSatellite *eSatelliteConfigurationManager::getSat4VoltageCombo( const eComboBox *c )
482 std::map<eSatellite*, SatelliteEntry>::iterator it ( entryMap.begin() );
483 for ( ; it != entryMap.end(); it++)
484 if ( it->second.voltage == c)
485 break;
486 return it != entryMap.end()?it->first:0;
489 eSatellite *eSatelliteConfigurationManager::getSat4LnbButton( const eButton *b )
491 std::map<eSatellite*, SatelliteEntry>::iterator it ( entryMap.begin() );
492 for ( ; it != entryMap.end(); it++)
493 if ( it->second.lnb == b)
494 break;
495 return it != entryMap.end()?it->first:0;
498 #define DESC_POS_X 330
499 #define SAT_POS_X 0
500 #define LNB_POS_X 260
501 #define HILO_POS_X 330
502 #define VOLTAGE_POS_X 430
504 #define POS_Y 0
506 void eSatelliteConfigurationManager::cleanupWidgets()
508 for (std::list<SatelliteEntry*>::iterator It( deleteEntryList.begin() ); It != deleteEntryList.end();)
510 (**It).sat->hide();
511 (**It).lnb->hide();
512 (**It).voltage->hide();
513 (**It).hilo->hide();
514 (**It).fixed->hide();
515 (**It).description->hide();
516 delete (**It).sat;
517 delete (**It).lnb;
518 delete (**It).voltage;
519 delete (**It).hilo;
520 delete (**It).fixed;
521 delete (**It).description;
523 // search Entry in Map;
524 std::map< eSatellite*, SatelliteEntry >::iterator it( entryMap.begin() );
525 for ( ; it != entryMap.end() && &it->second != *It ; it++)
528 if (it != entryMap.end() )
529 entryMap.erase( it );
531 It = deleteEntryList.erase(It);
535 void eSatelliteConfigurationManager::repositionWidgets()
537 cleanupWidgets();
538 int lnbcount=0, y=POS_Y, satcount=0, cnt=0;
540 int tmp = complexity;
541 if (tmp > 4)
542 tmp=1;
544 eWidget *old = focus;
546 for ( std::list<eLNB>::iterator it( eTransponderList::getInstance()->getLNBs().begin() ); it != eTransponderList::getInstance()->getLNBs().end(); it++)
547 satcount += it->getSatelliteList().size();
549 std::pair<eSatellite*,int> sats[satcount];
550 for ( std::list<eLNB>::iterator it( eTransponderList::getInstance()->getLNBs().begin() ); it != eTransponderList::getInstance()->getLNBs().end(); it++)
552 for ( ePtrList<eSatellite>::iterator s ( it->getSatelliteList().begin() ); s != it->getSatelliteList().end(); s++)
554 sats[cnt].first=s;
555 sats[cnt++].second=lnbcount;
557 ++lnbcount;
560 cnt=0;
561 while(cnt < satcount)
563 SatelliteEntry& entry = entryMap[ sats[cnt].first ];
564 // search eComboBox for this eSatellite and move
566 entry.sat->hide();
567 entry.lnb->hide();
568 entry.voltage->hide();
569 entry.hilo->hide();
570 entry.fixed->hide();
571 entry.description->hide();
573 entry.sat->move( ePoint((tmp>2?SAT_POS_X:55), y) );
574 entry.fixed->move( ePoint(0, y) );
575 entry.description->move( ePoint(DESC_POS_X, y) );
576 entry.lnb->move( ePoint(LNB_POS_X, y) );
577 entry.lnb->setText( eString().sprintf("%d", sats[cnt].second ) );
578 entry.fixed->setShortcut(eString().sprintf("%d", (y - POS_Y) / 40 + 1 ) );
579 entry.fixed->setShortcutPixmap(eString().sprintf("%d", (y - POS_Y) / 40 + 1 ));
581 entry.hilo->move( ePoint(HILO_POS_X, y) );
582 entry.voltage->move( ePoint(VOLTAGE_POS_X, y) );
584 entry.sat->show();
585 if (tmp>2) // user defined..
587 entry.lnb->show();
588 entry.voltage->show();
589 entry.hilo->show();
591 else
593 entry.fixed->show();
594 entry.description->show();
596 y+=40;
597 ++cnt;
599 if ( old )
600 setFocus(old);
601 updateScrollbar(tmp>2);
604 void eSatelliteConfigurationManager::createControlElements()
606 if ( !sats )
608 for ( std::list<eLNB>::iterator it( eTransponderList::getInstance()->getLNBs().begin() ); it != eTransponderList::getInstance()->getLNBs().end(); it++)
609 for ( ePtrList<eSatellite>::iterator s ( it->getSatelliteList().begin() ); s != it->getSatelliteList().end(); s++)
610 sats.push_back(*s);
612 for (ePtrList<eSatellite>::iterator it(sats.begin()); it != sats.end(); ++it )
613 createSatWidgets(*it);
616 void eSatelliteConfigurationManager::lnbSelected(eButton* who)
618 eWidget *old = focus;
619 eDebug("lnb selected");
620 #ifndef DISABLE_LCD
621 eLNBSetup sel( getSat4LnbButton(who), LCDTitle, LCDElement );
622 #else
623 eLNBSetup sel( getSat4LnbButton(who) );
624 #endif
625 hide();
626 sel.show();
628 if ( sel.exec() ) // the we must reposition widgets
629 repositionWidgets();
631 sel.hide();
632 show();
634 if (old)
635 setFocus(old);
637 return;
640 void eSatelliteConfigurationManager::erasePressed()
642 eSatellite *s=0;
643 if ( focus && focus->getName() == "satWidget" )
645 s = getSat4SatCombo( (eComboBox*)focus );
646 if (!s)
647 s = getSat4HiLoCombo( (eComboBox*)focus );
648 if (!s)
649 s = getSat4VoltageCombo( (eComboBox*)focus );
650 if (!s)
651 s = getSat4LnbButton( (eButton*)focus );
653 if (!s)
654 eDebug("Widget not found");
655 else
657 eDebug("call delSatellite(s)");
658 focusNext(eWidget::focusDirN);
659 delSatellite(s);
663 void eSatelliteConfigurationManager::delSatellite( eSatellite* s, bool redraw, bool atomic )
665 if ( atomic )
666 eTransponderList::getInstance()->removeOrbitalPosition(s->getOrbitalPosition());
667 else
669 eDVB::getInstance()->settings->removeOrbitalPosition(s->getOrbitalPosition());
670 eDVB::getInstance()->settings->saveBouquets();
672 eLNB* lnb = s->getLNB();
673 lnb->deleteSatellite( s );
674 // eDebug("Satellite is now removed");
675 if ( !lnb->getSatelliteList().size() ) // the lnb that have no more satellites must be deleted
677 // eDebug("delete no more used lnb");
678 eTransponderList::getInstance()->getLNBs().remove( *s->getLNB() );
680 // else
681 // eDebug("do not delete lnb");
683 deleteEntryList.push_back(&entryMap[ s ]);
685 if(!redraw)
686 return;
688 if (!refresh)
690 refresh = new eTimer( eApp );
691 CONNECT( refresh->timeout, eSatelliteConfigurationManager::repositionWidgets );
693 refresh->start(50, true );
696 void eSatelliteConfigurationManager::satChanged(eComboBox* who, eListBoxEntryText *le)
698 eSatellite *s=getSat4SatCombo( who );
700 if ( le->getKey() && le->getText() )
702 // delete old orbital position services
703 if ((int)le->getKey() != s->getOrbitalPosition())
704 eDVB::getInstance()->settings->removeOrbitalPosition(s->getOrbitalPosition());
705 s->setOrbitalPosition( (int) le->getKey() );
706 s->setDescription( le->getText() );
708 else if (s) // *delete* selected -->> satellite and empty lnbs were now deleted
709 delSatellite(s);
712 void eSatelliteConfigurationManager::hiloChanged(eComboBox* who, eListBoxEntryText *le)
714 getSat4HiLoCombo(who)->getSwitchParams().HiLoSignal = (eSwitchParameter::SIG22) (int) le->getKey();
717 void eSatelliteConfigurationManager::voltageChanged(eComboBox* who, eListBoxEntryText *le)
719 getSat4VoltageCombo(who)->getSwitchParams().VoltageMode = (eSwitchParameter::VMODE) (int) le->getKey();
722 void eSatelliteConfigurationManager::closePressed()
724 eTransponderList::getInstance()->writeLNBData();
725 eConfig::getInstance()->flush();
726 close(1);
729 eComboBox* eSatelliteConfigurationManager::createSatWidgets( eSatellite *s )
731 if (!s)
732 return 0;
733 SatelliteEntry sat;
735 eComboBox* newSat = new eComboBox(w_buttons, 6, lSatPos );
736 newSat->setName("satWidget");
737 sat.sat=newSat;
739 newSat->loadDeco();
740 newSat->resize(eSize(250, 30));
741 newSat->setHelpText( _("press ok to select another satellite"));
743 int err;
744 if ( (err = newSat->setCurrent( (void*) s->getOrbitalPosition() ) ) )
745 if (err == eComboBox::E_COULDNT_FIND) // hmm current entry not in Combobox... we add it manually
746 newSat->setCurrent( new eListBoxEntryText( *newSat, s->getDescription(), (void*) s->getOrbitalPosition() ) );
747 CONNECT( newSat->selected_id, eSatelliteConfigurationManager::addSatellitesToCombo );
748 CONNECT( newSat->selchanged_id, eSatelliteConfigurationManager::satChanged );
750 eButton* b = new eButton(w_buttons, lLNB);
751 sat.lnb=b;
752 b->setName("satWidget");
753 b->loadDeco();
755 b->resize(eSize(60, 30));
756 b->setHelpText( _("press ok to goto LNB config"));
757 CONNECT(b->selected_id, eSatelliteConfigurationManager::lnbSelected);
759 sat.fixed=new eLabel(w_buttons);
760 // sat.fixed->setText(eString().sprintf(_("Sat %d"), index));
761 // don't ask...
762 sat.fixed->setShortcutFocus(sat.sat);
763 sat.fixed->resize(eSize(130, 30));
765 sat.description=new eLabel(w_buttons);
766 sat.description->resize(eSize(245, 30));
768 eComboBox *c = new eComboBox(w_buttons, 3, l22Khz);
769 c->setName("satWidget");
770 sat.hilo=c;
771 c->loadDeco();
773 c->resize( eSize( 90, 30 ) );
774 c->setHelpText( _("press ok to select another 22kHz mode") );
775 new eListBoxEntryText( *c, "Hi/Lo", (void*)eSwitchParameter::HILO, 0, _("22kHz signal is automatically switched") );
776 new eListBoxEntryText( *c, "On", (void*)eSwitchParameter::ON, 0, _("22kHz is always enabled (high band)") );
777 new eListBoxEntryText( *c, "Off", (void*)eSwitchParameter::OFF, 0, _("22kHz is always disabled (low band)") );
778 c->setCurrent( (void*) (int) s->getSwitchParams().HiLoSignal );
779 CONNECT( c->selchanged_id, eSatelliteConfigurationManager::hiloChanged);
781 c = new eComboBox(w_buttons, 3, lVoltage );
782 c->setName("satWidget");
783 sat.voltage=c;
784 c->loadDeco();
786 c->resize( eSize( 90, 30 ) );
787 c->setHelpText( _("press ok to select another LNB Voltage mode") );
788 new eListBoxEntryText( *c, "H/V", (void*)eSwitchParameter::HV, 0, _("Voltage is automatically changed") );
789 new eListBoxEntryText( *c, "14V", (void*)eSwitchParameter::_14V, 0, _("Voltage is always 14V (vertical)") );
790 new eListBoxEntryText( *c, "18V", (void*)eSwitchParameter::_18V, 0, _("Voltage is always 18V (horizontal)") );
791 new eListBoxEntryText( *c, "off", (void*)eSwitchParameter::_0V, 0, _("Voltage is always off") );
792 c->setCurrent( (void*) (int) s->getSwitchParams().VoltageMode );
793 CONNECT( c->selchanged_id, eSatelliteConfigurationManager::voltageChanged);
794 entryMap.insert( std::pair <eSatellite*, SatelliteEntry> ( s, sat ) );
795 return newSat;
798 void eSatelliteConfigurationManager::addSatellitesToCombo(eButton* btn)
800 eComboBox *combo = (eComboBox*) btn;
801 if ( combo->getCount() == 1 )
803 int opos = (int) combo->getCurrent()->getKey();
804 for (std::list<tpPacket>::const_iterator i(eTransponderList::getInstance()->getNetworks().begin()); i != eTransponderList::getInstance()->getNetworks().end(); ++i)
805 if ( i->possibleTransponders.size() && i->orbital_position != opos )
806 new eListBoxEntryText( *combo, i->name, (void*) i->orbital_position );
810 void eSatelliteConfigurationManager::newPressed()
812 // here we must add the new Comboboxes and the button to the hash maps...
813 eComboBox *newSat = createSatWidgets(createSatellite());
814 if ( newSat )
816 repositionWidgets();
817 setFocus(newSat);
821 eSatellite *eSatelliteConfigurationManager::createSatellite()
823 std::list<tpPacket>::const_iterator i( eTransponderList::getInstance()->getNetworks().begin());
824 // we search the next unused Satellite in list...
825 int found=0;
826 for (; i != eTransponderList::getInstance()->getNetworks().end(); ++i)
828 std::map< eSatellite*, SatelliteEntry > :: iterator it ( entryMap.begin() );
829 for ( ; it != entryMap.end(); it++)
831 if ( i->orbital_position == it->first->getOrbitalPosition() )
832 break; // test the next...
834 if ( it == entryMap.end() ) // all Entrys have been checked...
836 found++;
837 break;
840 if ( !found )
842 eMessageBox("No more unused satellites in satellites.xml. Please add a new satellite with possible transponder(s).","Could not add satellite." );
843 return 0;
846 eLNB *lnb;
847 // if not in user-defined mode,
849 int tmp = complexity;
850 if (tmp > 4)
851 tmp=1;
853 if ( (tmp < 3) || !eTransponderList::getInstance()->getLNBs().size() ) // lnb list is empty ?
855 eTransponderList::getInstance()->getLNBs().push_back( eLNB(*eTransponderList::getInstance()) );
856 lnb = &eTransponderList::getInstance()->getLNBs().back();
857 lnb->setDefaultOptions();
859 else // we use the last lnb in the list for the new Satellite
860 lnb = &eTransponderList::getInstance()->getLNBs().back();
862 eSatellite *satellite = lnb->addSatellite( i->orbital_position );
863 satellite->setDescription(i->name);
865 if ( (tmp < 3) || !eTransponderList::getInstance()->getLNBs().size() ) // lnb list is empty ?
866 setSimpleDiseqc( satellite, 0 );
868 eSwitchParameter &sParams = satellite->getSwitchParams();
869 sParams.VoltageMode = eSwitchParameter::HV;
870 sParams.HiLoSignal = eSwitchParameter::HILO;
871 return satellite;
874 void eSatelliteConfigurationManager::updateScrollbar(int show)
876 if (!show)
878 scrollbar->hide();
879 return;
881 int total=entryMap.size()*40; // w_buttons->getSize().height();
882 if (total < buttonWidget->getSize().height())
883 total=buttonWidget->getSize().height();
884 if (!total)
885 total=1;
886 int start=-w_buttons->getPosition().y()*100/total;
887 int vis=buttonWidget->getSize().height()*100/total;
888 scrollbar->setParams(start,vis);
889 scrollbar->show();
892 int eSatelliteConfigurationManager::eventHandler(const eWidgetEvent &event)
894 switch (event.type)
896 #ifndef DISABLE_LCD
897 case eWidgetEvent::execBegin:
898 w_buttons->setLCD( LCDTitle, LCDElement );
899 break;
900 #endif
901 case eWidgetEvent::evtAction:
902 if (event.action == &i_focusActions->left)
903 focusNext(eWidget::focusDirW);
904 else if (event.action == &i_focusActions->right)
905 focusNext(eWidget::focusDirE);
906 else if (event.action == &i_focusActions->up)
907 focusNext(eWidget::focusDirN);
908 else if (event.action == &i_focusActions->down)
909 focusNext(eWidget::focusDirS);
910 else
911 return eWindow::eventHandler(event);
912 break;
913 default:
914 return eWindow::eventHandler(event);
915 break;
917 return 1;
920 eLNBSetup::eLNBSetup( eSatellite* sat, eWidget* lcdTitle, eWidget* lcdElement )
921 :sat(sat), service(eServiceInterface::getInstance()->service)
923 eSkin *skin=eSkin::getActive();
924 if (skin->build(this, "eLNBSetup"))
925 eFatal("skin load of \"eLNBSetup\" failed");
926 LNBPage = new eLNBPage( this, sat );
927 DiSEqCPage = new eDiSEqCPage( this, sat );
928 #ifndef DISABLE_LCD
929 DiSEqCPage->setLCD( lcdTitle, lcdElement );
930 LNBPage->setLCD( lcdTitle, lcdElement );
931 #endif
932 DiSEqCPage->hide();
933 LNBPage->hide();
934 mp.addPage(LNBPage);
935 mp.addPage(DiSEqCPage);
936 // here we can not use the Makro CONNECT ... slot (*this, .... is here not okay..
937 LNBPage->lnb_list->selchanged.connect( slot( *LNBPage, &eLNBPage::lnbChanged) );
938 LNBPage->lnb_list->selchanged.connect( slot( *DiSEqCPage, &eDiSEqCPage::lnbChanged) );
939 // CONNECT( DiSEqCPage->next->selected, eLNBSetup::onNext );
940 CONNECT( LNBPage->next->selected, eLNBSetup::onNext );
941 CONNECT( DiSEqCPage->prev->selected, eLNBSetup::onPrev );
942 CONNECT( LNBPage->save->selected, eLNBSetup::onSave );
943 CONNECT( DiSEqCPage->save->selected, eLNBSetup::onSave);
944 setHelpID(67);
947 void eLNBSetup::onSave()
949 eLNB *p = (eLNB*) LNBPage->lnb_list->getCurrent()->getKey();
951 if ( !p ) // then we must create new LNB; (New is selected)
953 eTransponderList::getInstance()->getLNBs().push_back( eLNB( *eTransponderList::getInstance() ) ); // add new LNB
954 p = &eTransponderList::getInstance()->getLNBs().back(); // get address from the new lnb
955 p->getDiSEqC().setRotorDefaultOptions();
956 // eDebug("now we have a new LNB Created = %p", p );
958 /* else
959 eDebug("do not create LNB");*/
961 p->setLOFLo( LNBPage->lofL->getNumber() * 1000 );
962 p->setLOFHi( LNBPage->lofH->getNumber() * 1000 );
963 p->setLOFThreshold( LNBPage->threshold->getNumber() * 1000 );
964 p->setIncreasedVoltage( LNBPage->increased_voltage->isChecked() );
965 p->set12VOut( LNBPage->relais_12V_out->isChecked() );
967 p->getDiSEqC().MiniDiSEqCParam = (eDiSEqC::tMiniDiSEqCParam) (int) DiSEqCPage->MiniDiSEqCParam->getCurrent()->getKey();
968 p->getDiSEqC().DiSEqCMode = (eDiSEqC::tDiSEqCMode) (int) DiSEqCPage->DiSEqCMode->getCurrent()->getKey();
969 p->getDiSEqC().DiSEqCParam = (int) DiSEqCPage->DiSEqCParam->getCurrent()->getKey();
970 p->getDiSEqC().DiSEqCRepeats = (int) DiSEqCPage->DiSEqCRepeats->getCurrent()->getKey();
971 p->getDiSEqC().FastDiSEqC = (int) DiSEqCPage->FastDiSEqC->isChecked();
972 p->getDiSEqC().SeqRepeat = DiSEqCPage->SeqRepeat->isChecked();
973 p->getDiSEqC().SwapCmds = DiSEqCPage->SwapCmds->isChecked();
974 p->getDiSEqC().uncommitted_cmd = (int)DiSEqCPage->ucInput->getCurrent()->getKey();
976 if ( p != sat->getLNB() ) // the satellite must removed from the old lnb and inserts in the new
978 p->addSatellite( sat->getLNB()->takeSatellite( sat ) );
979 /* eDebug("remove satellite from lnb... now %i satellites left", sat->getLNB()->getSatelliteList().size() );
980 eDebug("added satellite to lnb... now %i satellites in lnb", p->getSatelliteList().size() ); */
982 if ( !sat->getLNB()->getSatelliteList().size() ) // the lnb that have no more satellites must delete
984 // eDebug("delete no more used lnb");
985 eTransponderList::getInstance()->getLNBs().remove( *sat->getLNB() );
987 /* else
988 eDebug("lnb not deleted");*/
990 // now we must set the LNB Pointer in eSatellite...
991 sat->setLNB(p);
993 close(-1); // we must reposition control elements in eSatelliteConfigurationManager
995 else
996 close(0); // we must not reposition...
998 if ( service )
1000 eServiceInterface::getInstance()->stop();
1001 eFrontend::getInstance()->savePower();
1002 eZapMain::getInstance()->playService(service, eZapMain::psDontAdd|eZapMain::psSetMode );
1004 else
1005 eFrontend::getInstance()->InitDiSEqC();
1006 eTransponderList::getInstance()->writeLNBData();
1007 eConfig::getInstance()->flush();
1010 int eLNBSetup::eventHandler(const eWidgetEvent &event)
1012 switch (event.type)
1014 case eWidgetEvent::execBegin:
1015 mp.first();
1016 LNBPage->lnbChanged( LNBPage->lnb_list->getCurrent() ); // fake selchanged for initialize lofl, lofh, threshold...
1017 DiSEqCPage->lnbChanged( LNBPage->lnb_list->getCurrent() ); // fake selchanged for initialize lofl, lofh, threshold...
1018 break;
1019 default:
1020 break;
1022 return eWindow::eventHandler(event);
1025 struct eLNBPage::selectlnb
1027 const eLNB *lnb;
1028 eComboBox *lb;
1030 selectlnb(const eLNB* lnb, eComboBox* lb): lnb(lnb), lb(lb)
1034 bool operator()(const eListBoxEntryText& s)
1036 if ( lnb == (eLNB*)s.getKey() )
1038 lb->setCurrent(&s,true);
1039 return 1;
1041 return 0;
1045 eLNBPage::eLNBPage( eWidget *parent, eSatellite* sat )
1046 :eWidget(parent), sat(sat)
1048 #ifndef DISABLE_LCD
1049 LCDTitle=parent->LCDTitle;
1050 LCDElement=parent->LCDElement;
1051 #endif
1052 lnb_list = new eComboBox(this,8);
1053 lnb_list->setName("lnblist");
1055 eLabel *l = new eLabel(this);
1056 l->setName("lLofL");
1057 lofL = new eNumber(this, 5, 0, 9, 1, 0, 0, l); // todo descr label im skin mit name versehen für lcd anzeige
1058 lofL->setName("lofL");
1060 l = new eLabel(this);
1061 l->setName("lLofH");
1062 lofH = new eNumber(this, 5, 0, 9, 1, 0, 0, l); // todo descr label im skin mit name versehen für lcd anzeige
1063 lofH->setName("lofH");
1065 l = new eLabel(this);
1066 l->setName("lThreshold");
1067 threshold = new eNumber(this, 5, 0 ,9, 1, 0, 0, l);
1068 threshold->setName("threshold");
1070 increased_voltage = new eCheckbox( this );
1071 increased_voltage->setName("increased_voltage");
1073 relais_12V_out = new eCheckbox( this );
1074 relais_12V_out->setName("relais_12V_out");
1076 save = new eButton(this);
1077 save->setName("save");
1079 next = new eButton(this);
1080 next->setName("next");
1082 eSkin *skin=eSkin::getActive();
1083 if (skin->build(this, "eLNBPage"))
1084 eFatal("skin load of \"eLNBPage\" failed");
1086 // add all LNBs
1088 int i=0;
1089 for ( std::list<eLNB>::iterator it( eTransponderList::getInstance()->getLNBs().begin() ); it != eTransponderList::getInstance()->getLNBs().end(); it++)
1090 new eListBoxEntryText(*lnb_list, eString().sprintf("LNB %i", i++), (void*)&(*it) );
1092 // fill with new lnbs
1093 while (i < 32)
1094 new eListBoxEntryText(*lnb_list, eString().sprintf("LNB %i", i++), (void*) 0 );
1096 lnb_list->forEachEntry( selectlnb( sat->getLNB(), lnb_list ) );
1098 CONNECT( lofL->selected, eLNBPage::numSelected);
1099 CONNECT( lofH->selected, eLNBPage::numSelected);
1100 CONNECT( threshold->selected, eLNBPage::numSelected);
1102 if ( eSystemInfo::getInstance()->getHwType() != eSystemInfo::DM7020 )
1103 relais_12V_out->hide();
1104 // on exec we begin in eventHandler execBegin
1107 void eLNBPage::lnbChanged( eListBoxEntryText *lnb )
1109 int l1 = 9750000;
1110 int l2 = 10600000;
1111 int l3 = 11700000;
1112 int incVoltage = 0;
1113 int relais12V = 0;
1114 if ( lnb && lnb->getKey() )
1116 l1 = ((eLNB*)lnb->getKey())->getLOFLo();
1117 l2 = ((eLNB*)lnb->getKey())->getLOFHi();
1118 l3 = ((eLNB*)lnb->getKey())->getLOFThreshold();
1119 incVoltage = ((eLNB*)lnb->getKey())->getIncreasedVoltage();
1120 relais12V = ((eLNB*)lnb->getKey())->get12VOut();
1122 lofL->setNumber( l1 / 1000 );
1123 lofH->setNumber( l2 / 1000 );
1124 increased_voltage->setCheck( incVoltage );
1125 relais_12V_out->setCheck( relais12V );
1126 threshold->setNumber( l3 / 1000 );
1129 void eLNBPage::numSelected(int*)
1131 focusNext( eWidget::focusDirNext );
1134 eDiSEqCPage::eDiSEqCPage( eWidget *parent, eSatellite *sat)
1135 :eWidget(parent), sat(sat)
1137 init_eDiSEqCPage(parent, sat);
1140 void eDiSEqCPage::init_eDiSEqCPage( eWidget *parent, eSatellite *sat)
1142 #ifndef DISABLE_LCD
1143 LCDTitle=parent->LCDTitle;
1144 LCDElement=parent->LCDElement;
1145 #endif
1146 eLabel *l = new eLabel(this);
1147 l->setName("lMiniDiSEqCPara");
1148 MiniDiSEqCParam = new eComboBox( this, 4, l );
1149 MiniDiSEqCParam->setName("MiniDiSEqCParam");
1150 new eListBoxEntryText( *MiniDiSEqCParam, _("None"), (void*)eDiSEqC::NO, 0, _("sends no tone burst") );
1151 new eListBoxEntryText( *MiniDiSEqCParam, "A", (void*)eDiSEqC::A, 0, _("sends modulated tone burst") );
1152 new eListBoxEntryText( *MiniDiSEqCParam, "B", (void*)eDiSEqC::B, 0, _("sends unmodulated tone burst") );
1154 l = new eLabel(this);
1155 l->setName("lDiSEqCMode");
1156 DiSEqCMode = new eComboBox( this, 4, l );
1157 DiSEqCMode->setName("DiSEqCMode");
1158 // *DiSEqCMode... here we use the operator eListBox* from eComboBox !
1159 new eListBoxEntryText( *DiSEqCMode, "None", (void*)eDiSEqC::NONE, 0, _("Disable DiSEqC") );
1160 new eListBoxEntryText( *DiSEqCMode, "Version 1.0", (void*)eDiSEqC::V1_0, 0, _("Use DiSEqC Version 1.0") );
1161 new eListBoxEntryText( *DiSEqCMode, "Version 1.1", (void*)eDiSEqC::V1_1, 0, _("Use DiSEqC Version 1.1") );
1162 new eListBoxEntryText( *DiSEqCMode, "Version 1.2", (void*)eDiSEqC::V1_2, 0, _("Use DiSEqC Version 1.2") );
1163 // no SMATV at the moment... we can do this when anyone ask...
1164 // new eListBoxEntryText( *DiSEqCMode, "SMATV", (void*)eDiSEqC::SMATV, 0, _("Use SMATV Remote Tuning") );
1166 lDiSEqCParam = new eLabel(this);
1167 lDiSEqCParam->setName("lDiSEqCParam");
1168 DiSEqCParam = new eComboBox( this, 4, lDiSEqCParam );
1169 DiSEqCParam->setName("DiSEqCParam");
1170 new eListBoxEntryText( *DiSEqCParam, "A/A", (void*)eDiSEqC::AA, 0, _("sends DiSEqC cmd A/A") );
1171 new eListBoxEntryText( *DiSEqCParam, "A/B", (void*)eDiSEqC::AB, 0, _("sends DiSEqC cmd A/B") );
1172 new eListBoxEntryText( *DiSEqCParam, "B/A", (void*)eDiSEqC::BA, 0, _("sends DiSEqC cmd B/A") );
1173 new eListBoxEntryText( *DiSEqCParam, "B/B", (void*)eDiSEqC::BB, 0, _("sends DiSEqC cmd B/B") );
1174 new eListBoxEntryText( *DiSEqCParam, "None", (void*)eDiSEqC::SENDNO, 0, _("sends no committed DiSEqC cmd") );
1175 new eListBoxEntryText( *DiSEqCParam, "1", (void*)0xF0, 0, _("sends switch cmd 1") );
1176 new eListBoxEntryText( *DiSEqCParam, "2", (void*)0xF1, 0, _("sends switch cmd 2") );
1177 new eListBoxEntryText( *DiSEqCParam, "3", (void*)0xF2, 0, _("sends switch cmd 3") );
1178 new eListBoxEntryText( *DiSEqCParam, "4", (void*)0xF3, 0, _("sends switch cmd 4") );
1179 new eListBoxEntryText( *DiSEqCParam, "5", (void*)0xF4, 0, _("sends switch cmd 5") );
1180 new eListBoxEntryText( *DiSEqCParam, "6", (void*)0xF5, 0, _("sends switch cmd 6") );
1181 new eListBoxEntryText( *DiSEqCParam, "7", (void*)0xF6, 0, _("sends switch cmd 7") );
1182 new eListBoxEntryText( *DiSEqCParam, "8", (void*)0xF7, 0, _("sends switch cmd 8") );
1183 new eListBoxEntryText( *DiSEqCParam, "9", (void*)0xF8, 0, _("sends switch cmd 9") );
1184 new eListBoxEntryText( *DiSEqCParam, "10", (void*)0xF9, 0, _("sends switch cmd 10") );
1185 new eListBoxEntryText( *DiSEqCParam, "11", (void*)0xFA, 0, _("sends switch cmd 11") );
1186 new eListBoxEntryText( *DiSEqCParam, "12", (void*)0xFB, 0, _("sends switch cmd 12") );
1187 new eListBoxEntryText( *DiSEqCParam, "13", (void*)0xFC, 0, _("sends switch cmd 13") );
1188 new eListBoxEntryText( *DiSEqCParam, "14", (void*)0xFD, 0, _("sends switch cmd 14") );
1189 new eListBoxEntryText( *DiSEqCParam, "15", (void*)0xFE, 0, _("sends switch cmd 15") );
1190 new eListBoxEntryText( *DiSEqCParam, "16", (void*)0xFF, 0, _("sends switch cmd 16") );
1192 lDiSEqCRepeats = new eLabel(this);
1193 lDiSEqCRepeats->setName("lDiSEqCRepeats");
1194 DiSEqCRepeats = new eComboBox( this, 4, lDiSEqCRepeats );
1195 DiSEqCRepeats->setName("DiSEqCRepeats");
1196 new eListBoxEntryText( *DiSEqCRepeats, _("None"), (void*)0, 0, _("sends no DiSEqC repeats") );
1197 new eListBoxEntryText( *DiSEqCRepeats, _("One"), (void*)1, 0, _("sends one repeat") );
1198 new eListBoxEntryText( *DiSEqCRepeats, _("Two"), (void*)2, 0, _("sends two repeats") );
1199 new eListBoxEntryText( *DiSEqCRepeats, _("Three"), (void*)3, 0, _("sends three repeats") );
1201 lucInput = new eLabel(this);
1202 lucInput->setName("lucInput");
1204 ucInput = new eComboBox( this, 8, lucInput );
1205 ucInput->setName("ucInput");
1206 new eListBoxEntryText( *ucInput, _("None"), (void*)0, 0, _("sends no uncommitted switch command") );
1207 new eListBoxEntryText( *ucInput, _("Input 1"), (void*)240, 0, _("select uncommitted switch Input 1") );
1208 new eListBoxEntryText( *ucInput, _("Input 2"), (void*)241, 0, _("select uncommitted switch Input 2") );
1209 new eListBoxEntryText( *ucInput, _("Input 3"), (void*)242, 0, _("select uncommitted switch Input 3") );
1210 new eListBoxEntryText( *ucInput, _("Input 4"), (void*)243, 0, _("select uncommitted switch Input 4") );
1211 new eListBoxEntryText( *ucInput, _("Input 5"), (void*)244, 0, _("select uncommitted switch Input 5") );
1212 new eListBoxEntryText( *ucInput, _("Input 6"), (void*)245, 0, _("select uncommitted switch Input 6") );
1213 new eListBoxEntryText( *ucInput, _("Input 7"), (void*)246, 0, _("select uncommitted switch Input 7") );
1214 new eListBoxEntryText( *ucInput, _("Input 8"), (void*)247, 0, _("select uncommitted switch Input 8") );
1215 new eListBoxEntryText( *ucInput, _("Input 9"), (void*)248, 0, _("select uncommitted switch Input 9") );
1216 new eListBoxEntryText( *ucInput, _("Input 10"), (void*)249, 0, _("select uncommitted switch Input 10") );
1217 new eListBoxEntryText( *ucInput, _("Input 11"), (void*)250, 0, _("select uncommitted switch Input 11") );
1218 new eListBoxEntryText( *ucInput, _("Input 12"), (void*)251, 0, _("select uncommitted switch Input 12") );
1219 new eListBoxEntryText( *ucInput, _("Input 13"), (void*)252, 0, _("select uncommitted switch Input 13") );
1220 new eListBoxEntryText( *ucInput, _("Input 14"), (void*)253, 0, _("select uncommitted switch Input 14") );
1221 new eListBoxEntryText( *ucInput, _("Input 15"), (void*)254, 0, _("select uncommitted switch Input 15") );
1222 new eListBoxEntryText( *ucInput, _("Input 16"), (void*)255, 0, _("select uncommitted switch Input 16") );
1224 SeqRepeat = new eCheckbox(this);
1225 SeqRepeat->setName("SeqRepeat");
1227 FastDiSEqC = new eCheckbox(this);
1228 FastDiSEqC->setName("FastDiSEqC");
1230 SwapCmds = new eCheckbox(this);
1231 SwapCmds->setName("SwapCmds");
1233 /* next = new eButton(this);
1234 next->setName("next");*/
1236 prev = new eButton(this);
1237 prev->setName("prev");
1239 save = new eButton(this);
1240 save->setName("save");
1242 eSkin *skin=eSkin::getActive();
1243 if (skin->build(this, "eDiSEqCPage"))
1244 eFatal("skin load of \"eDiSEqCPage\" failed");
1246 CONNECT( DiSEqCMode->selchanged, eDiSEqCPage::DiSEqCModeChanged );
1247 addActionMap(&i_focusActions->map);
1250 void eDiSEqCPage::numSelected(int*)
1252 focusNext( eWidget::focusDirNext );
1255 void eDiSEqCPage::DiSEqCModeChanged( eListBoxEntryText* e )
1257 switch( (int) e->getKey() )
1259 case eDiSEqC::V1_2:
1260 // next->show();
1261 case eDiSEqC::V1_1:
1262 lDiSEqCRepeats->show();
1263 DiSEqCRepeats->show();
1264 lucInput->show();
1265 ucInput->show();
1266 SwapCmds->show();
1267 case eDiSEqC::V1_0:
1268 lDiSEqCParam->show();
1269 FastDiSEqC->show();
1270 DiSEqCParam->show();
1271 SeqRepeat->show();
1272 break;
1274 switch ( (int) e->getKey() )
1276 default:
1277 case eDiSEqC::NONE:
1278 FastDiSEqC->hide();
1279 SeqRepeat->hide();
1280 DiSEqCParam->hide();
1281 lDiSEqCParam->hide();
1282 case eDiSEqC::V1_0:
1283 lucInput->hide();
1284 ucInput->hide();
1285 lDiSEqCRepeats->hide();
1286 DiSEqCRepeats->hide();
1287 SwapCmds->hide();
1288 case eDiSEqC::V1_1:
1289 // next->hide();
1290 case eDiSEqC::V1_2: // hide nothing
1291 break;
1295 void eDiSEqCPage::lnbChanged( eListBoxEntryText *lnb )
1297 if ( lnb && lnb->getKey() )
1299 eDiSEqC &diseqc = ((eLNB*)lnb->getKey())->getDiSEqC();
1300 DiSEqCMode->setCurrent( (void*) (int) diseqc.DiSEqCMode );
1301 MiniDiSEqCParam->setCurrent( (void*) diseqc.MiniDiSEqCParam );
1302 DiSEqCParam->setCurrent( (void*) diseqc.DiSEqCParam );
1303 DiSEqCRepeats->setCurrent( (void*) diseqc.DiSEqCRepeats );
1304 FastDiSEqC->setCheck( (int) diseqc.FastDiSEqC );
1305 SeqRepeat->setCheck( (int) diseqc.SeqRepeat );
1306 SwapCmds->setCheck( (int) diseqc.SwapCmds );
1307 ucInput->setCurrent( (void*) diseqc.uncommitted_cmd );
1309 else
1311 DiSEqCMode->setCurrent( 0 );
1312 DiSEqCParam->setCurrent( 0 );
1313 MiniDiSEqCParam->setCurrent( 0 );
1314 DiSEqCRepeats->setCurrent( 0 );
1315 FastDiSEqC->setCheck( 0 );
1316 SeqRepeat->setCheck( 0 );
1317 SwapCmds->setCheck( 0 );
1318 ucInput->setCurrent( (void*) 0 );
1320 DiSEqCModeChanged( (eListBoxEntryText*) DiSEqCMode->getCurrent() );