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

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

* empty log message *

File size: 22.0 KB
Line 
1// Part of BNC, a utility for retrieving decoding and
2// converting GNSS data streams from NTRIP broadcasters.
3//
4// Copyright (C) 2007
5// German Federal Agency for Cartography and Geodesy (BKG)
6// http://www.bkg.bund.de
7// Czech Technical University Prague, Department of Geodesy
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.
24
25/* -------------------------------------------------------------------------
26 * BKG NTRIP Client
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
41#include <iostream>
42
43#include "bnctabledlg.h"
44#include "bncgetthread.h"
45#include "bncnetqueryv2.h"
46
47using namespace std;
48
49// Constructor
50////////////////////////////////////////////////////////////////////////////
51bncTableDlg::bncTableDlg(QWidget* parent) : QDialog(parent) {
52
53 setMinimumSize(600,400);
54 setWindowTitle(tr("Add Streams"));
55
56 QVBoxLayout* mainLayout = new QVBoxLayout(this);
57
58 int ww = QFontMetrics(font()).width('w');
59
60 _casterPortLineEdit = new QLineEdit();
61 _casterPortLineEdit->setMaximumWidth(9*ww);
62
63 _casterUserLineEdit = new QLineEdit();
64 _casterUserLineEdit->setMaximumWidth(9*ww);
65
66 _casterPasswordLineEdit = new QLineEdit();
67 _casterPasswordLineEdit->setMaximumWidth(9*ww);
68 _casterPasswordLineEdit->setEchoMode(QLineEdit::Password);
69
70 _casterHostComboBox = new QComboBox();
71 _casterHostComboBox->setDuplicatesEnabled(false);
72 _casterHostComboBox->setEditable(true);
73 _casterHostComboBox->setMinimumWidth(20*ww);
74 _casterHostComboBox->setMaximumWidth(20*ww);
75 connect(_casterHostComboBox, SIGNAL(currentIndexChanged(const QString&)),
76 this, SLOT(slotCasterHostChanged(const QString&)));
77 QSettings settings;
78 QStringList casterUrlList = settings.value("casterUrlList").toStringList();
79 for (int ii = 0; ii < casterUrlList.count(); ii++) {
80 QUrl url(casterUrlList[ii]);
81 _casterHostComboBox->addItem(url.host());
82 }
83
84 _ntripVersionComboBox = new QComboBox();
85 _ntripVersionComboBox->addItems(QString("1,2,R").split(","));
86 int kk = _ntripVersionComboBox->findText(settings.value("ntripVersion").toString());
87 if (kk != -1) {
88 _ntripVersionComboBox->setCurrentIndex(kk);
89 }
90 _ntripVersionComboBox->setMaximumWidth(5*ww);
91
92 _buttonCasterTable = new QPushButton(tr("Show"), this);
93 connect(_buttonCasterTable, SIGNAL(clicked()), this, SLOT(slotCasterTable()));
94 _buttonCasterTable->setMaximumWidth(5*ww);
95
96 // WhatsThis
97 // ---------
98 _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>"));
99 _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>"));
100 _casterPortLineEdit->setWhatsThis(tr("Enter the NTRIP broadcaster port number."));
101 _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."));
102
103 QGridLayout* editLayout = new QGridLayout;
104 editLayout->addWidget(new QLabel(tr("Caster host")), 0, 0);
105 editLayout->addWidget(_casterHostComboBox, 0, 1);
106 editLayout->addWidget(new QLabel(tr(" Caster port")), 0, 2, Qt::AlignRight);
107 editLayout->addWidget(_casterPortLineEdit, 0, 3);
108 editLayout->addWidget(new QLabel(tr("Caster table")), 0, 4, Qt::AlignRight);
109 editLayout->addWidget(_buttonCasterTable, 0, 5);
110 editLayout->addWidget(new QLabel(tr("User")), 1, 0, Qt::AlignRight);
111 editLayout->addWidget(_casterUserLineEdit, 1, 1);
112 editLayout->addWidget(new QLabel(tr("Password")), 1, 2, Qt::AlignRight);
113 editLayout->addWidget(_casterPasswordLineEdit, 1, 3);
114 editLayout->addWidget(new QLabel(tr(" NTRIP Version")),1, 4, Qt::AlignRight);
115 editLayout->addWidget(_ntripVersionComboBox, 1, 5);
116
117 mainLayout->addLayout(editLayout);
118
119 _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>"));
120 _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>"));
121
122 _table = new QTableWidget(this);
123 _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>"));
124 connect(_table, SIGNAL(itemSelectionChanged()),
125 this, SLOT(slotSelectionChanged()));
126 mainLayout->addWidget(_table);
127
128 _buttonWhatsThis = new QPushButton(tr("Help=Shift+F1"), this);
129 connect(_buttonWhatsThis, SIGNAL(clicked()), this, SLOT(slotWhatsThis()));
130
131 _buttonGet = new QPushButton(tr("Get table"), this);
132 _buttonGet->setDefault(true);
133 connect(_buttonGet, SIGNAL(clicked()), this, SLOT(slotGetTable()));
134
135 _buttonCancel = new QPushButton(tr("Cancel"), this);
136 connect(_buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
137
138 _buttonOK = new QPushButton(tr("OK"), this);
139 connect(_buttonOK, SIGNAL(clicked()), this, SLOT(accept()));
140
141 QHBoxLayout* buttonLayout = new QHBoxLayout;
142 buttonLayout->addWidget(_buttonWhatsThis);
143 buttonLayout->addStretch(1);
144 buttonLayout->addWidget(_buttonGet);
145 buttonLayout->addWidget(_buttonCancel);
146 buttonLayout->addWidget(_buttonOK);
147
148 mainLayout->addLayout(buttonLayout);
149}
150
151// Destructor
152////////////////////////////////////////////////////////////////////////////
153bncTableDlg::~bncTableDlg() {
154 if (_table) {
155 for (int ir = 0; ir < _table->rowCount(); ir++) {
156 for (int ic = 0; ic < _table->columnCount(); ic++) {
157 delete _table->item(ir,ic);
158 }
159 }
160 }
161}
162
163// Read Table the caster (static)
164////////////////////////////////////////////////////////////////////////////
165t_irc bncTableDlg::getFullTable(const QString& casterHost,
166 int casterPort, QStringList& allLines,
167 bool alwaysRead) {
168
169 static QMutex mutex;
170 static QMap<QString, QStringList> allTables;
171
172 QMutexLocker locker(&mutex);
173
174 if (!alwaysRead && allTables.find(casterHost) != allTables.end()) {
175 allLines = allTables.find(casterHost).value();
176 return success;
177 }
178
179 allLines.clear();
180
181 QUrl url;
182 url.setHost(casterHost);
183 url.setPort(casterPort);
184 url.setScheme("http");
185 url.setPath("/");
186
187 bncNetQueryV2 query;
188 QByteArray outData;
189 query.waitForRequestResult(url, outData);
190 if (query.status() == bncNetQuery::finished) {
191 QTextStream in(outData);
192 QString line = in.readLine();
193 while ( !line.isNull() ) {
194 allLines.append(line);
195 line = in.readLine();
196 }
197 allTables.insert(casterHost, allLines);
198 return success;
199 }
200 else {
201 return failure;
202 }
203}
204
205// Read Table from Caster
206////////////////////////////////////////////////////////////////////////////
207void bncTableDlg::slotGetTable() {
208
209 _buttonGet->setEnabled(false);
210 _buttonCasterTable->setEnabled(false);
211
212 _allLines.clear();
213
214 if ( getFullTable(_casterHostComboBox->currentText(),
215 _casterPortLineEdit->text().toInt(),
216 _allLines) != success ) {
217 QMessageBox::warning(0, "BNC", "Cannot retrieve table of data");
218 _buttonGet->setEnabled(true);
219 return;
220 }
221
222 QStringList lines;
223 QStringListIterator it(_allLines);
224 int endSourceTable = 1;
225 while (it.hasNext()) {
226 QString line = it.next();
227 if ((endSourceTable == 1 ) && line.indexOf("ENDSOURCETABLE") == 0) {
228 endSourceTable = 0;
229 }
230 if (line.indexOf("STR") == 0) {
231 lines.push_back(line);
232 }
233 }
234 if (endSourceTable == 1) { printf("ENDSOURCETABLE missing\n");}
235
236 static const QStringList labels = QString("mountpoint,identifier,format,"
237 "format-details,carrier,system,network,country,lat,long,"
238 "nmea,solution,generator,compress.,auth.,fee,bitrate,"
239 "misc").split(",");
240
241 if (lines.size() > 0) {
242 _table->setSelectionMode(QAbstractItemView::ExtendedSelection);
243 _table->setSelectionBehavior(QAbstractItemView::SelectRows);
244
245 QStringList hlp = lines[0].split(";");
246 _table->setColumnCount(hlp.size()-1);
247 _table->setRowCount(lines.size() - endSourceTable);
248
249 QListIterator<QString> it(lines);
250 int nRow = -1;
251 while (it.hasNext()) {
252 QStringList columns = it.next().split(";");
253 ++nRow;
254 for (int ic = 0; ic < columns.size()-1; ic++) {
255
256 if (ic+1 == 11) { if (columns[ic+1] == "0") { columns[ic+1] = "no"; } else { columns[ic+1] = "yes"; }}
257
258 QTableWidgetItem* it = new QTableWidgetItem(columns[ic+1]);
259 it->setFlags(it->flags() & ~Qt::ItemIsEditable);
260 _table->setItem(nRow, ic, it);
261 }
262 }
263 _table->sortItems(0);
264 _table->setHorizontalHeaderLabels(labels);
265 _table->setSortingEnabled(true);
266
267 int ww = QFontMetrics(this->font()).width('w');
268 _table->horizontalHeader()->resizeSection(0,10*ww);
269 _table->horizontalHeader()->resizeSection(1,10*ww);
270 _table->horizontalHeader()->resizeSection(2,8*ww);
271 _table->horizontalHeader()->resizeSection(3,22*ww);
272 _table->horizontalHeader()->resizeSection(4,5*ww);
273 _table->horizontalHeader()->resizeSection(5,8*ww);
274 _table->horizontalHeader()->resizeSection(6,8*ww);
275 _table->horizontalHeader()->resizeSection(7,7*ww);
276 _table->horizontalHeader()->resizeSection(8,6*ww);
277 _table->horizontalHeader()->resizeSection(9,6*ww);
278 _table->horizontalHeader()->resizeSection(10,6*ww);
279 _table->horizontalHeader()->resizeSection(11,6*ww);
280 _table->horizontalHeader()->resizeSection(12,15*ww);
281 _table->horizontalHeader()->resizeSection(13,8*ww);
282 _table->horizontalHeader()->resizeSection(14,5*ww);
283 _table->horizontalHeader()->resizeSection(15,5*ww);
284 _table->horizontalHeader()->resizeSection(16,7*ww);
285 _table->horizontalHeader()->resizeSection(17,15*ww);
286 }
287}
288
289// Accept slot
290////////////////////////////////////////////////////////////////////////////
291void bncTableDlg::accept() {
292
293 QSettings settings;
294 settings.setValue("casterHost", _casterHostComboBox->currentText());
295 settings.setValue("ntripVersion", _ntripVersionComboBox->currentText());
296 settings.sync();
297
298 QUrl url;
299 url.setHost(_casterHostComboBox->currentText());
300 url.setPort(_casterPortLineEdit->text().toInt());
301 url.setUserName(_casterUserLineEdit->text());
302 url.setPassword(_casterPasswordLineEdit->text());
303 addUrl(url);
304
305 QStringList* mountPoints = new QStringList;
306
307 if (_table) {
308 for (int ir = 0; ir < _table->rowCount(); ir++) {
309 QTableWidgetItem* item = _table->item(ir,0);
310 QString format = _table->item(ir,2)->text();
311 QString latitude = _table->item(ir,8)->text();
312 QString longitude = _table->item(ir,9)->text();
313 QString nmea = _table->item(ir,10)->text();
314 QString ntripVersion = _ntripVersionComboBox->currentText();
315 format.replace(" ", "_");
316 if (_table->isItemSelected(item)) {
317 url.setPath(item->text());
318 mountPoints->push_back(url.toString() + " " + format + " " + latitude
319 + " " + longitude + " " + nmea + " " + ntripVersion);
320 }
321 }
322 }
323 emit newMountPoints(mountPoints);
324
325 QDialog::accept();
326}
327
328// User changed the selection of mountPoints
329////////////////////////////////////////////////////////////////////////////
330void bncTableDlg::slotSelectionChanged() {
331 if (_table->selectedItems().isEmpty()) {
332 }
333}
334
335// Create RINEX skeleton header
336////////////////////////////////////////////////////////////////////////////
337void bncTableDlg::slotSkl() {
338
339 int nRows = _table->rowCount();
340 for (int iRow = 0; iRow < nRows; iRow++) {
341 if (_table->isItemSelected(_table->item(iRow,1))) {
342 QString staID = _table->item(iRow,0)->text();
343 QString net = _table->item(iRow,6)->text();
344
345 QString ftpDir;
346 QStringListIterator it(_allLines);
347 while (it.hasNext()) {
348 QString line = it.next();
349 if (line.indexOf("NET") == 0) {
350 QStringList tags = line.split(';');
351 if (tags.at(1) == net) {
352 ftpDir = tags.at(6);
353 break;
354 }
355 }
356 }
357
358 if (!ftpDir.isEmpty()) {
359 QUrl url(ftpDir);
360 QMessageBox::warning(0, "Warning", url.host() + "\n" + url.path() +
361 "\nnot yet implemented");
362 }
363 }
364 }
365}
366
367// Whats This Help
368void bncTableDlg::slotWhatsThis() {
369QWhatsThis::enterWhatsThisMode();
370}
371
372// Slot caster table
373////////////////////////////////////////////////////////////////////////////
374void bncTableDlg::slotCasterTable() {
375
376 _buttonCasterTable->setEnabled(false);
377 _casterHostComboBox->setEnabled(false);
378 _casterPortLineEdit->setEnabled(false);
379 _casterUserLineEdit->setEnabled(false);
380 _casterPasswordLineEdit->setEnabled(false);
381 _ntripVersionComboBox->setEnabled(false);
382 _buttonWhatsThis->setEnabled(false);
383 _buttonGet->setEnabled(false);
384 _buttonCancel->setEnabled(false);
385 _buttonOK->setEnabled(false);
386
387 bncCasterTableDlg* dlg = new bncCasterTableDlg(this);
388 dlg->move(this->pos().x()+50, this->pos().y()+50);
389 connect(dlg, SIGNAL(newCaster(QString, QString)),
390 this, SLOT(slotNewCaster(QString, QString)));
391 dlg->exec();
392 delete dlg;
393
394 _buttonCasterTable->setEnabled(true);
395 _casterHostComboBox->setEnabled(true);
396 _casterPortLineEdit->setEnabled(true);
397 _casterUserLineEdit->setEnabled(true);
398 _casterPasswordLineEdit->setEnabled(true);
399 _ntripVersionComboBox->setEnabled(true);
400 _buttonWhatsThis->setEnabled(true);
401 _buttonGet->setEnabled(true);
402 _buttonCancel->setEnabled(true);
403 _buttonOK->setEnabled(true);
404
405}
406
407// Caster table
408////////////////////////////////////////////////////////////////////////////
409bncCasterTableDlg::bncCasterTableDlg(QWidget* parent) :
410 QDialog(parent) {
411
412 static const QStringList labels = QString("host,port,identifier,operator,nmea,country,lat,long,link").split(",");
413
414 QStringList lines;
415 lines.clear();
416 _casterTable = new QTableWidget(this);
417
418 QUrl url;
419 url.setHost("www.rtcm-ntrip.org");
420 url.setPort(2101);
421 url.setScheme("http");
422 url.setPath("/");
423
424 bncNetQueryV2 query;
425 QByteArray outData;
426 query.waitForRequestResult(url, outData);
427 int endSourceTable = 1;
428 if (query.status() == bncNetQuery::finished) {
429 QTextStream in(outData);
430 QString line = in.readLine();
431 while ( !line.isNull() ) {
432 line = in.readLine();
433 if ((endSourceTable == 1 ) && line.indexOf("ENDSOURCETABLE") == 0) {
434 endSourceTable = 0;
435 }
436 if (line.indexOf("CAS") == 0) {
437 lines.append(line);
438 }
439 }
440 }
441 if (endSourceTable == 1) { printf("ENDSOURCETABLE missing\n");}
442 if (lines.size() > 0) {
443 _casterTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
444 _casterTable->setSelectionBehavior(QAbstractItemView::SelectRows);
445
446 QStringList hlp = lines[0].split(";");
447 _casterTable->setColumnCount(hlp.size()-1);
448 _casterTable->setRowCount(lines.size() - endSourceTable);
449
450 QListIterator<QString> it(lines);
451 int nRow = -1;
452 while (it.hasNext()) {
453 QStringList columns = it.next().split(";");
454 ++nRow;
455 for (int ic = 0; ic < columns.size()-1; ic++) {
456 if (ic+1 == 5) { if (columns[ic+1] == "0") { columns[ic+1] = "no"; } else { columns[ic+1] = "yes"; }}
457 QTableWidgetItem* it = new QTableWidgetItem(columns[ic+1]);
458 it->setFlags(it->flags() & ~Qt::ItemIsEditable);
459 _casterTable->setItem(nRow, ic, it);
460 }
461 }
462 }
463 _casterTable->sortItems(0);
464 _casterTable->setHorizontalHeaderLabels(labels);
465 _casterTable->setSortingEnabled(true);
466
467 int ww = QFontMetrics(this->font()).width('w');
468 _casterTable->horizontalHeader()->resizeSection(0,15*ww);
469 _casterTable->horizontalHeader()->resizeSection(1,5*ww);
470 _casterTable->horizontalHeader()->resizeSection(2,15*ww);
471 _casterTable->horizontalHeader()->resizeSection(3,15*ww);
472 _casterTable->horizontalHeader()->resizeSection(4,5*ww);
473 _casterTable->horizontalHeader()->resizeSection(5,7*ww);
474 _casterTable->horizontalHeader()->resizeSection(6,7*ww);
475 _casterTable->horizontalHeader()->resizeSection(7,7*ww);
476 _casterTable->horizontalHeader()->resizeSection(8,15*ww);
477
478 ww = QFontMetrics(font()).width('w');
479
480 QPushButton* _closeButton = new QPushButton("Cancel");
481 connect(_closeButton, SIGNAL(clicked()), this, SLOT(close()));
482 _closeButton->setMinimumWidth(8*ww);
483 _closeButton->setMaximumWidth(8*ww);
484
485 QPushButton* _okButton = new QPushButton(tr("OK"), this);
486 connect(_okButton, SIGNAL(clicked()), this, SLOT(slotAcceptCasterTable()));
487 _okButton->setMinimumWidth(8*ww);
488 _okButton->setMaximumWidth(8*ww);
489
490 QPushButton* _whatsThisCasterTableButton = new QPushButton(tr("Help=Shift+F1"), this);
491 connect(_whatsThisCasterTableButton, SIGNAL(clicked()), this, SLOT(slotWhatsThisCasterTable()));
492 _whatsThisCasterTableButton->setMinimumWidth(12*ww);
493 _whatsThisCasterTableButton->setMaximumWidth(12*ww);
494
495 _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>."));
496
497 QGridLayout* dlgLayout = new QGridLayout();
498 dlgLayout->addWidget(new QLabel(" List of NTRIP Broadcasters from www.rtcm-ntrip.org"), 0,0,1,3,Qt::AlignLeft);
499 dlgLayout->addWidget(_casterTable, 1, 0, 1, 3);
500 dlgLayout->addWidget(_whatsThisCasterTableButton, 2, 0);
501 dlgLayout->addWidget(_closeButton, 2, 1, Qt::AlignRight);
502 dlgLayout->addWidget(_okButton, 2, 2);
503
504 setMinimumSize(600,400);
505 setWindowTitle(tr("Select Broadcaster"));
506 setLayout(dlgLayout);
507 resize(68*ww, 60*ww);
508 show();
509}
510
511// Caster table what's this
512////////////////////////////////////////////////////////////////////////////
513void bncCasterTableDlg:: slotWhatsThisCasterTable() {
514 QWhatsThis::enterWhatsThisMode();
515}
516
517// Caster table destructor
518////////////////////////////////////////////////////////////////////////////
519bncCasterTableDlg::~bncCasterTableDlg() {
520 if (_casterTable) {
521 for (int ir = 0; ir < _casterTable->rowCount(); ir++) {
522 for (int ic = 0; ic < _casterTable->columnCount(); ic++) {
523 delete _casterTable->item(ir,ic);
524 }
525 }
526 }
527}
528
529// Accept caster table
530////////////////////////////////////////////////////////////////////////////
531void bncCasterTableDlg::slotAcceptCasterTable() {
532 if (_casterTable) {
533 for (int ir = 0; ir < _casterTable->rowCount(); ir++) {
534 if (_casterTable->isItemSelected(_casterTable->item(ir,0))) {
535 emit newCaster(_casterTable->item(ir,0)->text(),
536 _casterTable->item(ir,1)->text());
537 }
538 }
539 }
540 QDialog::accept();
541}
542
543// New caster selected
544////////////////////////////////////////////////////////////////////////////
545void bncTableDlg::slotNewCaster(QString newCasterHost, QString newCasterPort) {
546
547 _casterHostComboBox->insertItem(0, newCasterHost);
548 _casterUserLineEdit->setText("");
549 _casterPortLineEdit->setText(newCasterPort);
550
551 QUrl url;
552 url.setScheme("http");
553 url.setHost(newCasterHost);
554 url.setPort(newCasterPort.toInt());
555 addUrl(url);
556}
557
558// New caster selected
559////////////////////////////////////////////////////////////////////////////
560void bncTableDlg::addUrl(const QUrl& url) {
561 QSettings settings;
562 QStringList oldUrlList = settings.value("casterUrlList").toStringList();
563 QStringList newUrlList;
564 for (int ii = 0; ii < oldUrlList.count(); ii++) {
565 QUrl oldUrl(oldUrlList[ii]);
566 if (url.host() == oldUrl.host()) {
567 newUrlList << url.toString();
568 }
569 else {
570 newUrlList << oldUrl.toString();
571 }
572 }
573 settings.setValue("casterUrlList", newUrlList);
574 settings.sync();
575}
576
577// New caster selected in combobox
578////////////////////////////////////////////////////////////////////////////
579void bncTableDlg::slotCasterHostChanged(const QString& newHost) {
580 QSettings settings;
581 QStringList casterUrlList = settings.value("casterUrlList").toStringList();
582 for (int ii = 0; ii < casterUrlList.count(); ii++) {
583 QUrl url(casterUrlList[ii]);
584 if (url.host() == newHost) {
585 _casterUserLineEdit->setText(url.userName());
586 if (url.port() > 0) {
587 _casterPortLineEdit->setText(QString("%1").arg(url.port()));
588 }
589 else {
590 _casterPortLineEdit->setText("");
591 }
592 }
593 }
594}
Note: See TracBrowser for help on using the repository browser.