00001 #ifndef VIDEOSOURCE_H
00002 #define VIDEOSOURCE_H
00003
00004 #include <vector>
00005 using namespace std;
00006
00007 #include "settings.h"
00008 #include "datadirect.h"
00009
00010 class SignalTimeout;
00011 class ChannelTimeout;
00012 class UseEIT;
00013 class VideoSource;
00014 class CaptureCard;
00015 class VBIDevice;
00016 class CardInput;
00017 class CardID;
00018 class InputName;
00019 class SourceID;
00020 class DiSEqCDevTree;
00021 class DiSEqCDevSettings;
00022 class InputGroup;
00023
00024 static inline bool is_grabber_external(const QString &grabber)
00025 {
00026 return !(grabber == "datadirect" ||
00027 grabber == "eitonly" ||
00028 grabber == "schedulesdirect1" ||
00029 grabber == "/bin/true");
00030 }
00031
00032 static inline bool is_grabber_datadirect(const QString &grabber)
00033 {
00034 return (grabber == "datadirect") || (grabber == "schedulesdirect1");
00035 }
00036
00037 static inline bool is_grabber_labs(const QString &grabber)
00038 {
00039 return grabber == "datadirect";
00040 }
00041
00042 class VideoSourceDBStorage : public SimpleDBStorage
00043 {
00044 protected:
00045 VideoSourceDBStorage(Setting *_setting,
00046 const VideoSource &_parent,
00047 QString name) :
00048 SimpleDBStorage(_setting, "videosource", name), parent(_parent)
00049 {
00050 setting->setName(name);
00051 }
00052
00053 virtual QString setClause(MSqlBindings& bindings);
00054 virtual QString whereClause(MSqlBindings& bindings);
00055
00056 const VideoSource& parent;
00057 };
00058
00059 class VideoSourceSelector : public ComboBoxSetting, public TransientStorage
00060 {
00061 Q_OBJECT
00062
00063 public:
00064 VideoSourceSelector(uint _initial_sourceid,
00065 const QString &_card_types,
00066 bool _must_have_mplexid);
00067
00068 virtual void load(void);
00069
00070 uint GetSourceID(void) const { return getValue().toUInt(); }
00071
00072 private:
00073 uint initial_sourceid;
00074 QString card_types;
00075 bool must_have_mplexid;
00076 };
00077
00078 class FreqTableSelector :
00079 public ComboBoxSetting, public VideoSourceDBStorage
00080 {
00081 Q_OBJECT
00082 public:
00083 FreqTableSelector(const VideoSource& parent);
00084 protected:
00085 QString freq;
00086 };
00087
00088 class TransFreqTableSelector : public ComboBoxSetting, public TransientStorage
00089 {
00090 public:
00091 TransFreqTableSelector(uint _sourceid);
00092
00093 virtual void load(void);
00094 virtual void save(void);
00095
00096 void SetSourceID(uint _sourceid);
00097
00098 private:
00099 uint sourceid;
00100 QString loaded_freq_table;
00101 };
00102
00103 class DataDirectLineupSelector :
00104 public ComboBoxSetting, public VideoSourceDBStorage
00105 {
00106 Q_OBJECT
00107 public:
00108 DataDirectLineupSelector(const VideoSource& parent) :
00109 ComboBoxSetting(this), VideoSourceDBStorage(this, parent, "lineupid")
00110 {
00111 setLabel(QObject::tr("Data Direct Lineup"));
00112 };
00113
00114 public slots:
00115 void fillSelections(const QString& uid, const QString& pwd, int source);
00116 };
00117
00118 class DataDirectButton : public TransButtonSetting
00119 {
00120 public:
00121 DataDirectButton() { setLabel(QObject::tr("Retrieve Lineups")); }
00122 };
00123
00124 class DataDirectUserID;
00125 class DataDirectPassword;
00126
00127 class DataDirect_config: public VerticalConfigurationGroup
00128 {
00129 Q_OBJECT
00130 public:
00131 DataDirect_config(const VideoSource& _parent, int _ddsource);
00132
00133 virtual void load(void);
00134
00135 QString getLineupID(void) const { return lineupselector->getValue(); };
00136
00137 protected slots:
00138 void fillDataDirectLineupSelector(void);
00139
00140 protected:
00141 const VideoSource &parent;
00142 DataDirectUserID *userid;
00143 DataDirectPassword *password;
00144 DataDirectButton *button;
00145 DataDirectLineupSelector *lineupselector;
00146 QString lastloadeduserid;
00147 QString lastloadedpassword;
00148 int source;
00149 };
00150
00151 class XMLTV_generic_config: public VerticalConfigurationGroup
00152 {
00153 public:
00154 XMLTV_generic_config(const VideoSource& _parent, QString _grabber);
00155
00156 virtual void save();
00157 virtual void save(QString) { save(); }
00158
00159 protected:
00160 const VideoSource& parent;
00161 QString grabber;
00162 };
00163
00164 class EITOnly_config: public VerticalConfigurationGroup
00165 {
00166 public:
00167 EITOnly_config(const VideoSource& _parent);
00168 virtual void save();
00169 virtual void save(QString) { save(); }
00170
00171 protected:
00172 UseEIT *useeit;
00173 };
00174
00175 class NoGrabber_config: public VerticalConfigurationGroup
00176 {
00177 public:
00178 NoGrabber_config(const VideoSource& _parent);
00179
00180 virtual void save();
00181 virtual void save(QString) { save(); }
00182
00183 protected:
00184 UseEIT *useeit;
00185 };
00186
00187 class XMLTVConfig : public TriggeredConfigurationGroup
00188 {
00189 public:
00190 XMLTVConfig(const VideoSource& parent);
00191 virtual void save(void);
00192 };
00193
00194 class VideoSource : public ConfigurationWizard {
00195 public:
00196 VideoSource();
00197
00198 int getSourceID(void) const { return id->intValue(); };
00199
00200 void loadByID(int id);
00201
00202 static void fillSelections(SelectSetting* setting);
00203 static QString idToName(int id);
00204
00205 QString getSourceName(void) const { return name->getValue(); };
00206
00207 virtual void save(void)
00208 {
00209 if (name)
00210 ConfigurationWizard::save();
00211 }
00212
00213 virtual void save(QString destination)
00214 {
00215 if (name)
00216 ConfigurationWizard::save(destination);
00217 }
00218
00219 private:
00220 class ID: public AutoIncrementDBSetting
00221 {
00222 public:
00223 ID() : AutoIncrementDBSetting("videosource", "sourceid")
00224 {
00225 setName("VideoSourceName");
00226 setVisible(false);
00227 };
00228 };
00229
00230 class Name : public LineEditSetting, public VideoSourceDBStorage
00231 {
00232 public:
00233 Name(const VideoSource &parent) :
00234 LineEditSetting(this), VideoSourceDBStorage(this, parent, "name")
00235 {
00236 setLabel(QObject::tr("Video source name"));
00237 }
00238 };
00239
00240 private:
00241 ID *id;
00242 Name *name;
00243 };
00244
00245 class CaptureCardDBStorage : public SimpleDBStorage
00246 {
00247 protected:
00248 CaptureCardDBStorage(Setting *_setting,
00249 const CaptureCard &_parent,
00250 QString _name) :
00251 SimpleDBStorage(_setting, "capturecard", _name), parent(_parent)
00252 {
00253 setting->setName(_name);
00254 }
00255
00256 int getCardID(void) const;
00257
00258 protected:
00259 virtual QString setClause(MSqlBindings& bindings);
00260 virtual QString whereClause(MSqlBindings& bindings);
00261 private:
00262 const CaptureCard& parent;
00263 };
00264
00265 class TunerCardInput : public ComboBoxSetting, public CaptureCardDBStorage
00266 {
00267 Q_OBJECT
00268 public:
00269 TunerCardInput(const CaptureCard &parent,
00270 QString dev = QString::null,
00271 QString type = QString::null);
00272
00273 public slots:
00274 void fillSelections(const QString &device);
00275
00276 private:
00277 QString last_device;
00278 QString last_cardtype;
00279 int last_diseqct;
00280 };
00281
00282 class SingleCardInput : public TunerCardInput
00283 {
00284 Q_OBJECT
00285
00286 public:
00287 SingleCardInput(const CaptureCard &parent) : TunerCardInput(parent)
00288 {
00289 setLabel(QObject::tr("Default Input"));
00290 addSelection("MPEG2TS");
00291 setVisible(false);
00292 }
00293
00294 public slots:
00295 void fillSelections(const QString&)
00296 {
00297 clearSelections();
00298 addSelection("MPEG2TS");
00299 }
00300 };
00301
00302 class DVBAudioDevice : public LineEditSetting, public CaptureCardDBStorage
00303 {
00304 Q_OBJECT
00305 public:
00306 DVBAudioDevice(const CaptureCard &parent) :
00307 LineEditSetting(this),
00308 CaptureCardDBStorage(this, parent, "audiodevice")
00309 {
00310 setVisible(false);
00311 }
00312
00313 void save() {
00314 changed = true;
00315 settingValue = "";
00316 SimpleDBStorage::save();
00317 };
00318 void save(QString destination) {
00319 changed = true;
00320 settingValue = "";
00321 SimpleDBStorage::save(destination);
00322 };
00323 };
00324
00325 class DVBVbiDevice : public LineEditSetting, public CaptureCardDBStorage
00326 {
00327 Q_OBJECT
00328
00329 public:
00330 DVBVbiDevice(const CaptureCard &parent) :
00331 LineEditSetting(this),
00332 CaptureCardDBStorage(this, parent, "vbidevice")
00333 {
00334 setVisible(false);
00335 };
00336 void save() {
00337 changed = true;
00338 settingValue = "";
00339 SimpleDBStorage::save();
00340 };
00341 void save(QString destination) {
00342 changed = true;
00343 settingValue = "";
00344 SimpleDBStorage::save(destination);
00345 };
00346 };
00347
00348 class CardType : public ComboBoxSetting, public CaptureCardDBStorage
00349 {
00350 public:
00351 CardType(const CaptureCard& parent);
00352 static void fillSelections(SelectSetting* setting);
00353 };
00354
00355 class V4LConfigurationGroup : public VerticalConfigurationGroup
00356 {
00357 Q_OBJECT
00358
00359 public:
00360 V4LConfigurationGroup(CaptureCard &parent);
00361
00362 public slots:
00363 void probeCard(const QString &device);
00364
00365 private:
00366 CaptureCard &parent;
00367 TransLabelSetting *cardinfo;
00368 VBIDevice *vbidev;
00369 TunerCardInput *input;
00370 };
00371
00372 class MPEGConfigurationGroup: public VerticalConfigurationGroup
00373 {
00374 Q_OBJECT
00375
00376 public:
00377 MPEGConfigurationGroup(CaptureCard &parent);
00378
00379 public slots:
00380 void probeCard(const QString &device);
00381
00382 private:
00383 CaptureCard &parent;
00384 TransLabelSetting *cardinfo;
00385 TunerCardInput *input;
00386 };
00387
00388 class DVBCardNum;
00389 class DVBInput;
00390 class DVBCardName;
00391 class DVBCardType;
00392 class DVBTuningDelay;
00393
00394 class DVBConfigurationGroup: public VerticalConfigurationGroup {
00395 Q_OBJECT
00396 public:
00397 DVBConfigurationGroup(CaptureCard& a_parent);
00398 ~DVBConfigurationGroup();
00399
00400 virtual void load(void);
00401 virtual void save(void);
00402
00403 public slots:
00404 void probeCard(const QString& cardNumber);
00405 void DiSEqCPanel(void);
00406
00407 private:
00408 CaptureCard &parent;
00409
00410 DVBCardNum *cardnum;
00411 DVBInput *defaultinput;
00412 DVBCardName *cardname;
00413 DVBCardType *cardtype;
00414 SignalTimeout *signal_timeout;
00415 ChannelTimeout *channel_timeout;
00416 TransButtonSetting *buttonAnalog;
00417 DVBTuningDelay *tuning_delay;
00418 DiSEqCDevTree *diseqc_tree;
00419 };
00420
00421 class FirewireGUID;
00422 class FirewireModel : public ComboBoxSetting, public CaptureCardDBStorage
00423 {
00424 Q_OBJECT
00425
00426 public:
00427 FirewireModel(const CaptureCard &parent, const FirewireGUID*);
00428
00429 public slots:
00430 void SetGUID(const QString&);
00431
00432 private:
00433 const FirewireGUID *guid;
00434 };
00435
00436 class FirewireDesc : public TransLabelSetting
00437 {
00438 Q_OBJECT
00439
00440 public:
00441 FirewireDesc(const FirewireGUID *_guid) :
00442 TransLabelSetting(), guid(_guid) { }
00443
00444 public slots:
00445 void SetGUID(const QString&);
00446
00447 private:
00448 const FirewireGUID *guid;
00449 };
00450
00451 class CaptureCardGroup : public TriggeredConfigurationGroup
00452 {
00453 Q_OBJECT
00454 public:
00455 CaptureCardGroup(CaptureCard& parent);
00456
00457 protected slots:
00458 virtual void triggerChanged(const QString& value);
00459 };
00460
00461 class CaptureCard : public QObject, public ConfigurationWizard
00462 {
00463 Q_OBJECT
00464 public:
00465 CaptureCard(bool use_card_group = true);
00466
00467 int getCardID(void) const { return id->intValue(); }
00468
00469 void loadByID(int id);
00470
00471 static void fillSelections(SelectSetting* setting);
00472
00473 void reload(void);
00474
00475 virtual void save(void);
00476
00477 uint GetInstanceCount(void) const { return instance_count; }
00478
00479 public slots:
00480 void recorderOptionsPanel();
00481
00482 private:
00483
00484 class ID: public AutoIncrementDBSetting {
00485 public:
00486 ID():
00487 AutoIncrementDBSetting("capturecard", "cardid") {
00488 setVisible(false);
00489 setName("ID");
00490 };
00491 };
00492
00493 class Hostname : public HostnameSetting, public CaptureCardDBStorage
00494 {
00495 public:
00496 Hostname(const CaptureCard &parent) :
00497 HostnameSetting(this),
00498 CaptureCardDBStorage(this, parent, "hostname") { }
00499 };
00500
00501 private:
00502 ID *id;
00503 uint instance_count;
00504 };
00505
00506 class CardInputDBStorage : public SimpleDBStorage
00507 {
00508 protected:
00509 CardInputDBStorage(Setting *_setting,
00510 const CardInput &_parent,
00511 QString _name) :
00512 SimpleDBStorage(_setting, "cardinput", _name), parent(_parent)
00513 {
00514 _setting->setName(_name);
00515 }
00516
00517 int getInputID(void) const;
00518
00519 void fillSelections();
00520
00521 protected:
00522 virtual QString setClause(MSqlBindings& bindings);
00523 virtual QString whereClause(MSqlBindings& bindings);
00524 private:
00525 const CardInput& parent;
00526 };
00527
00528 class MPUBLIC CaptureCardEditor : public QObject, public ConfigurationDialog
00529 {
00530 Q_OBJECT
00531
00532 public:
00533 CaptureCardEditor();
00534
00535 virtual MythDialog* dialogWidget(MythMainWindow* parent,
00536 const char* widgetName=0);
00537 virtual DialogCode exec(void);
00538 virtual void load();
00539 virtual void save() { };
00540
00541 public slots:
00542 void menu(void);
00543 void edit(void);
00544 void del(void);
00545
00546 private:
00547 ListBoxSetting *listbox;
00548 };
00549
00550 class MPUBLIC VideoSourceEditor : public QObject, public ConfigurationDialog
00551 {
00552 Q_OBJECT
00553
00554 public:
00555 VideoSourceEditor();
00556
00557 virtual MythDialog* dialogWidget(MythMainWindow* parent,
00558 const char* widgetName=0);
00559
00560 bool cardTypesInclude(const int& SourceID,
00561 const QString& thecardtype);
00562
00563 virtual DialogCode exec(void);
00564 virtual void load();
00565 virtual void save() { };
00566
00567 public slots:
00568 void menu(void);
00569 void edit(void);
00570 void del(void);
00571
00572 private:
00573 ListBoxSetting *listbox;
00574 };
00575
00576 class MPUBLIC CardInputEditor : public QObject, public ConfigurationDialog
00577 {
00578 Q_OBJECT
00579
00580 public:
00581 CardInputEditor();
00582
00583 virtual DialogCode exec(void);
00584 virtual void load();
00585 virtual void save() { };
00586
00587 private:
00588 vector<CardInput*> cardinputs;
00589 ListBoxSetting *listbox;
00590 };
00591
00592 class StartingChannel : public ComboBoxSetting, public CardInputDBStorage
00593 {
00594 Q_OBJECT
00595 public:
00596 StartingChannel(const CardInput &parent) :
00597 ComboBoxSetting(this, false, 1),
00598 CardInputDBStorage(this, parent, "startchan")
00599 {
00600 setLabel(QObject::tr("Starting channel"));
00601 setHelpText(QObject::tr("Starting LiveTV channel.") + " " +
00602 QObject::tr("This is updated on every successful "
00603 "channel change."));
00604 }
00605 void fillSelections(void) {;}
00606 public slots:
00607 void SetSourceID(const QString &sourceid);
00608 };
00609
00610 class CardInput : public QObject, public ConfigurationWizard
00611 {
00612 Q_OBJECT
00613 public:
00614 CardInput(bool is_dtv_card, bool is_dvb_card,
00615 bool is_new_input, int cardid);
00616 ~CardInput();
00617
00618 int getInputID(void) const { return id->intValue(); };
00619
00620 void loadByID(int id);
00621 void loadByInput(int cardid, QString input);
00622 QString getSourceName(void) const;
00623
00624 virtual void save();
00625 virtual void save(QString ) { save(); }
00626
00627 public slots:
00628 void CreateNewInputGroup();
00629 void channelScanner();
00630 void sourceFetch();
00631 void SetSourceID(const QString &sourceid);
00632
00633 private:
00634 class ID: public AutoIncrementDBSetting
00635 {
00636 public:
00637 ID() : AutoIncrementDBSetting("cardinput", "cardid")
00638 {
00639 setVisible(false);
00640 setName("CardInputID");
00641 }
00642 };
00643
00644 ID *id;
00645 CardID *cardid;
00646 InputName *inputname;
00647 SourceID *sourceid;
00648 StartingChannel *startchan;
00649 TransButtonSetting *scan;
00650 TransButtonSetting *srcfetch;
00651 DiSEqCDevSettings *externalInputSettings;
00652 InputGroup *inputgrp0;
00653 InputGroup *inputgrp1;
00654 };
00655
00656 #endif