00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "inputselectorsetting.h"
00031 #include "cardutil.h"
00032 #include "mythcorecontext.h"
00033 #include "mythdb.h"
00034
00035 InputSelector::InputSelector(
00036 uint _default_cardid, const QString &_default_inputname) :
00037 ComboBoxSetting(this), sourceid(0), default_cardid(_default_cardid),
00038 default_inputname(_default_inputname)
00039 {
00040 default_inputname.detach();
00041 setLabel(tr("Input"));
00042 }
00043
00044 void InputSelector::Load(void)
00045 {
00046 clearSelections();
00047
00048 if (!sourceid)
00049 return;
00050
00051 MSqlQuery query(MSqlQuery::InitCon());
00052 query.prepare(
00053 "SELECT capturecard.cardid, cardtype, videodevice, inputname "
00054 "FROM capturecard, cardinput, videosource "
00055 "WHERE cardinput.sourceid = videosource.sourceid AND "
00056 " hostname = :HOSTNAME AND "
00057 " cardinput.sourceid = :SOURCEID AND "
00058 " cardinput.cardid = capturecard.cardid");
00059
00060 query.bindValue(":HOSTNAME", gCoreContext->GetHostName());
00061 query.bindValue(":SOURCEID", sourceid);
00062
00063 if (!query.exec() || !query.isActive())
00064 {
00065 MythDB::DBError("InputSelector::load()", query);
00066 return;
00067 }
00068
00069 uint which = 0, cnt = 0;
00070 for (; query.next(); cnt++)
00071 {
00072 uint cardid = query.value(0).toUInt();
00073 QString inputname = query.value(3).toString();
00074
00075 QString desc = CardUtil::GetDeviceLabel(
00076 query.value(1).toString(), query.value(2).toString());
00077
00078 desc += QString(" (%1)").arg(inputname);
00079
00080 QString key = QString("%1:%2").arg(cardid).arg(inputname);
00081
00082 addSelection(desc, key);
00083
00084 which = (default_cardid == cardid) ? cnt : which;
00085 }
00086
00087 if (cnt)
00088 setValue(which);
00089 }
00090
00091 void InputSelector::SetSourceID(const QString &_sourceid)
00092 {
00093 if (sourceid != _sourceid.toUInt())
00094 {
00095 sourceid = _sourceid.toUInt();
00096 Load();
00097 }
00098 }
00099
00100 uint InputSelector::GetCardID(void) const
00101 {
00102 uint cardid = 0;
00103 QString inputname = QString::null;
00104
00105 Parse(getValue(), cardid, inputname);
00106
00107 return cardid;
00108 }
00109
00110 QString InputSelector::GetInputName(void) const
00111 {
00112 uint cardid = 0;
00113 QString inputname = QString::null;
00114
00115 Parse(getValue(), cardid, inputname);
00116
00117 return inputname;
00118 }
00119
00120 bool InputSelector::Parse(const QString &cardid_inputname,
00121 uint &cardid,
00122 QString &inputname)
00123 {
00124 cardid = 0;
00125 inputname = QString::null;
00126
00127 int sep0 = cardid_inputname.indexOf(':');
00128 if (sep0 < 1)
00129 return false;
00130
00131 cardid = cardid_inputname.left(sep0).toUInt();
00132 inputname = cardid_inputname.mid(sep0 + 1);
00133
00134 return true;
00135 }