source: ntrip/trunk/BNC/bnctabledlg.cpp@ 1475

Last change on this file since 1475 was 1475, checked in by mervart, 15 years ago

* empty log message *

File size: 21.8 KB
RevLine 
[280]1// Part of BNC, a utility for retrieving decoding and
[464]2// converting GNSS data streams from NTRIP broadcasters.
[280]3//
[464]4// Copyright (C) 2007
[280]5// German Federal Agency for Cartography and Geodesy (BKG)
6// http://www.bkg.bund.de
[464]7// Czech Technical University Prague, Department of Geodesy
[280]8// http://www.fsv.cvut.cz
9//
10// Email: euref-ip@bkg.bund.de
11//
12// This program is free software; you can redistribute it and/or
13// modify it under the terms of the GNU General Public License
14// as published by the Free Software Foundation, version 2.
15//
16// This program is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program; if not, write to the Free Software
23// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
[35]24
25/* -------------------------------------------------------------------------
[93]26 * BKG NTRIP Client
[35]27 * -------------------------------------------------------------------------
28 *
29 * Class: bncTableDlg
30 *
31 * Purpose: Displays the source table, allows mountpoints selection
32 *
33 * Author: L. Mervart
34 *
35 * Created: 24-Dec-2005
36 *
37 * Changes:
38 *
39 * -----------------------------------------------------------------------*/
40
[1373]41#include <iostream>
42
[35]43#include "bnctabledlg.h"
44#include "bncgetthread.h"
[1387]45#include "bncnetqueryv2.h"
[35]46
[1373]47using namespace std;
48
[35]49// Constructor
50////////////////////////////////////////////////////////////////////////////
[90]51bncTableDlg::bncTableDlg(QWidget* parent) : QDialog(parent) {
[35]52
53 setMinimumSize(600,400);
[1409]54 setWindowTitle(tr("Add Streams"));
[35]55
56 QVBoxLayout* mainLayout = new QVBoxLayout(this);
57
58 QSettings settings;
[1474]59 int ww = QFontMetrics(font()).width('w');
60
61 _casterPortLineEdit = new QLineEdit();
62 _casterPortLineEdit->setMaximumWidth(9*ww);
63
64 _casterUserLineEdit = new QLineEdit();
65 _casterUserLineEdit->setMaximumWidth(9*ww);
66
67 _casterPasswordLineEdit = new QLineEdit();
68 _casterPasswordLineEdit->setMaximumWidth(9*ww);
69 _casterPasswordLineEdit->setEchoMode(QLineEdit::Password);
70
71 _casterHostComboBox = new QComboBox();
72 _casterHostComboBox->setDuplicatesEnabled(false);
73 _casterHostComboBox->setEditable(true);
74 _casterHostComboBox->setMaximumWidth(20*ww);
75 connect(_casterHostComboBox, SIGNAL(currentIndexChanged(const QString&)),
76 this, SLOT(slotCasterHostChanged(const QString&)));
[1274]77 QStringList casterHostList = settings.value("casterHostList").toStringList();
[1282]78 for (int ii = 0; ii < casterHostList.count(); ii++) {
79 QString item = casterHostList[ii];
[1474]80 if (item.indexOf("http://") != 0) {
81 item = "http://" + item;
[1274]82 }
[1474]83 QUrl url(item);
84 _casterHostComboBox->addItem(url.host());
[1274]85 }
[683]86
[1350]87 _ntripVersionComboBox = new QComboBox();
[1410]88 _ntripVersionComboBox->addItems(QString("1,2,R").split(","));
[1350]89 int kk = _ntripVersionComboBox->findText(settings.value("ntripVersion").toString());
90 if (kk != -1) {
91 _ntripVersionComboBox->setCurrentIndex(kk);
92 }
[1459]93 _ntripVersionComboBox->setMaximumWidth(5*ww);
[1350]94
[1459]95 _buttonCasterTable = new QPushButton(tr("Show"), this);
96 connect(_buttonCasterTable, SIGNAL(clicked()), this, SLOT(slotCasterTable()));
97 _buttonCasterTable->setMaximumWidth(5*ww);
98
[683]99 // WhatsThis
100 // ---------
[1459]101 _casterUserLineEdit->setWhatsThis(tr("<p>Access to some streams on NTRIP broadcasters may be restricted. You'll need to enter a valid 'User ID' and 'Password' for access to these protected streams.</p><p>Accounts are usually provided per NTRIP broadcaster through a registration process. Register through <u>http://igs.bkg.bund.de/index_ntrip_reg.htm</u> for access to protected streams on <u>www.euref-ip.net</u> and <u>www.igs-ip.net</u>.</p>"));
[1474]102 _casterHostComboBox->setWhatsThis(tr("<p>Enter the NTRIP broadcaster hostname or IP number.</p><p>Note that EUREF and IGS operate NTRIP broadcasters at <u>http://www.euref-ip.net/home</u> and <u>http://www.igs-ip.net/home</u>.</p>"));
[1459]103 _casterPortLineEdit->setWhatsThis(tr("Enter the NTRIP broadcaster port number."));
104 _casterPasswordLineEdit->setWhatsThis(tr("Access to some streams on NTRIP broadcasters may be restricted. You'll need to enter a valid 'Password' for access to these protected streams."));
[35]105
[88]106 QGridLayout* editLayout = new QGridLayout;
[1459]107 editLayout->addWidget(new QLabel(tr("Caster host")), 0, 0);
[1474]108 editLayout->addWidget(_casterHostComboBox, 0, 1);
[1459]109 editLayout->addWidget(new QLabel(tr(" Caster port")), 0, 2, Qt::AlignRight);
110 editLayout->addWidget(_casterPortLineEdit, 0, 3);
111 editLayout->addWidget(new QLabel(tr("Caster table")), 0, 4, Qt::AlignRight);
112 editLayout->addWidget(_buttonCasterTable, 0, 5);
113 editLayout->addWidget(new QLabel(tr("User")), 1, 0, Qt::AlignRight);
114 editLayout->addWidget(_casterUserLineEdit, 1, 1);
115 editLayout->addWidget(new QLabel(tr("Password")), 1, 2, Qt::AlignRight);
116 editLayout->addWidget(_casterPasswordLineEdit, 1, 3);
117 editLayout->addWidget(new QLabel(tr(" NTRIP Version")),1, 4, Qt::AlignRight);
118 editLayout->addWidget(_ntripVersionComboBox, 1, 5);
[88]119
[35]120 mainLayout->addLayout(editLayout);
121
[1471]122 _buttonCasterTable->setWhatsThis(tr("<p>Hit 'Show' for a table of known NTRIP broadcaster installations as maintained at <u>www.rtcm-ntrip.org/home.</u></p><p>A window opens which allows to select a broadcaster for stream retrieval.</p>"));
[1466]123 _ntripVersionComboBox->setWhatsThis(tr("<p>Select the NTRIP transport protocol version you want to use. Implemented options are:<br>&nbsp; 1:&nbsp; NTRIP version 1, TCP/IP<br>&nbsp; 2:&nbsp; NTRIP version 2, TCP/IP mode<br>&nbsp; R:&nbsp; NTRIP Version 2, RTSP/RTP mode<br>Select option '1' if you are not sure whether the NTRIP broadcaster supports NTRIP version 2.</p><p>Note that RTSP/RTP (option 'R') is sometimes not supported by mobile Internet Service Providers.</p>"));
[1409]124
[35]125 _table = new QTableWidget(this);
[1459]126 _table->setWhatsThis(tr("<p>Use the 'Get Table' button to download the sourcetable from the selected NTRIP broadcaster. Select the desired streams line by line, using +Shift and +Ctrl when necessary. Hit 'OK' to return to the main window.</p><p>Pay attention to data field 'format'. Keep in mind that BNC can only decode and convert streams that come in RTCM Version 2.x, RTCM Version 3.x, or RTIGS format. See data field 'format-details' for available message types and their repetition rates in brackets.</p><p>The content of data field 'nmea' tells you whether a stream comes from a virtual reference station (VRS).</p>"));
[195]127 connect(_table, SIGNAL(itemSelectionChanged()),
128 this, SLOT(slotSelectionChanged()));
[35]129 mainLayout->addWidget(_table);
130
[402]131 _buttonWhatsThis = new QPushButton(tr("Help=Shift+F1"), this);
[399]132 connect(_buttonWhatsThis, SIGNAL(clicked()), this, SLOT(slotWhatsThis()));
133
[195]134 _buttonGet = new QPushButton(tr("Get table"), this);
[399]135 _buttonGet->setDefault(true);
[35]136 connect(_buttonGet, SIGNAL(clicked()), this, SLOT(slotGetTable()));
[366]137
[35]138 _buttonCancel = new QPushButton(tr("Cancel"), this);
139 connect(_buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
140
141 _buttonOK = new QPushButton(tr("OK"), this);
142 connect(_buttonOK, SIGNAL(clicked()), this, SLOT(accept()));
143
144 QHBoxLayout* buttonLayout = new QHBoxLayout;
[399]145 buttonLayout->addWidget(_buttonWhatsThis);
[35]146 buttonLayout->addStretch(1);
147 buttonLayout->addWidget(_buttonGet);
148 buttonLayout->addWidget(_buttonCancel);
149 buttonLayout->addWidget(_buttonOK);
150
151 mainLayout->addLayout(buttonLayout);
152}
153
154// Destructor
155////////////////////////////////////////////////////////////////////////////
156bncTableDlg::~bncTableDlg() {
157 if (_table) {
158 for (int ir = 0; ir < _table->rowCount(); ir++) {
159 for (int ic = 0; ic < _table->columnCount(); ic++) {
160 delete _table->item(ir,ic);
161 }
162 }
163 }
164}
165
[191]166// Read Table the caster (static)
[35]167////////////////////////////////////////////////////////////////////////////
[191]168t_irc bncTableDlg::getFullTable(const QString& casterHost,
[1376]169 int casterPort, QStringList& allLines,
170 bool alwaysRead) {
[35]171
[299]172 static QMutex mutex;
[298]173 static QMap<QString, QStringList> allTables;
174
[299]175 QMutexLocker locker(&mutex);
176
[298]177 if (!alwaysRead && allTables.find(casterHost) != allTables.end()) {
178 allLines = allTables.find(casterHost).value();
179 return success;
180 }
181
[191]182 allLines.clear();
183
[88]184 QUrl url;
[191]185 url.setHost(casterHost);
186 url.setPort(casterPort);
[1375]187 url.setScheme("http");
188 url.setPath("/");
[35]189
[1387]190 bncNetQueryV2 query;
[1373]191 QByteArray outData;
[1375]192 query.waitForRequestResult(url, outData);
193 if (query.status() == bncNetQuery::finished) {
194 QTextStream in(outData);
195 QString line = in.readLine();
196 while ( !line.isNull() ) {
197 allLines.append(line);
198 line = in.readLine();
199 }
200 allTables.insert(casterHost, allLines);
201 return success;
202 }
203 else {
[191]204 return failure;
[35]205 }
[191]206}
207
208// Read Table from Caster
209////////////////////////////////////////////////////////////////////////////
210void bncTableDlg::slotGetTable() {
211
[555]212 _buttonGet->setEnabled(false);
[1459]213 _buttonCasterTable->setEnabled(false);
[555]214
[196]215 _allLines.clear();
[191]216
[1474]217 if ( getFullTable(_casterHostComboBox->currentText(),
[191]218 _casterPortLineEdit->text().toInt(),
[196]219 _allLines) != success ) {
[191]220 QMessageBox::warning(0, "BNC", "Cannot retrieve table of data");
[645]221 _buttonGet->setEnabled(true);
[191]222 return;
223 }
224
225 QStringList lines;
[196]226 QStringListIterator it(_allLines);
[1470]227 int endSourceTable = 1;
[191]228 while (it.hasNext()) {
229 QString line = it.next();
[1470]230 if ((endSourceTable == 1 ) && line.indexOf("ENDSOURCETABLE") == 0) {
231 endSourceTable = 0;
232 }
[191]233 if (line.indexOf("STR") == 0) {
234 lines.push_back(line);
235 }
236 }
[1470]237 if (endSourceTable == 1) { printf("ENDSOURCETABLE missing\n");}
[191]238
[103]239 static const QStringList labels = QString("mountpoint,identifier,format,"
[1465]240 "format-details,carrier,system,network,country,lat,long,"
241 "nmea,solution,generator,compress.,auth.,fee,bitrate,"
[103]242 "misc").split(",");
243
[191]244 if (lines.size() > 0) {
[35]245 _table->setSelectionMode(QAbstractItemView::ExtendedSelection);
246 _table->setSelectionBehavior(QAbstractItemView::SelectRows);
247
[191]248 QStringList hlp = lines[0].split(";");
[35]249 _table->setColumnCount(hlp.size()-1);
[1470]250 _table->setRowCount(lines.size() - endSourceTable);
[35]251
[191]252 QListIterator<QString> it(lines);
[35]253 int nRow = -1;
254 while (it.hasNext()) {
255 QStringList columns = it.next().split(";");
256 ++nRow;
257 for (int ic = 0; ic < columns.size()-1; ic++) {
[366]258
[410]259 if (ic+1 == 11) { if (columns[ic+1] == "0") { columns[ic+1] = "no"; } else { columns[ic+1] = "yes"; }}
[366]260
[107]261 QTableWidgetItem* it = new QTableWidgetItem(columns[ic+1]);
[115]262 it->setFlags(it->flags() & ~Qt::ItemIsEditable);
[107]263 _table->setItem(nRow, ic, it);
[35]264 }
265 }
[83]266 _table->sortItems(0);
[103]267 _table->setHorizontalHeaderLabels(labels);
[104]268 _table->setSortingEnabled(true);
[371]269
270 int ww = QFontMetrics(this->font()).width('w');
[375]271 _table->horizontalHeader()->resizeSection(0,10*ww);
[1465]272 _table->horizontalHeader()->resizeSection(1,10*ww);
[371]273 _table->horizontalHeader()->resizeSection(2,8*ww);
[1465]274 _table->horizontalHeader()->resizeSection(3,22*ww);
275 _table->horizontalHeader()->resizeSection(4,5*ww);
[371]276 _table->horizontalHeader()->resizeSection(5,8*ww);
277 _table->horizontalHeader()->resizeSection(6,8*ww);
[1465]278 _table->horizontalHeader()->resizeSection(7,7*ww);
279 _table->horizontalHeader()->resizeSection(8,6*ww);
280 _table->horizontalHeader()->resizeSection(9,6*ww);
281 _table->horizontalHeader()->resizeSection(10,6*ww);
282 _table->horizontalHeader()->resizeSection(11,6*ww);
[371]283 _table->horizontalHeader()->resizeSection(12,15*ww);
284 _table->horizontalHeader()->resizeSection(13,8*ww);
[1465]285 _table->horizontalHeader()->resizeSection(14,5*ww);
286 _table->horizontalHeader()->resizeSection(15,5*ww);
287 _table->horizontalHeader()->resizeSection(16,7*ww);
[371]288 _table->horizontalHeader()->resizeSection(17,15*ww);
[35]289 }
290}
291
292// Accept slot
293////////////////////////////////////////////////////////////////////////////
294void bncTableDlg::accept() {
295
296 QSettings settings;
[1474]297 settings.setValue("casterHost", _casterHostComboBox->currentText());
[1351]298 settings.setValue("ntripVersion", _ntripVersionComboBox->currentText());
[35]299
300 QStringList* mountPoints = new QStringList;
301
302 if (_table) {
303 for (int ir = 0; ir < _table->rowCount(); ir++) {
[59]304 QTableWidgetItem* item = _table->item(ir,0);
305 QString format = _table->item(ir,2)->text();
[366]306 QString latitude = _table->item(ir,8)->text();
307 QString longitude = _table->item(ir,9)->text();
308 QString nmea = _table->item(ir,10)->text();
[1351]309 QString ntripVersion = _ntripVersionComboBox->currentText();
[59]310 format.replace(" ", "_");
[35]311 if (_table->isItemSelected(item)) {
312 QUrl url;
[444]313 url.setUserName(QUrl::toPercentEncoding(_casterUserLineEdit->text()));
314 url.setPassword(QUrl::toPercentEncoding(_casterPasswordLineEdit->text()));
[1474]315 url.setHost(_casterHostComboBox->currentText());
[35]316 url.setPort(_casterPortLineEdit->text().toInt());
317 url.setPath(item->text());
[59]318
[1351]319 mountPoints->push_back(url.toString() + " " + format + " " + latitude
320 + " " + longitude + " " + nmea + " " + ntripVersion);
[35]321 }
322 }
323 }
324 emit newMountPoints(mountPoints);
325
326 QDialog::accept();
327}
[195]328
329// User changed the selection of mountPoints
330////////////////////////////////////////////////////////////////////////////
331void bncTableDlg::slotSelectionChanged() {
332 if (_table->selectedItems().isEmpty()) {
333 }
334}
335
[196]336// Create RINEX skeleton header
[195]337////////////////////////////////////////////////////////////////////////////
338void bncTableDlg::slotSkl() {
339
[196]340 int nRows = _table->rowCount();
341 for (int iRow = 0; iRow < nRows; iRow++) {
342 if (_table->isItemSelected(_table->item(iRow,1))) {
343 QString staID = _table->item(iRow,0)->text();
344 QString net = _table->item(iRow,6)->text();
[195]345
[196]346 QString ftpDir;
347 QStringListIterator it(_allLines);
348 while (it.hasNext()) {
349 QString line = it.next();
350 if (line.indexOf("NET") == 0) {
351 QStringList tags = line.split(';');
352 if (tags.at(1) == net) {
353 ftpDir = tags.at(6);
354 break;
355 }
356 }
357 }
358
[197]359 if (!ftpDir.isEmpty()) {
360 QUrl url(ftpDir);
361 QMessageBox::warning(0, "Warning", url.host() + "\n" + url.path() +
362 "\nnot yet implemented");
363 }
[196]364 }
365 }
[197]366}
[196]367
[399]368// Whats This Help
369void bncTableDlg::slotWhatsThis() {
370QWhatsThis::enterWhatsThisMode();
371}
372
[1459]373// Slot caster table
374////////////////////////////////////////////////////////////////////////////
375void bncTableDlg::slotCasterTable() {
376
377 _buttonCasterTable->setEnabled(false);
[1474]378 _casterHostComboBox->setEnabled(false);
[1461]379 _casterPortLineEdit->setEnabled(false);
380 _casterUserLineEdit->setEnabled(false);
381 _casterPasswordLineEdit->setEnabled(false);
382 _ntripVersionComboBox->setEnabled(false);
383 _buttonWhatsThis->setEnabled(false);
384 _buttonGet->setEnabled(false);
385 _buttonCancel->setEnabled(false);
386 _buttonOK->setEnabled(false);
387
[1459]388 bncCasterTableDlg* dlg = new bncCasterTableDlg(this);
389 dlg->move(this->pos().x()+50, this->pos().y()+50);
[1474]390 connect(dlg, SIGNAL(newCaster(QString, QString)),
391 this, SLOT(slotNewCaster(QString, QString)));
[1459]392 dlg->exec();
393 delete dlg;
[1461]394
[1459]395 _buttonCasterTable->setEnabled(true);
[1474]396 _casterHostComboBox->setEnabled(true);
[1461]397 _casterPortLineEdit->setEnabled(true);
398 _casterUserLineEdit->setEnabled(true);
399 _casterPasswordLineEdit->setEnabled(true);
400 _ntripVersionComboBox->setEnabled(true);
401 _buttonWhatsThis->setEnabled(true);
402 _buttonGet->setEnabled(true);
403 _buttonCancel->setEnabled(true);
404 _buttonOK->setEnabled(true);
[399]405
[1459]406}
407
408// Caster table
409////////////////////////////////////////////////////////////////////////////
410bncCasterTableDlg::bncCasterTableDlg(QWidget* parent) :
411 QDialog(parent) {
412
[1461]413 static const QStringList labels = QString("host,port,identifier,operator,nmea,country,lat,long,link").split(",");
[1459]414
415 QStringList lines;
416 lines.clear();
417 _casterTable = new QTableWidget(this);
418
419 QUrl url;
420 url.setHost("www.rtcm-ntrip.org");
421 url.setPort(2101);
422 url.setScheme("http");
423 url.setPath("/");
424
425 bncNetQueryV2 query;
426 QByteArray outData;
427 query.waitForRequestResult(url, outData);
[1470]428 int endSourceTable = 1;
[1459]429 if (query.status() == bncNetQuery::finished) {
430 QTextStream in(outData);
431 QString line = in.readLine();
432 while ( !line.isNull() ) {
433 line = in.readLine();
[1470]434 if ((endSourceTable == 1 ) && line.indexOf("ENDSOURCETABLE") == 0) {
435 endSourceTable = 0;
436 }
[1459]437 if (line.indexOf("CAS") == 0) {
438 lines.append(line);
439 }
440 }
441 }
[1470]442 if (endSourceTable == 1) { printf("ENDSOURCETABLE missing\n");}
[1459]443 if (lines.size() > 0) {
444 _casterTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
445 _casterTable->setSelectionBehavior(QAbstractItemView::SelectRows);
446
447 QStringList hlp = lines[0].split(";");
448 _casterTable->setColumnCount(hlp.size()-1);
[1470]449 _casterTable->setRowCount(lines.size() - endSourceTable);
[1459]450
451 QListIterator<QString> it(lines);
452 int nRow = -1;
453 while (it.hasNext()) {
454 QStringList columns = it.next().split(";");
455 ++nRow;
456 for (int ic = 0; ic < columns.size()-1; ic++) {
457 if (ic+1 == 5) { if (columns[ic+1] == "0") { columns[ic+1] = "no"; } else { columns[ic+1] = "yes"; }}
458 QTableWidgetItem* it = new QTableWidgetItem(columns[ic+1]);
459 it->setFlags(it->flags() & ~Qt::ItemIsEditable);
460 _casterTable->setItem(nRow, ic, it);
461 }
462 }
463 }
464 _casterTable->sortItems(0);
465 _casterTable->setHorizontalHeaderLabels(labels);
466 _casterTable->setSortingEnabled(true);
467
468 int ww = QFontMetrics(this->font()).width('w');
469 _casterTable->horizontalHeader()->resizeSection(0,15*ww);
470 _casterTable->horizontalHeader()->resizeSection(1,5*ww);
471 _casterTable->horizontalHeader()->resizeSection(2,15*ww);
472 _casterTable->horizontalHeader()->resizeSection(3,15*ww);
473 _casterTable->horizontalHeader()->resizeSection(4,5*ww);
474 _casterTable->horizontalHeader()->resizeSection(5,7*ww);
475 _casterTable->horizontalHeader()->resizeSection(6,7*ww);
476 _casterTable->horizontalHeader()->resizeSection(7,7*ww);
477 _casterTable->horizontalHeader()->resizeSection(8,15*ww);
478
479 ww = QFontMetrics(font()).width('w');
480
481 QPushButton* _closeButton = new QPushButton("Cancel");
482 connect(_closeButton, SIGNAL(clicked()), this, SLOT(close()));
483 _closeButton->setMinimumWidth(8*ww);
484 _closeButton->setMaximumWidth(8*ww);
485
486 QPushButton* _okButton = new QPushButton(tr("OK"), this);
487 connect(_okButton, SIGNAL(clicked()), this, SLOT(slotAcceptCasterTable()));
488 _okButton->setMinimumWidth(8*ww);
489 _okButton->setMaximumWidth(8*ww);
490
491 QPushButton* _whatsThisCasterTableButton = new QPushButton(tr("Help=Shift+F1"), this);
492 connect(_whatsThisCasterTableButton, SIGNAL(clicked()), this, SLOT(slotWhatsThisCasterTable()));
493 _whatsThisCasterTableButton->setMinimumWidth(12*ww);
494 _whatsThisCasterTableButton->setMaximumWidth(12*ww);
495
[1471]496 _casterTable->setWhatsThis(tr("<p>Select an NTRIP broadcaster and hit 'OK'.</p><p>See <u>http://www.rtcm-ntrip.org/home</u> for further details on known NTRIP broadcaster installations.</u>."));
[1459]497
498 QGridLayout* dlgLayout = new QGridLayout();
499 dlgLayout->addWidget(new QLabel(" List of NTRIP Broadcasters from www.rtcm-ntrip.org"), 0,0,1,3,Qt::AlignLeft);
500 dlgLayout->addWidget(_casterTable, 1, 0, 1, 3);
501 dlgLayout->addWidget(_whatsThisCasterTableButton, 2, 0);
502 dlgLayout->addWidget(_closeButton, 2, 1, Qt::AlignRight);
503 dlgLayout->addWidget(_okButton, 2, 2);
504
505 setMinimumSize(600,400);
506 setWindowTitle(tr("Select Broadcaster"));
507 setLayout(dlgLayout);
508 resize(68*ww, 60*ww);
509 show();
510}
511
512// Caster table what's this
513////////////////////////////////////////////////////////////////////////////
514void bncCasterTableDlg:: slotWhatsThisCasterTable() {
515QWhatsThis::enterWhatsThisMode();
516}
517
518// Caster table destructor
519////////////////////////////////////////////////////////////////////////////
520bncCasterTableDlg::~bncCasterTableDlg() {
521 if (_casterTable) {
522 for (int ir = 0; ir < _casterTable->rowCount(); ir++) {
523 for (int ic = 0; ic < _casterTable->columnCount(); ic++) {
524 delete _casterTable->item(ir,ic);
525 }
526 }
527 }
528}
529
530// Accept caster table
531////////////////////////////////////////////////////////////////////////////
532void bncCasterTableDlg::slotAcceptCasterTable() {
533 if (_casterTable) {
534 for (int ir = 0; ir < _casterTable->rowCount(); ir++) {
[1474]535 if (_casterTable->isItemSelected(_casterTable->item(ir,0))) {
536 emit newCaster(_casterTable->item(ir,0)->text(),
537 _casterTable->item(ir,1)->text());
[1459]538 }
539 }
540 }
[1474]541 QDialog::accept();
[1459]542}
543
544// New caster selected
545////////////////////////////////////////////////////////////////////////////
[1474]546void bncTableDlg::slotNewCaster(QString newCasterHost, QString newCasterPort) {
[1459]547
[1474]548 _casterHostComboBox->insertItem(0, newCasterHost);
549 _casterUserLineEdit->setText("");
550 _casterPortLineEdit->setText(newCasterPort);
[1475]551
552 QSettings settings;
553 QStringList casterHostList = settings.value("casterHostList").toStringList();
554 casterHostList << QString("http://" + newCasterHost + ":" + newCasterPort);
555 settings.setValue("casterHostList", casterHostList);
556 settings.sync();
[1474]557}
[1459]558
[1474]559// New caster selected in combobox
560////////////////////////////////////////////////////////////////////////////
561void bncTableDlg::slotCasterHostChanged(const QString& newHost) {
562 QSettings settings;
563 QStringList casterHostList = settings.value("casterHostList").toStringList();
564 for (int ii = 0; ii < casterHostList.count(); ii++) {
565 QString item = casterHostList[ii];
566 if (item.indexOf("http://") != 0) {
567 item = "http://" + item;
568 }
569 QUrl url(item);
570 if (url.host() == newHost) {
571 _casterUserLineEdit->setText(url.userName());
572 if (url.port() > 0) {
573 _casterPortLineEdit->setText(QString("%1").arg(url.port()));
574 }
575 else {
576 _casterPortLineEdit->setText("");
577 }
578 }
579 }
[1459]580}
Note: See TracBrowser for help on using the repository browser.